CodeBlanks Logo Icon CodeBlanks

Bagging

Bagging, her ağacı rastgele örneklerle eğiterek çeşitlilik sağlar.

Bagging

Bagging (bootstrap aggregating), herhangi bir modeli bootstrap örneklemleriyle çoğaltıp ortalamasını alan genel yöntemdir. Random forest, bagging'e "bölmede rastgele özellik" eklenmiş halidir:

from sklearn.ensemble import BaggingClassifier
bag = BaggingClassifier(DecisionTreeClassifier(), n_estimators=100, random_state=0)
bag.fit(X_train, y_train)

Bagging en çok, kararsız (yüksek varyanslı) modellerde işe yarar: derin ağaçlar, KNN'in küçük k'lısı.

Torba dışı (OOB) skor

Her ağaç örneklerin ~%37'sini hiç görmez. Her örnek, onu görmemiş ağaçların oyuyla değerlendirilince ayrı bir doğrulama kümesi gerekmeden bir başarı tahmini elde edilir:

rf = RandomForestClassifier(n_estimators=200, oob_score=True, random_state=0)
rf.fit(X_train, y_train)
print(rf.oob_score_)   # CV'ye yakın, ücretsiz bir tahmin

OOB skoru büyük veri setlerinde CV'nin hızlı bir alternatifidir.

Uygulama OOB ve test

RandomForestClassifier(n_estimators=200, oob_score=True, random_state=0) eğit. oob_score_ ve test doğruluğunu round(..., 3) ile aynı satırda yazdır. Ardından bir bootstrap örnekleminin özgün örneklerin kaçta kaçını içerdiğini np.unique(rng.integers(0, n, n)).size / n ile hesaplayıp round(..., 2) ile yazdır (n = 10000).

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

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.25, random_state=0, stratify=y)

rng = np.random.default_rng(0)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

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.25, random_state=0, stratify=y)

rng = np.random.default_rng(0)

rf = RandomForestClassifier(n_estimators=200, oob_score=True, random_state=0).fit(X_train, y_train)
print(round(rf.oob_score_, 3), round(rf.score(X_test, y_test), 3))
n = 10000
print(round(np.unique(rng.integers(0, n, n)).size / n, 2))

Beklenen çıktı

0.965 0.944
0.64

Soru ve cevaplar

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

1 Bir bootstrap örnekleminde özgün örneklerin yaklaşık yüzde kaçı yer alır?

  • %63 Doğru cevap
  • %100
  • %50
  • %37

Açıklama: Bir örneğin hiç seçilmeme olasılığı (1-1/n)ⁿ ≈ e⁻¹ ≈ 0.37'dir; kalan %63 en az bir kez seçilir.

2 Torba dışı skoru hesaplat.

Soru
rf = RandomForestClassifier(n_estimators=200, ____=True)
Cevap
rf = RandomForestClassifier(n_estimators=200, oob_score=True)

Açıklama: oob_score=True eğitim sonrası oob_score_ özniteliğini doldurur.

3 Kavramları eşleştir.

Kavram Anlamı
bagging Bootstrap + ortalama
random forest Bagging + rastgele özellik
OOB Görülmeyen örnekler
oob_score_ Ücretsiz doğrulama

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