CodeBlanks Logo Icon CodeBlanks

Voting

Voting ensemble, modellerin çoğunluk oyuyla karar vermesini sağlar.

VotingClassifier

VotingClassifier farklı modelleri tek bir estimator yapar. İki biçimi vardır:

  • voting="hard": her model bir sınıf oyu verir, çoğunluk kazanır.
  • voting="soft": olasılıkların ortalaması alınır; modellerin ne kadar emin olduğu hesaba katılır, genellikle daha iyidir.
from sklearn.ensemble import VotingClassifier
oy = VotingClassifier(modeller, voting="soft").fit(X_train, y_train)
print(oy.score(X_test, y_test))

Yumuşak oylama, tüm modellerin predict_proba sunmasını ister.

Ağırlıklı oylama

weights parametresi daha güvenilir modellere daha çok söz hakkı verir. Ağırlıklar da birer hiperparametredir ve CV ile seçilmelidir:

oy = VotingClassifier(modeller, voting="soft", weights=[2, 1, 1])
# lr'nin olasılığı iki kat sayılır

Topluluktaki modellerden biri belirgin biçimde kötüyse onu çıkarmak, düşük ağırlık vermekten genellikle daha iyidir.

Uygulama Sert ve yumuşak

Üç modelle VotingClassifier'ı önce voting="hard", sonra voting="soft" ile eğit. İki test doğruluğunu 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 VotingClassifier

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

sonuc = []
for v in ["hard", "soft"]:
    oy = VotingClassifier(modeller, voting=v).fit(X_train, y_train)
    sonuc.append(round(oy.score(X_test, y_test), 3))
print(*sonuc)

Beklenen çıktı

0.965 0.971

Soru ve cevaplar

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

1 Olasılıklar [0.9, 0.4, 0.45] (sınıf 1) ise sert ve yumuşak oylama ne karar verir?

  • İkisi de 1
  • İkisi de 0
  • Sert: 1, yumuşak: 0
  • Sert: 0, yumuşak: 1 Doğru cevap

Açıklama: Sert: iki oy 0'a (0.4, 0.45 < 0.5). Yumuşak: ortalama 0.583 > 0.5, sınıf 1.

2 Olasılık ortalamasıyla oyla.

Soru
oy = VotingClassifier(modeller, voting=____)
Cevap
oy = VotingClassifier(modeller, voting="soft")

Açıklama: "soft" predict_proba ortalamasını kullanır.

3 Ayarları eşleştir.

Kavram Anlamı
voting="hard" Çoğunluk sınıfı
voting="soft" Olasılık ortalaması
weights Model ağırlıkları
estimators (ad, model) listesi

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