Makine Öğrenmesi
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.
Örnek çözümü göster
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])
Kendini test et
-
Stump (derinlik 1) gibi basit bir model eksik öğreniyorsa hangi topluluk daha uygundur?
- Tek model
- Boosting
- Bagging
- Hiçbiri
Cevabı göster
Boosting — Bagging basit modellerin ortalamasını alır, sapma azalmaz; boosting hataları adım adım düzeltir.
-
Stump'larla AdaBoost kur.
ada = AdaBoostClassifier(DecisionTreeClassifier(____=1), n_estimators=200)
Cevabı göster
ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), n_estimators=200)
-
Durumları eşleştir.
- yüksek varyans
- Bagging
- yüksek sapma
- Boosting
- stump + bagging
- Az kazanç
- derin ağaç + boosting
- Aşırı öğrenme riski
Sıradaki ders: Stacking