Boosting nedir?
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 41/112
- 5 dk
Boosting, zayıf modelleri sırayla eğiterek güçlü bir model oluşturur.
Boosting nedir?
Bagging modelleri paralel ve bağımsız eğitir. Boosting ise modelleri sırayla eğitir: her yeni model, öncekilerin hata yaptığı örneklere odaklanır. Sonuçta zayıf modellerden (sığ ağaçlar) güçlü bir model kurulur.
# bagging: ağaç1, ağaç2, ağaç3 ... bağımsız -> ortalama (varyans azalır)
# boosting: ağaç1 -> ağaç2 hataları düzeltir -> ağaç3 ... (sapma azalır)Tablo verisinde en başarılı yöntemler (XGBoost, LightGBM, scikit-learn'ün HistGradientBoosting) boosting ailesindendir.
Zayıf öğrenici
Boosting'in yapı taşı rastgeleden biraz iyi olan basit bir modeldir; genellikle derinliği 1-3 olan ağaçlar. Tek başına derinlik-1 ağaç (stump) zayıftır, ama yüzlercesinin sıralı toplamı karmaşık sınırlar çizer:
stump = DecisionTreeClassifier(max_depth=1).fit(X_train, y_train)
print(stump.score(X_test, y_test)) # tek soru: zayıf
ada = AdaBoostClassifier(n_estimators=200, random_state=0).fit(X_train, y_train)
print(ada.score(X_test, y_test)) # 200 stump: güçlüZayıf öğrenici kullanmak her adımın küçük ve kontrollü bir düzeltme yapmasını sağlar.
Uygulama Stump ve boosting
Tek bir DecisionTreeClassifier(max_depth=1) ve AdaBoostClassifier(n_estimators=200, random_state=0) eğit. İki test doğruluğunu round(..., 3) ile alt alta yazdır.
Başlangıç kodu
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.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
# buraya yazÖrnek çözüm
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.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
stump = DecisionTreeClassifier(max_depth=1).fit(X_train, y_train)
ada = AdaBoostClassifier(n_estimators=200, random_state=0).fit(X_train, y_train)
print(round(stump.score(X_test, y_test), 3))
print(round(ada.score(X_test, y_test), 3))Beklenen çıktı
0.888 0.944
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Boosting'de ağaçlar neden paralel eğitilemez?
- Edilebilir
- Her ağaç öncekilerin hatalarına bağlıdır Doğru cevap
- Ağaçlar çok derindir
- Bellek yetmez
Açıklama: Sıralı yapı, boosting'i bagging'den ayıran temel özelliktir.
2 Tek soruluk bir ağaç kur.
stump = DecisionTreeClassifier(____=1)
stump = DecisionTreeClassifier(max_depth=1)
Açıklama: Derinlik 1 ağaç tek bir bölme yapar.
3 Yöntemleri eşleştir.
| Kavram | Anlamı |
|---|---|
bagging |
Paralel, bağımsız |
boosting |
Sıralı, hata odaklı |
stump |
Derinlik-1 ağaç |
zayıf öğrenici |
Rastgeleden biraz iyi |