CodeBlanks Logo Icon CodeBlanks

Learning rate

Learning rate, her ağacın katkısını ölçekler.

Öğrenme oranı

learning_rate her ağacın katkısını küçültür. Küçük oran, aynı başarıya daha çok ağaçla ama daha iyi genelleyerek ulaşır; buna shrinkage (büzme) denir. Öğrenme oranı ile ağaç sayısı birlikte ayarlanır:

for lr, n in [(1.0, 50), (0.1, 500)]:
    m = GradientBoostingClassifier(learning_rate=lr, n_estimators=n, random_state=0)
    print(lr, n, m.fit(X_train, y_train).score(X_test, y_test))

Random forest'in aksine boosting'de ağaç sayısı artınca aşırı öğrenme olur.

Erken durdurma

Kaç ağacın yeteceğini elle aramak yerine eğitim, doğrulama skoru iyileşmeyi bıraktığında durdurulabilir. HistGradientBoosting'de iç doğrulama kümesiyle kendiliğinden yapılır:

m = HistGradientBoostingClassifier(max_iter=1000, early_stopping=True,
                                   validation_fraction=0.1, n_iter_no_change=10,
                                   random_state=0).fit(X_train, y_train)
print(m.n_iter_)   # gerçekte kullanılan ağaç sayısı

Klasik GradientBoosting'de aynı iş n_iter_no_change parametresiyle yapılır.

Uygulama Erken durdurma

HistGradientBoostingClassifier(max_iter=1000, early_stopping=True, n_iter_no_change=10, random_state=0) eğit. Kullanılan tur sayısını (n_iter_) ve test doğruluğunu round(..., 3) ile alt alta yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.ensemble import HistGradientBoostingClassifier

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.ensemble import HistGradientBoostingClassifier

m = HistGradientBoostingClassifier(max_iter=1000, early_stopping=True, n_iter_no_change=10, random_state=0).fit(X_train, y_train)
print(m.n_iter_)
print(round(m.score(X_test, y_test), 3))

Beklenen çıktı

61
0.937

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Öğrenme oranı yarıya indirilirse ağaç sayısı için genel kural nedir?

  • Değişmez
  • Bire düşer
  • Yaklaşık iki katına çıkarılır Doğru cevap
  • Yarıya indirilir

Açıklama: Her adım küçüldüğü için aynı yolu gitmek daha çok adım ister.

2 Ağaç katkısını küçült.

Soru
m = GradientBoostingClassifier(____=0.05, n_estimators=400)
Cevap
m = GradientBoostingClassifier(learning_rate=0.05, n_estimators=400)

Açıklama: scikit-learn'de parametrenin adı learning_rate'tir.

3 Ayarları eşleştir.

Kavram Anlamı
learning_rate Adım büyüklüğü
n_estimators Ağaç sayısı
n_iter_no_change Erken durdurma sabrı
n_iter_ Kullanılan tur

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