Makine Öğrenmesi
Gradient boosting
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ım
Adı 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 olabilir
Bü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.
Örnek çözümü göster
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))
Kendini test et
-
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ı
Cevabı göster
Mevcut modelin kalıntılarını — Kalıntı = y - ŷ; ağaç bu farkı küçültmeyi öğrenir.
-
Ağacı kalıntılara uydur.
agac = DecisionTreeRegressor(max_depth=2).fit(X, ____)
Cevabı göster
agac = DecisionTreeRegressor(max_depth=2).fit(X, y - p)
-
Kavramları eşleştir.
- kalıntı
- y - ŷ
- başlangıç tahmini
- Ortalama
- HistGradientBoosting
- Hızlı, NaN destekli
- negatif gradyan
- Kare hatada kalıntı
Sıradaki ders: Learning rate