CodeBlanks Logo Icon CodeBlanks

Ensemble

Ensemble yöntemi, birden çok modelin tahminlerini birleştirir.

Topluluk fikri

Bağımsız hatalar yapan zayıf tahmincilerin çoğunluk oyu, tek bir tahminciden daha isabetlidir. Her biri %60 doğru olan 25 bağımsız sınıflandırıcının çoğunluğu %84 civarında doğrudur:

from scipy.stats import binom
print(1 - binom.cdf(12, 25, 0.6))   # 13 ya da daha fazla doğru oy: ~0.85

Anahtar kelime bağımsız: hepsi aynı hatayı yaparsa oylama hiçbir şey kazandırmaz. Random forest'teki rastgelelik bu bağımsızlığı artırmak içindir.

Sınıflandırma ve regresyonda birleştirme

scikit-learn'ün RandomForestClassifier'ı sert oy yerine ağaçların olasılıklarının ortalamasını alır (yumuşak oylama). RandomForestRegressor ağaç tahminlerinin ortalamasını verir:

import numpy as np
ort = np.mean([t.predict_proba(X_test[:1]) for t in rf.estimators_], axis=0)
print(np.allclose(ort, rf.predict_proba(X_test[:1])))   # True

Ormanın olasılıkları ağaç olasılıklarının tam ortalamasıdır.

Uygulama Orman = ağaç ortalaması

Eğitilmiş ormanın her ağacının ilk test örneği için predict_proba çıktısının ortalamasını hesapla. Bunun rf.predict_proba ile aynı olduğunu np.allclose ile yazdır. Ardından ilk test örneğine sınıf 1 diyen ağaç sayısını yazdır.

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)

rf = RandomForestClassifier(n_estimators=50, random_state=0).fit(X_train, y_train)

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

rf = RandomForestClassifier(n_estimators=50, random_state=0).fit(X_train, y_train)

x = X_test[:1]
ort = np.mean([t.predict_proba(x) for t in rf.estimators_], axis=0)
print(np.allclose(ort, rf.predict_proba(x)))
print(sum(int(t.predict(x)[0] == 1) for t in rf.estimators_))

Beklenen çıktı

True
48

Soru ve cevaplar

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

1 Oylama ne zaman en az kazanç sağlar?

  • Model sayısı çokken
  • Her model %50'den iyiyken
  • Tüm modeller aynı hataları yaptığında Doğru cevap
  • Modeller bağımsızken

Açıklama: İlişkili hatalar oylamayla düzelmez; çeşitlilik gerekir.

2 Ağaç olasılıklarının ortalamasını al.

Soru
ort = np.____([t.predict_proba(x) for t in rf.estimators_], axis=0)
Cevap
ort = np.mean([t.predict_proba(x) for t in rf.estimators_], axis=0)

Açıklama: Orman, ağaçların olasılık ortalamasını kullanır.

3 Birleştirme biçimlerini eşleştir.

Kavram Anlamı
sert oylama Çoğunluk sınıfı
yumuşak oylama Olasılık ortalaması
regresyon ormanı Tahmin ortalaması
bağımsız hatalar Oylamanın gücü

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