Ensemble Undian: Undian Tegas berbanding Undian Lembut
Pelajar akan menggabungkan KNN, regresi logistik dan pepohon keputusan ke dalam VotingClassifier, kemudian membandingkan majoriti undian tegas dengan pemurataan kebarangkalian undian lembut.
Ensemble Undian: Undian Tegas berbanding Undian Lembut ialah pelajaran Machine Learning Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Machine Learning Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.
Apakah Ensembel Pengundian?
Ensembel Pengundian menggabungkan ramalan daripada beberapa jenis model yang berbeza — seperti regresi logistik, pengelas jiran terdekat k, dan pepohon keputusan — untuk menghasilkan satu ramalan akhir. Berbeza daripada penggabungan yang menggunakan banyak salinan jenis model yang sama, ensembel pengundian memanfaatkan kepelbagaian dalam seni bina model. Oleh sebab model yang berbeza menghasilkan jenis ralat yang berbeza, gabungannya boleh mengatasi mana-mana ahli secara individu, terutamanya pada set data yang tiada satu algoritma pun benar-benar unggul.
Pengundian Tegas: Majoriti Menentukan Keputusan
Dalam pengundian tegas, setiap model mengundi satu label kelas dan kelas yang menerima undi terbanyak menang. Jika tiga model meramalkan [cat, cat, dog], ensembel meramalkan cat. Pengundian tegas adalah mudah dan mudah ditafsirkan, tetapi menganggap semua model sama boleh dipercayai serta mengabaikan tahap keyakinan. Model yang hanya 51% yakin mengundi dengan cara yang sama seperti model yang 99% yakin, dan ini boleh membawa kepada keputusan yang tidak optimum apabila keyakinan model sangat berbeza.
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
X, y = load_iris(return_X_y=True)
voter = VotingClassifier(
estimators=[
('lr', LogisticRegression(max_iter=1000)),
('knn', KNeighborsClassifier()),
('dt', DecisionTreeClassifier())
],
voting='hard'
)
scores = cross_val_score(voter, X, y, cv=5)
print('Hard Voting CV:', scores.mean().round(4))Pengundian Lembut: Pemurataan Kebarangkalian
Dalam pengundian lembut, setiap model mengeluarkan kebarangkalian kelas, bukannya label tegas. Ensembel memuratakan kebarangkalian merentas model dan memilih kelas dengan kebarangkalian purata tertinggi. Sebagai contoh, jika tiga model memberikan kebarangkalian [0.9, 0.1], [0.7, 0.3] dan [0.6, 0.4] kepada dua kelas, puratanya ialah [0.73, 0.27] dan kelas 0 menang. Pengundian lembut biasanya mengatasi pengundian tegas kerana kaedah ini menggunakan maklumat yang lebih kaya tentang keyakinan setiap model.
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
X, y = load_iris(return_X_y=True)
voter = VotingClassifier(
estimators=[
('lr', LogisticRegression(max_iter=1000)),
('knn', KNeighborsClassifier()),
('svc', SVC(probability=True)) # probability=True required for soft vote
],
voting='soft'
)
scores = cross_val_score(voter, X, y, cv=5)
print('Soft Voting CV:', scores.mean().round(4))Keperluan: Semua Model Mesti Menyokong predict_proba
Pengundian lembut memerlukan setiap model dalam ensembel menyediakan anggaran kebarangkalian melalui predict_proba(). Kebanyakan pengelas scikit-learn menyokongnya secara asli, termasuk regresi logistik, hutan rawak, KNN dan Bayes naif. Walau bagaimanapun, SVC tidak mengeluarkan kebarangkalian secara lalai — anda mesti menetapkan probability=True dalam pembina, yang menambahkan penskalaan Platt, iaitu langkah penentukuran, serta meningkatkan masa latihan. Jika mana-mana model tidak dapat menghasilkan kebarangkalian, anda mesti beralih kepada pengundian tegas.
Memberi Pemberat kepada Model Individu
Pengundian tegas dan pengundian lembut menyokong parameter weights, yang membolehkan anda memberikan pengaruh lebih besar kepada model yang lebih tepat. Sebagai contoh, jika regresi logistik mempunyai ketepatan 92% dan KNN mempunyai ketepatan 85%, anda mungkin memberikan pemberat [2, 1]. Dalam pengundian tegas, setiap undi diulang mengikut pemberatnya. Dalam pengundian lembut, vektor kebarangkalian setiap model didarab dengan pemberatnya sebelum dipuratakan. Memilih pemberat berdasarkan ketepatan pengesahan silang ialah pendekatan yang mudah dan berkesan.
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
X, y = load_breast_cancer(return_X_y=True)
voter = VotingClassifier(
estimators=[
('lr', LogisticRegression(max_iter=1000)),
('knn', KNeighborsClassifier(n_neighbors=5)),
('dt', DecisionTreeClassifier(max_depth=5))
],
voting='soft',
weights=[2, 1, 1] # Trust LR twice as much
)
print('Weighted soft vote CV:', cross_val_score(voter, X, y, cv=5).mean().round(4))Membandingkan Model Tegas, Lembut dan Individu
Perbandingan langsung antara model individu, pengundian tegas dan pengundian lembut pada set data yang sama menunjukkan kesan ensembel dengan jelas. Dalam kebanyakan kes, pengundian lembut mengatasi pengundian tegas, dan kedua-duanya mengatasi model individu yang paling lemah. Walau bagaimanapun, ensembel tidak semestinya mengatasi model tunggal yang paling kuat — hal ini bergantung pada sejauh mana ralat model berkorelasi. Jika semua model gagal pada contoh yang sama, penggabungan model tidak memberikan manfaat.
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
X, y = load_breast_cancer(return_X_y=True)
estimators = [('lr', LogisticRegression(max_iter=1000)), ('knn', KNeighborsClassifier()), ('dt', DecisionTreeClassifier())]
for name, est in estimators:
print(f'{name}: {cross_val_score(est, X, y, cv=5).mean():.4f}')
for v in ['hard', 'soft']:
vc = VotingClassifier(estimators=estimators, voting=v)
print(f'Voting ({v}): {cross_val_score(vc, X, y, cv=5).mean():.4f}')Memilih Model untuk Kepelbagaian
Kunci kepada ensembel pengundian yang berkuasa ialah kepelbagaian model. Menggabungkan tiga regresi logistik dengan benih yang berbeza hampir tidak memberikan nilai tambahan — semuanya akan melakukan kesilapan yang sama. Ensembel yang paling berkesan memadankan model dengan kecenderungan induktif yang berbeza: model linear, iaitu regresi logistik; model berasaskan contoh, iaitu KNN; model berasaskan pepohon, iaitu hutan rawak; dan secara pilihan, model berasaskan kernel, iaitu SVM. Setiap model melihat data melalui sudut yang berbeza dan menghasilkan ralat tersendiri yang saling mengimbangi melalui pemurataan.
VotingRegressor untuk Sasaran Berterusan
VotingRegressor menggunakan idea yang sama untuk regresi: memuratakan ramalan berangka daripada pelbagai penganggar regresi. Tiada konsep pengundian tegas berbanding lembut untuk regresi — output sentiasa berupa purata berwajaran atau tanpa pemberat bagi ramalan individu. Menggabungkan regresi Ridge, iaitu model linear, Random Forest, iaitu ensembel pepohon, dan SVR, iaitu kaedah kernel, sering mengatasi mana-mana model tunggal pada set data jadual yang pelbagai.
from sklearn.ensemble import VotingRegressor, RandomForestRegressor
from sklearn.linear_model import Ridge
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = fetch_california_housing(return_X_y=True)
vr = VotingRegressor(estimators=[
('ridge', make_pipeline(StandardScaler(), Ridge())),
('rf', RandomForestRegressor(n_estimators=50, random_state=42)),
('svr', make_pipeline(StandardScaler(), SVR()))
])
rmse = np.sqrt(-cross_val_score(vr, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print('VotingRegressor RMSE:', round(rmse, 4))Ensembel Pengundian dalam Pengeluaran
Ensembel pengundian mudah digunakan kerana semua model ahli boleh disiri bersama pembalut VotingClassifier menggunakan joblib.dump(). Inferens memerlukan setiap model ahli dijalankan, jadi kependaman ramalan meningkat secara linear mengikut bilangan ahli. Bagi aplikasi yang sensitif terhadap kependaman, hadkan ensembel kepada 2–3 model yang kuat dan pantas, bukannya banyak model yang perlahan. Sentiasa ukur masa inferens sebagai sebahagian daripada penilaian penggunaan anda.
Apabila Ensembel Pengundian Tidak Membantu
Ensembel pengundian mengecewakan apabila: (1) semua model ahli berkongsi titik buta yang sama dan menghasilkan ralat berkorelasi; (2) satu model jauh lebih unggul daripada model lain lalu model yang lebih lemah menurunkan prestasi ensembel; (3) tugas mempunyai hingar yang sangat rendah sehingga satu model yang ditala dengan baik sudah mencapai prestasi hampir sempurna; atau (4) set data terlalu kecil dan kapasiti model tambahan hanya menyebabkan terlebih suai. Diagnosis boleh dibuat dengan membandingkan corak ralat model individu pada set pengesahan — jika ralat sangat berkorelasi, cuba gantikan sesetengah model dengan seni bina yang lebih pelbagai.
Penggabungan Bertindan berbanding Pengundian
Pengundian menggunakan pengagregatan tetap yang dipilih secara manual, sama ada undi majoriti atau purata. Penggabungan bertindan, atau pengitlakan bertindan, melangkah lebih jauh: pelajar meta dilatih untuk menggabungkan output model asas secara optimum. Ramalan luar lipatan bagi model asas menjadi ciri input untuk pelajar meta. Ini menambahkan fleksibiliti — pelajar meta boleh mempelajari bahawa model A boleh dipercayai pada contoh mudah, manakala model B lebih baik pada contoh sukar. Penggabungan bertindan biasanya mengatasi pengundian, tetapi memerlukan pelaksanaan yang lebih teliti untuk mengelakkan kebocoran data.
Semakan Pantas
Uji pemahaman anda tentang konsep Ensembel Pengundian daripada pelajaran ini.
Rumusan Pelajaran
Dalam pelajaran ini anda telah mempelajari bahawa: Ensembel Pengundian menggabungkan pelbagai jenis model untuk mengurangkan ralat berkorelasi, pengundian tegas menggunakan label majoriti manakala pengundian lembut memuratakan anggaran kebarangkalian, dan kepelbagaian model ialah bahan utama bagi ensembel pengundian yang berkesan. Seterusnya, kita akan meneroka Mesin Vektor Sokongan dan pengelas margin maksimum.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Ensemble Undian: Undian Tegas berbanding Undian Lembut” percuma?
Ya — teks penuh “Ensemble Undian: Undian Tegas berbanding Undian Lembut” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Machine Learning Academy, tingkat taraf kepada CoddyKit PRO. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Ensemble Undian: Undian Tegas berbanding Undian Lembut”?
Pelajar akan menggabungkan KNN, regresi logistik dan pepohon keputusan ke dalam VotingClassifier, kemudian membandingkan majoriti undian tegas dengan pemurataan kebarangkalian undian lembut. Anda berlatih Machine Learning Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Machine Learning Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Machine Learning Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Ensemble Undian: Undian Tegas berbanding Undian Lembut” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Machine Learning Academy ini?
Ya. Setiap pelajaran Machine Learning Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Penjelasan Pengagregatan Bootstrap (Bagging)
- Pemilihan Ciri Rawak: Helah Random Forest
- Ralat Out-of-Bag: Pengesahan Percuma dalam Hutan
- Ensemble Undian: Undian Tegas berbanding Undian Lembut