Makine Öğrenmesi
Aşırı öğrenme
Çok derin ağaçlar veriyi ezberler; budama (pruning) ile önlenir.
Aşırı öğrenme
Model eğitim verisindeki gürültüyü de öğrenirse eğitimde çok iyi, yeni veride kötü sonuç verir; buna aşırı öğrenme denir. Sınırsız ağaçlar bunun en bilinen örneğidir:
m = DecisionTreeClassifier(random_state=0).fit(X_train, y_train)
print(m.score(X_train, y_train)) # 1.0
print(m.score(X_test, y_test)) # belirgin biçimde düşük
Eğitim ve test skorları arasındaki büyük fark aşırı öğrenmenin işaretidir.
Budama
Çözüm ağacı küçük tutmaktır: max_depth, min_samples_leaf ya da maliyet-karmaşıklık budaması (ccp_alpha). ccp_alpha büyüdükçe az katkı veren dallar kesilir:
for a in [0.0, 0.01, 0.05]:
m = DecisionTreeClassifier(ccp_alpha=a, random_state=0).fit(X_train, y_train)
print(a, m.get_n_leaves(), m.score(X_test, y_test))
Tersi de bir sorundur: çok basit model (örneğin derinlik 1) hem eğitimde hem testte kötüdür; buna eksik öğrenme denir.
Uygulama Aşırı öğrenmeyi gör
Gürültülü veride sınırsız bir DecisionTreeClassifier(random_state=0) ve max_depth=2 olan bir ağaç eğit. Her biri için eğitim ve test doğruluğunu round(..., 2) ile aynı satırda yazdır (önce sınırsız).
Örnek çözümü göster
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
rng = np.random.default_rng(0)
X = rng.uniform(0, 10, size=(200, 2))
y = (X[:, 0] + rng.normal(0, 2, 200) > 5).astype(int)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
for m in [DecisionTreeClassifier(random_state=0), DecisionTreeClassifier(max_depth=2, random_state=0)]:
m.fit(X_train, y_train)
print(round(m.score(X_train, y_train), 2), round(m.score(X_test, y_test), 2))
Kendini test et
-
Eğitim doğruluğu 0.99, test doğruluğu 0.70 ise ne olmuştur?
- Veri sızıntısı yoktur, model iyidir
- Test kümesi hatalıdır
- Aşırı öğrenme
- Eksik öğrenme
Cevabı göster
Aşırı öğrenme — Model eğitim verisini ezberlemiş, genelleme yapamıyor.
-
Maliyet-karmaşıklık budaması uygula.
m = DecisionTreeClassifier(____=0.02)
Cevabı göster
m = DecisionTreeClassifier(ccp_alpha=0.02)
-
Durumları eşleştir.
- Eğitim yüksek, test düşük
- Aşırı öğrenme
- İkisi de düşük
- Eksik öğrenme
- ccp_alpha
- Budama
- min_samples_leaf
- Küçük yaprakları önler
Sıradaki ders: Özet - Karar ağaçları