Ensemble nedir?
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 97/112
- 5 dk
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
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
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.
print((h1 ____ h2).sum())
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 |