Gradient boosting
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 43/112
- 5 dk
Gradient boosting, hataları gradyan ile azaltarak modeli geliştirir.
Gradient boosting
Gradient boosting her yeni ağacı, mevcut toplam modelin kalıntılarına (regresyonda y - ŷ) uydurur. Yani her ağaç "şu ana kadarki tahminin ne kadar yanlış olduğunu" öğrenir ve tahmine küçük bir adımla eklenir:
p = np.full(len(y), y.mean()) # başlangıç: ortalama
for _ in range(100):
kalinti = y - p
agac = DecisionTreeRegressor(max_depth=2).fit(X, kalinti)
p += 0.1 * agac.predict(X) # küçük adımAdı kayıp fonksiyonunun gradyanından gelir: kare hatanın negatif gradyanı tam olarak kalıntıdır.
scikit-learn'deki uygulamalar
İki sürüm vardır:
GradientBoostingClassifier/Regressor: klasik, küçük-orta veri için.HistGradientBoostingClassifier/Regressor: özellikleri kutulara ayırır; on binlerce örnekte çok daha hızlıdır, eksik değerleri doğrudan destekler.
from sklearn.ensemble import HistGradientBoostingClassifier
hgb = HistGradientBoostingClassifier(random_state=0).fit(X_train, y_train) # NaN olabilirBüyük tablo verisinde ilk denenecek model genellikle HistGradientBoosting'dir.
Uygulama Elle gradient boosting
Başlangıç tahmini y.mean() olan elle bir gradient boosting döngüsü yaz: 50 tur, her turda DecisionTreeRegressor(max_depth=2) kalıntılara uydurulsun ve tahmine 0.1 katıyla eklensin. Başlangıçtaki ve sondaki MSE'yi round(..., 2) ile alt alta yazdır.
Başlangıç kodu
import numpy as np
from sklearn.tree import DecisionTreeRegressor
rng = np.random.default_rng(0)
X = rng.uniform(0, 6, size=(200, 1))
y = np.sin(X[:, 0]) + rng.normal(0, 0.1, 200)
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.tree import DecisionTreeRegressor
rng = np.random.default_rng(0)
X = rng.uniform(0, 6, size=(200, 1))
y = np.sin(X[:, 0]) + rng.normal(0, 0.1, 200)
p = np.full(len(y), y.mean())
print(round(((y - p) ** 2).mean(), 2))
for _ in range(50):
agac = DecisionTreeRegressor(max_depth=2).fit(X, y - p)
p += 0.1 * agac.predict(X)
print(round(((y - p) ** 2).mean(), 2))Beklenen çıktı
0.5 0.01
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Gradient boosting regresyonunda her yeni ağaç neyi hedef alır?
- Özgün y'yi
- Rastgele etiketleri
- Önceki ağacın tahminini
- Mevcut modelin kalıntılarını Doğru cevap
Açıklama: Kalıntı = y - ŷ; ağaç bu farkı küçültmeyi öğrenir.
2 Ağacı kalıntılara uydur.
agac = DecisionTreeRegressor(max_depth=2).fit(X, ____)
agac = DecisionTreeRegressor(max_depth=2).fit(X, y - p)
Açıklama: Hedef, gerçek ile mevcut tahmin arasındaki farktır.
3 Kavramları eşleştir.
| Kavram | Anlamı |
|---|---|
kalıntı |
y - ŷ |
başlangıç tahmini |
Ortalama |
HistGradientBoosting |
Hızlı, NaN destekli |
negatif gradyan |
Kare hatada kalıntı |