Ridge & Lasso: Aşırı Uyumu Kontrol Etme
Düzenlileştirme teknikleri ile modelinizin aşırı uyum (overfitting) yapmasını engelleyin. Ridge (L2) ve Lasso (L1) farklarını interaktif olarak keşfedin.
⚡ Hızlı Özet: Ridge vs Lasso
OLS (Normal Regresyon)
Sadece hata karelerini minimize eder. Aşırı uyuma yatkındır.
Ridge (L2 Düzenlileştirme)
Katsayıların karelerini cezalandırır. Tüm değişkenleri tutar.
Lasso (L1 Düzenlileştirme)
Katsayıların mutlak değerlerini cezalandırır. Değişken seçimi yapar.
📐 MATEMATİKSEL TEMEL
OLS (En Küçük Kareler)
Sadece hataları minimize eder
Ridge (L2)
Katsayı karelerini cezalandırır
Lasso (L1)
Katsayı mutlak değerlerini cezalandırır
α (Alpha) Parametresi
α = 0: OLS ile aynı (düzenlileştirme yok)
α → ∞: Tüm katsayılar sıfıra gider
Optimal α: Cross-validation ile bulunur
🎮 İNTERAKTİF RIDGE & LASSO DEMOSU
Alpha değerini değiştirerek Ridge ve Lasso'nun katsayıları nasıl etkilediğini görün!
📊 Katsayı Değişimleri
🎯 Ridge (L2) Özellikleri
- Tüm değişkenleri modelde tutar
- Katsayıları sıfıra yaklaştırır ama tam sıfır yapmaz
- Çoklu doğrusallık (multicollinearity) problemlerinde iyidir
- Tüm değişkenlerin önemli olduğu durumlarda kullanılır
💡 Lasso (L1) Özellikleri
- Değişken seçimi yapar (bazı katsayıları tam sıfır yapar)
- Özellikle çok sayıda değişken olduğunda kullanışlıdır
- Daha yorumlanabilir modeller oluşturur
- Feature selection (özellik seçimi) için idealdir
🏠 GERÇEK HAYAT ÖRNEKLERİ
📈 Ev Fiyat Tahmini
Problem: Çok fazla değişken, bazıları gereksiz
Çözüm: Lasso kullan → önemli 15-20 değişken seçilsin
🛒 Müşteri Segmentasyonu
Problem: Tüm değişkenler önemli ama çoklu doğrusallık var
Çözüm: Ridge kullan → tüm değişkenleri koru ama katsayıları stabilize et
🐍 PYTHON'DA RIDGE & LASSO
Temel Kullanım
from sklearn.linear_model import Ridge, Lasso
from sklearn.model_selection import cross_val_score
import numpy as np
# Veri hazırlığı
X = ... # Özellikler
y = ... # Hedef değişken
# Ridge Regresyon
ridge = Ridge(alpha=1.0)
ridge_scores = cross_val_score(ridge, X, y, cv=5, scoring='r2')
print(f"Ridge CV R²: {np.mean(ridge_scores):.3f}")
# Lasso Regresyon
lasso = Lasso(alpha=0.1)
lasso_scores = cross_val_score(lasso, X, y, cv=5, scoring='r2')
print(f"Lasso CV R²: {np.mean(lasso_scores):.3f}")
# Katsayıları inceleme
ridge.fit(X, y)
lasso.fit(X, y)
print("Ridge katsayıları:", ridge.coef_)
print("Lasso katsayıları:", lasso.coef_)
print("Lasso sıfır katsayı sayısı:", np.sum(lasso.coef_ == 0))
Alpha Optimizasyonu
from sklearn.linear_model import RidgeCV, LassoCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
# Alpha değerleri grid'i
alphas = [0.001, 0.01, 0.1, 1, 10, 100, 1000]
# Pipeline ile standardizasyon + model
ridge_pipe = Pipeline([
('scaler', StandardScaler()),
('ridge', RidgeCV(alphas=alphas, cv=5))
])
lasso_pipe = Pipeline([
('scaler', StandardScaler()),
('lasso', LassoCV(alphas=alphas, cv=5, max_iter=10000))
])
# Eğitim
ridge_pipe.fit(X_train, y_train)
lasso_pipe.fit(X_train, y_train)
# En iyi alpha değerleri
print(f"En iyi Ridge alpha: {ridge_pipe.named_steps['ridge'].alpha_}")
print(f"En iyi Lasso alpha: {lasso_pipe.named_steps['lasso'].alpha_}")
# Katsayı analizi
ridge_coef = ridge_pipe.named_steps['ridge'].coef_
lasso_coef = lasso_pipe.named_steps['lasso'].coef_
print(f"Lasso sıfır olmayan katsayılar: {np.sum(lasso_coef != 0)}")
print(f"Ridge sıfır olmayan katsayılar: {np.sum(ridge_coef != 0)}")
# Önemli değişkenleri bulma (Lasso için)
important_features = np.where(lasso_coef != 0)[0]
print("Önemli değişken indeksleri:", important_features)
🎯 HANGİSİNİ SEÇMELİ?
RIDGE (L2) Kullanın Eğer:
LASSO (L1) Kullanın Eğer:
İpucu: Her ikisini de deneyin ve cross-validation skorlarına göre karar verin. Bazen ElasticNet (L1 + L2 kombinasyonu) en iyi sonucu verebilir.