CodeBlanks Logo Icon CodeBlanks

Regularizasyon nedir?

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

model.py
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

model.py
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.

Soru
m = Ridge(____=1.0)
Cevap
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

Orta seviye bölümündeki tüm dersler