CodeBlanks Logo Icon CodeBlanks

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.

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
from sklearn.model_selection import cross_val_score

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

Beklenen çıktı

0.954 0.961

Soru ve cevaplar

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

1 Bagging hangi modelde en az kazanç sağlar?

  • k=1 KNN
  • Budanmamış ağaç
  • Lojistik regresyon Doğru cevap
  • Derin karar ağacı

Açıklama: Doğrusal modeller veri değişince az değişir; ortalama almanın etkisi küçüktür.

2 Her kopyaya verinin %80'ini ver.

Soru
bag = BaggingClassifier(model, n_estimators=100, ____=0.8)
Cevap
bag = BaggingClassifier(model, n_estimators=100, max_samples=0.8)

Açıklama: max_samples her kopyanın örnek oranıdır.

3 Parametreleri eşleştir.

Kavram Anlamı
max_samples Kopya başına örnek
max_features Kopya başına özellik
bootstrap Yerine koyarak çekme
random forest Bölme başına rastgelelik

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