CodeBlanks Logo Icon CodeBlanks

Boosting

Boosting, sıralı modellerin hatalarını düzeltmesini sağlar.

Topluluklarda boosting

Boosting farklı türden modelleri değil, aynı zayıf öğreniciyi sırayla birleştirir. Bagging varyansı, boosting ise öncelikle sapmayı azaltır; bu yüzden ikisi farklı durumlarda öne çıkar:

  • Model aşırı öğreniyorsa (yüksek varyans): bagging / random forest.
  • Model eksik öğreniyorsa (yüksek sapma): boosting.
from sklearn.ensemble import HistGradientBoostingClassifier
hgb = HistGradientBoostingClassifier(max_depth=3, learning_rate=0.1, random_state=0)

Boosting modeli de bir voting ya da stacking topluluğunun üyesi olabilir.

Sapma-varyans gözlemi

Aynı zayıf öğreniciyle bagging ve boosting'i karşılaştırmak farkı somutlaştırır. Stump'lar için bagging neredeyse hiç kazanç sağlamaz, boosting ise büyük fark yaratır:

stump = DecisionTreeClassifier(max_depth=1)
BaggingClassifier(stump, n_estimators=200)    # stump'lara yakın
AdaBoostClassifier(stump, n_estimators=200)   # çok daha iyi

Tersine, derin ağaçlarla boosting hızla aşırı öğrenir; bagging ise iyi sonuç verir.

Uygulama Stump'lar üzerinde

Tek bir stump, 200 stump'lı BaggingClassifier ve 200 stump'lı AdaBoostClassifier (ikisi de random_state=0) eğit. Üç test doğruluğunu round(..., 3) ile aynı satırda yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier

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.3, random_state=2, stratify=y)
modeller = [("lr", make_pipeline(StandardScaler(), LogisticRegression())), ("knn", make_pipeline(StandardScaler(), KNeighborsClassifier())), ("agac", DecisionTreeClassifier(max_depth=4, random_state=0))]
from sklearn.ensemble import BaggingClassifier, AdaBoostClassifier

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier

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.3, random_state=2, stratify=y)
modeller = [("lr", make_pipeline(StandardScaler(), LogisticRegression())), ("knn", make_pipeline(StandardScaler(), KNeighborsClassifier())), ("agac", DecisionTreeClassifier(max_depth=4, random_state=0))]
from sklearn.ensemble import BaggingClassifier, AdaBoostClassifier

stump = DecisionTreeClassifier(max_depth=1)
m = [stump, BaggingClassifier(stump, n_estimators=200, random_state=0), AdaBoostClassifier(stump, n_estimators=200, random_state=0)]
print(*[round(x.fit(X_train, y_train).score(X_test, y_test), 3) for x in m])

Beklenen çıktı

0.912 0.912 0.965

Soru ve cevaplar

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

1 Stump (derinlik 1) gibi basit bir model eksik öğreniyorsa hangi topluluk daha uygundur?

  • Tek model
  • Boosting Doğru cevap
  • Bagging
  • Hiçbiri

Açıklama: Bagging basit modellerin ortalamasını alır, sapma azalmaz; boosting hataları adım adım düzeltir.

2 Stump'larla AdaBoost kur.

Soru
ada = AdaBoostClassifier(DecisionTreeClassifier(____=1), n_estimators=200)
Cevap
ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), n_estimators=200)

Açıklama: max_depth=1 tek bölmeli ağaçtır.

3 Durumları eşleştir.

Kavram Anlamı
yüksek varyans Bagging
yüksek sapma Boosting
stump + bagging Az kazanç
derin ağaç + boosting Aşırı öğrenme riski

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