Voting
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 98/112
- 5 dk
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ırTopluluktaki 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
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
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.
oy = VotingClassifier(modeller, voting=____)
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 |