Regularizasyon nedir?
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 103/112
- 5 dk
Regularizasyon, model karmaşıklığına ceza ekleyerek aşırı öğrenmeyi önler.
Düzenlileştirme nedir?
Çok özellikli ve az örnekli veride doğrusal model, gürültüyü açıklamak için aşırı büyük katsayılar öğrenir ve aşırı öğrenir. Düzenlileştirme, kayıp fonksiyonuna katsayıların büyüklüğüne bir ceza ekleyerek bunu önler:
# sıradan: min Σ(y - ŷ)²
# Ridge (L2): min Σ(y - ŷ)² + α·Σw²
# Lasso (L1): min Σ(y - ŷ)²/(2n) + α·Σ|w|α büyüdükçe katsayılar küçülür: model daha basit, daha az esnek olur. α = 0 sıradan doğrusal regresyondur.
Az örnek, çok özellik
60 örnek ve 20 özellikli bir veride yalnızca 3 özellik gerçekten önemliyse, sıradan regresyon kalan 17 özellik için de sıfırdan farklı katsayılar bulur. Eğitim skoru yüksek, test skoru düşük çıkar:
m = LinearRegression().fit(X_tr, y_tr)
print(m.score(X_tr, y_tr), m.score(X_te, y_te)) # aradaki fark aşırı öğrenmeÖrnek sayısı özellik sayısına yaklaştıkça bu sorun büyür; özellik sayısı örnek sayısını aşınca sıradan regresyonun tek çözümü bile kalmaz.
Uygulama Aşırı öğrenmeyi gör
Veriyi test_size=0.5, random_state=0 ile böl. LinearRegression ve Ridge(alpha=10) eğit; her biri için eğitim ve test R²'sini round(..., 3) ile aynı satırda yazdır.
Başlangıç kodu
import numpy as np
from sklearn.preprocessing import StandardScaler
rng = np.random.default_rng(0)
X = rng.normal(size=(60, 20))
y = 3 * X[:, 0] - 2 * X[:, 1] + 1.5 * X[:, 2] + rng.normal(0, 1, 60)
Xs = StandardScaler().fit_transform(X)
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Ridge
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.preprocessing import StandardScaler
rng = np.random.default_rng(0)
X = rng.normal(size=(60, 20))
y = 3 * X[:, 0] - 2 * X[:, 1] + 1.5 * X[:, 2] + rng.normal(0, 1, 60)
Xs = StandardScaler().fit_transform(X)
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Ridge
X_tr, X_te, y_tr, y_te = train_test_split(Xs, y, test_size=0.5, random_state=0)
for m in [LinearRegression(), Ridge(alpha=10)]:
m.fit(X_tr, y_tr)
print(round(m.score(X_tr, y_tr), 3), round(m.score(X_te, y_te), 3))Beklenen çıktı
0.981 0.555 0.875 0.731
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Düzenlileştirme hangi sorunu hedefler?
- Dengesiz sınıfları
- Yavaş eğitimi
- Aşırı öğrenmeyi Doğru cevap
- Eksik veriyi
Açıklama: Büyük katsayıları cezalandırarak modelin gürültüye uymasını zorlaştırır.
2 Ceza gücünü ayarla.
m = Ridge(____=1.0)
m = Ridge(alpha=1.0)
Açıklama: scikit-learn'de Ridge ve Lasso'nun ceza gücü alpha'dır.
3 Kavramları eşleştir.
| Kavram | Anlamı |
|---|---|
α = 0 |
Sıradan regresyon |
α büyük |
Küçük katsayılar |
L2 cezası |
Ridge |
L1 cezası |
Lasso |