Makine Öğrenmesi
Bagging
Bagging, paralel modellerin tahminlerini ortalamasını alır.
Bagging ile kararsız modeli sabitlemek
Bagging her kararsız modele uygulanabilir. Derin bir karar ağacı ya da küçük k'lı KNN gibi yüksek varyanslı modeller bootstrap kopyalarının ortalamasıyla belirgin biçimde iyileşir; kararlı modeller (lojistik regresyon) pek kazanmaz:
from sklearn.ensemble import BaggingClassifier
bag = BaggingClassifier(DecisionTreeClassifier(), n_estimators=100,
max_samples=0.8, max_features=0.8, random_state=0)
max_features < 1 her kopyaya özelliklerin bir alt kümesini verir ve çeşitliliği artırır.
Bagging ve random forest
Ağaçlarla bagging random forest'e çok yakındır; fark, random forest'in her bölmede rastgele özellik seçmesidir. BaggingClassifier(max_features=...) ise özellikleri ağaç başına bir kez seçer:
# bagging(max_features=0.5): her ağaç özelliklerin yarısını görür
# random forest(max_features="sqrt"): her bölmede yeni bir rastgele alt küme
Bölme düzeyindeki rastgelelik ağaçları daha çeşitli yapar; bu yüzden ağaçlar için genellikle random forest tercih edilir.
Uygulama KNN'e bagging
KNeighborsClassifier(n_neighbors=1) (ölçekli) ve onun 50 kopyalı BaggingClassifier(..., max_samples=0.7, random_state=0) sürümünü 5 katlı CV ile karşılaştır. İki ortalamayı 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
from sklearn.model_selection import cross_val_score
tek = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=1))
bag = BaggingClassifier(tek, n_estimators=50, max_samples=0.7, random_state=0)
print(round(cross_val_score(tek, X, y, cv=5).mean(), 3), round(cross_val_score(bag, X, y, cv=5).mean(), 3))
Kendini test et
-
Bagging hangi modelde en az kazanç sağlar?
- k=1 KNN
- Budanmamış ağaç
- Lojistik regresyon
- Derin karar ağacı
Cevabı göster
Lojistik regresyon — Doğrusal modeller veri değişince az değişir; ortalama almanın etkisi küçüktür.
-
Her kopyaya verinin %80'ini ver.
bag = BaggingClassifier(model, n_estimators=100, ____=0.8)
Cevabı göster
bag = BaggingClassifier(model, n_estimators=100, max_samples=0.8)
-
Parametreleri eşleştir.
- max_samples
- Kopya başına örnek
- max_features
- Kopya başına özellik
- bootstrap
- Yerine koyarak çekme
- random forest
- Bölme başına rastgelelik
Sıradaki ders: Boosting