Boosting
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 100/112
- 5 dk
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 iyiTersine, 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
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
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.
ada = AdaBoostClassifier(DecisionTreeClassifier(____=1), n_estimators=200)
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 |