CodeBlanks Logo Icon CodeBlanks

Boosting nedir?

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

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.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier

# 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.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.

Soru
stump = DecisionTreeClassifier(____=1)
Cevap
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

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