Çoklu doğrusal regresyon
Önkoşul:Basit doğrusal regresyon
Kanca
- derste metrekareden fiyat tahmin ettik. Ama gerçekte fiyatı oda sayısı da etkiler. İki (hatta yüzlerce) özniteliği aynı anda kullanmak istediğinde, 3. dersteki basit formül yeterli kalır mı? Ve “en iyi” katsayıları bulmanın kapalı formül dışında bir yolu var mı?
Sezgi
Çoklu doğrusal regresyon, tek bir öznitelik yerine BİRDEN FAZLA özniteliği aynı anda kullanır — her biri kendi katsayısını alır: fiyat = b + m1×metrekare + m2×oda_sayısı. Mantık aynı: hâlâ MSE’yi minimize eden katsayıları arıyoruz.
Kapalı formül (OLS) hâlâ çalışır, ama öznitelik sayısı arttıkça matematiksel olarak pahalılaşır. Gradyan inişi (gradient descent), alternatif bir yaklaşım sunar: katsayılara rastgele bir yerden başla, her adımda hatayı azaltacak yöne doğru KÜÇÜK bir adım at, bunu tekrarla.
Henüz yakınsamadı — w = 2.754, daha fazla adım veya farklı bir öğrenme oranı dene.
Öğrenme oranını değiştir: çok küçükse (0.05 gibi) adımlar yavaş ilerler, hedefe ulaşmak çok adım alır. Çok büyükse (1.0’in üzerinde) adımlar hedefin etrafında büyüyerek sekmeye başlar — bu ıraksamadır.
Matematik tazelemeGradyan inişiMekanizma
İki öznitelikli gerçek veriyle ilerleyelim:
İki öznitelikli veri
# Artık İKİ öznitelik var: metrekare VE oda sayısı. Fiyatı ikisi birden etkiliyor.
n = 60
metrekare = 50 + rng.random(n) * 150
oda_sayisi = rng.integers(1, 6, size=n)
fiyat = 2 + 0.07 * metrekare + 1.1 * oda_sayisi + rng.normal(0, 1.0, size=n)
X = np.column_stack([metrekare, oda_sayisi])
print(f"Öznitelik matrisi X şekli: {X.shape} (satır=ev, sütun=[metrekare, oda_sayisi])")
print(f"İlk 3 ev:\n{X[:3]}")
print(f"Karşılık gelen fiyatlar: {fiyat[:3].round(2)}")Öznitelik matrisi X şekli: (60, 2) (satır=ev, sütun=[metrekare, oda_sayisi])
İlk 3 ev:
[[166.09340728 3. ]
[115.83176596 4. ]
[178.78968799 4. ]]
Karşılık gelen fiyatlar: [17.41 14.95 19.58]Çoklu regresyon modeli
# Tek öznitelikte y = m*x + b idi. Çoklu regresyonda HER öznitelik kendi katsayısını alır.
model = LinearRegression()
model.fit(X, fiyat)
print(f"\nmetrekare katsayısı: {model.coef_[0]:.4f} (1 m² artınca fiyat bu kadar artar, oda sayısı SABİTKEN)")
print(f"oda_sayisi katsayısı: {model.coef_[1]:.4f} (1 oda artınca fiyat bu kadar artar, metrekare SABİTKEN)")
print(f"kesişim: {model.intercept_:.2f}")
tahmin = model.predict(X)
mse = np.mean((fiyat - tahmin) ** 2)
print(f"\nMSE: {mse:.3f}")
metrekare katsayısı: 0.0678 (1 m² artınca fiyat bu kadar artar, oda sayısı SABİTKEN)
oda_sayisi katsayısı: 0.9782 (1 oda artınca fiyat bu kadar artar, metrekare SABİTKEN)
kesişim: 2.51
MSE: 0.908Her katsayı, diğer öznitelik sabitken o özniteliğin etkisini gösterir — “1 m² artınca fiyat 0.0678 artar, oda sayısı DEĞİŞMEDEN.” Şimdi aynı problemi gradyan inişiyle çözelim:
Gradyan inişi ile çözüm
# OLS'in kapalı formülü büyük öznitelik sayısında pahalılaşabilir. Alternatif: GRADYAN İNİŞİ —
# katsayıları küçük adımlarla, kaybı azaltacak yönde GÜNCELLEYEREK bulmak.
X_std = (X - X.mean(axis=0)) / X.std(axis=0) # gradyan inişi ölçeklenmiş veride daha kararlı çalışır
y_std = fiyat - fiyat.mean()
agirliklar = np.zeros(2)
ogrenme_orani = 0.1
adim_sayisi = 200
for _ in range(adim_sayisi):
tahmin_std = X_std @ agirliklar
hata = tahmin_std - y_std
gradyan = (2 / len(y_std)) * (X_std.T @ hata)
agirliklar -= ogrenme_orani * gradyan
print(f"\nGradyan inişiyle bulunan (ölçeklenmiş) ağırlıklar: {agirliklar.round(4)}")
# Karşılaştırma için OLS'i de aynı ölçeklenmiş veride çözelim.
model_std = LinearRegression(fit_intercept=False)
model_std.fit(X_std, y_std)
print(f"OLS'in (ölçeklenmiş veride) bulduğu ağırlıklar: {model_std.coef_.round(4)}")
print("İki yöntem aynı sonuca ulaşıyor — biri kapalı formül, diğeri adım adım yaklaşıyor.")
Gradyan inişiyle bulunan (ölçeklenmiş) ağırlıklar: [2.8598 1.2997]
OLS'in (ölçeklenmiş veride) bulduğu ağırlıklar: [2.8598 1.2997]
İki yöntem aynı sonuca ulaşıyor — biri kapalı formül, diğeri adım adım yaklaşıyor.Gradyan inişinin bulduğu ağırlıklar (2.8598, 1.2997), OLS’in kapalı formülle bulduğuyla birebir aynı — iki farklı yol, aynı hedefe varıyor. Çoğu kişi “gradyan inişi daha karmaşık, o zaman daha ‘gelişmiş’ bir yöntem olmalı” sanır. Değil, çünkü basit doğrusal regresyonda kapalı formül zaten en hızlı çözüm — gradyan inişinin asıl gücü, kapalı formülün pahalı veya imkansız olduğu durumlarda (çok sayıda öznitelik, veya ileride göreceğimiz sinir ağları gibi doğrusal olmayan modellerde) ortaya çıkıyor.
Matematik
Gradyan inişi güncelleme kuralı
| Sembol | Anlamı |
|---|---|
| t’inci adımdaki ağırlıklar (katsayılar) | |
| (eta) | Öğrenme oranı — her adımın ne kadar büyük olacağı |
| Kayıp fonksiyonunun gradyanı — hatayı en hızlı artıran yön | |
| Gradyanın TERSİ yönde küçük bir adım — hatayı azaltan yön |
Gradyan, “kaybı en hızlı artıran yönü” gösterir; bu yüzden gradyanın tersi yönünde ilerleriz. çok küçükse yakınsama çok yavaş olur; çok büyükse adımlar minimum noktayı “aşıp” karşı tarafa geçer, her seferinde daha da büyüyerek ıraksar — notebook’taki 173.98’e fırlayan ağırlıklar bunun örneği.
Kod
Şimdi öğrenme oranı çok büyük olduğunda gerçekte ne olduğunu görelim:
Iraksama: öğrenme oranı çok büyükken
# Öğrenme oranı çok büyük olursa ne olur? Aynı gradyan inişini çok yüksek bir oranla deneyelim.
agirliklar_patlak = np.zeros(2)
for adim in range(10):
tahmin_std = X_std @ agirliklar_patlak
hata = tahmin_std - y_std
gradyan = (2 / len(y_std)) * (X_std.T @ hata)
agirliklar_patlak -= 1.5 * gradyan # çok büyük öğrenme oranı
if adim < 5:
print(f"adım {adim}: ağırlıklar = {agirliklar_patlak.round(2)}")
print("\nBüyük öğrenme oranıyla ağırlıklar küçülmek yerine BÜYÜYOR — bu 'ıraksama' (divergence).")adım 0: ağırlıklar = [9.09 5.02]
adım 1: ağırlıklar = [-11.05 -8.58]
adım 2: ağırlıklar = [34.55 26.5 ]
adım 3: ağırlıklar = [-70.4 -61.52]
adım 4: ağırlıklar = [173.98 155.63]
Büyük öğrenme oranıyla ağırlıklar küçülmek yerine BÜYÜYOR — bu 'ıraksama' (divergence).Ağırlıklar her adımda büyüyor, işaret değiştiriyor, kontrolden çıkıyor — model hiçbir zaman yakınsamayacak.
Nerede işe yarar
Çoklu regresyon ve gradyan inişi, makine öğrenmesinin en temel araç çiftidir:
- Gerçekçi tahmin modelleri. Gerçek dünyada bir sonucu tek bir öznitelik değil, onlarca öznitelik birlikte etkiler.
- Büyük ölçekli modeller. Milyonlarca satırlık veya yüzlerce öznitelikli problemlerde kapalı formül pratik olmaktan çıkar, gradyan inişi (ve türevleri) devreye girer.
- Derin öğrenmenin temeli. Sinir ağlarının TÜM eğitimi gradyan inişi üzerine kuruludur — bu dersin fikri, derin öğrenme kategorisinde çok daha büyük ölçekte karşımıza çıkacak.
Bu 3 hatayı yaparsın:
- Gradyan inişinde öznitelikleri ölçeklemeden (15. veri bilimi dersini hatırla) çalıştırmak — farklı ölçekli öznitelikler yakınsamayı yavaşlatır veya imkansızlaştırır.
- Öğrenme oranını hiç ayarlamadan sabit bir değer kullanmak — veri setine göre doğru oran değişir.
- Bir katsayıyı “diğerlerinden bağımsız” yorumlamak — çoklu regresyonda her katsayı DİĞERLERİ sabitken geçerlidir.
Kendini test et
1. Çoklu doğrusal regresyonda bir katsayı (örn. metrekare katsayısı) nasıl yorumlanır?
- Diğer özniteliklerden bağımsız, tek başına etkisi
- Diğer öznitelikler SABİTKEN, o özniteliğin bir birim artışının etkisi (doğru cevap)
- Sadece en önemli öznitelik için anlamlıdır
- Yorumlanamaz
Neden: Çoklu regresyonda her katsayı, diğer öznitelikler sabit tutulduğunda o özniteliğin etkisini gösterir — 'oda sayısı sabitken metrekare 1 birim artarsa' gibi.
2. Notebook'ta gradyan inişinin bulduğu ağırlıklar, OLS'in bulduğuyla neden birebir aynı çıktı?
- Tesadüf
- İkisi de aynı MSE'yi minimize eden çözümü arıyor — biri kapalı formülle, diğeri adım adım yaklaşarak aynı noktaya varıyor (doğru cevap)
- Gradyan inişi hatalı çalıştı
- Veri çok küçüktü
Neden: Kayıp fonksiyonu (MSE) dışbükey olduğu için tek bir global minimumu vardır; hem kapalı formül hem gradyan inişi bu aynı noktaya ulaşır.
3. Öğrenme oranı çok büyük seçildiğinde ne olur?
- Model daha hızlı ve doğru yakınsar
- Ağırlıklar küçülmek yerine büyüyerek ıraksayabilir (doğru cevap)
- Hiçbir şey değişmez
- Sadece hesaplama hızı artar, sonuç aynı kalır
Neden: Çok büyük bir öğrenme oranı, her adımda minimum noktayı aşıp karşı tarafa geçmeye (ve giderek büyümeye) neden olabilir — bu ıraksamadır, notebook'ta 173.98'e fırlayan ağırlıklarla gördük.
Özet
Özet
- Çoklu doğrusal regresyon, birden fazla özniteliği aynı anda kullanır — her biri kendi katsayısını alır.
- Bir katsayı, diğer öznitelikler sabitken o özniteliğin etkisini gösterir.
- Gradyan inişi, kaybı azaltacak yönde küçük adımlarla ilerleyerek OLS ile aynı sonuca ulaşabilir.
- Öğrenme oranı çok küçükse yakınsama yavaş olur; çok büyükse model ıraksayabilir.
- Gradyan inişi, kapalı formülün pahalı/imkansız olduğu büyük ve doğrusal olmayan modellerde (sinir ağları gibi) vazgeçilmezdir.