Makine Öğrenmesi
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.
Örnek çözümü göster
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)
Kendini test et
-
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
Cevabı göster
Sert: 0, yumuşak: 1 — Sert: iki oy 0'a (0.4, 0.45 < 0.5). Yumuşak: ortalama 0.583 > 0.5, sınıf 1.
-
Olasılık ortalamasıyla oyla.
oy = VotingClassifier(modeller, voting=____)
Cevabı göster
oy = VotingClassifier(modeller, voting="soft")
-
Ayarları eşleştir.
- voting="hard"
- Çoğunluk sınıfı
- voting="soft"
- Olasılık ortalaması
- weights
- Model ağırlıkları
- estimators
- (ad, model) listesi
Sıradaki ders: Bagging