CodeBlanks Logo Icon CodeBlanks

Ensemble nedir?

Ensemble, birden çok modelin tahminlerini birleştirerek daha iyi sonuç alır.

Topluluk öğrenmesi

Topluluk (ensemble), birden çok modelin tahminlerini birleştirerek tek bir modelden daha iyi sonuç almaktır. Random forest ve boosting birer topluluktur; bu grupta farklı türden modelleri birleştirmeyi göreceğiz.

  • Voting: tahminlerin oylanması ya da olasılıkların ortalaması.
  • Bagging: aynı modelin farklı örneklemlerle kopyaları.
  • Boosting: hataları sırayla düzelten modeller.
  • Stacking: tahminleri bir üst modelle birleştirme.

Hata ilişkisi

Modellerin ne kadar farklı olduğunu, hatalarının ne kadar örtüştüğüyle ölçebiliriz. Farklı ailelerden modeller (doğrusal, komşuluk, ağaç) genellikle farklı yerlerde yanılır:

h1 = m1.predict(X_test) != y_test
h2 = m2.predict(X_test) != y_test
print((h1 & h2).sum(), h1.sum(), h2.sum())   # ortak hata az ise iyi

İki modelin hataları hiç örtüşmüyorsa, üçüncü bir modelle oylama hataların çoğunu düzeltebilir.

Uygulama Hata örtüşmesi

Üç modeli eğit. Her birinin test hata sayısını, ardından üçünün birlikte yanıldığı örnek 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.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))]

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

hata = []
for ad, m in modeller:
    hata.append(m.fit(X_train, y_train).predict(X_test) != y_test)
print([int(h.sum()) for h in hata])
print(int((hata[0] & hata[1] & hata[2]).sum()))

Beklenen çıktı

[6, 8, 8]
3

Soru ve cevaplar

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

1 Bir topluluğun tek modelden iyi olması için en önemli koşul nedir?

  • Modellerin farklı hatalar yapması Doğru cevap
  • Modellerin aynı olması
  • Çok sayıda model olması
  • Hepsinin kötü olması

Açıklama: Çeşitlilik olmadan birleştirme bilgi eklemez.

2 İki modelin ortak hatalarını say.

Soru
print((h1 ____ h2).sum())
Cevap
print((h1 & h2).sum())

Açıklama: & eleman bazlı "ve"dir: ikisi birden yanılmış.

3 Yöntemleri eşleştir.

Kavram Anlamı
voting Oylama ya da olasılık ortalaması
bagging Örneklem kopyaları
boosting Sıralı düzeltme
stacking Üst model

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