Penjelasan Pengagregatan Bootstrap (Bagging)
Pelajar akan melaksanakan pensampelan bootstrap secara manual, melatih pengelas pada setiap sampel, dan memahami sebab pemurataan model yang pelbagai mengurangkan varians.
Penjelasan Pengagregatan Bootstrap (Bagging) ialah pelajaran Machine Learning Academy percuma di CoddyKit. Ini ialah pelajaran 1 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 Pengagregatan Bootstrap?
Pengagregatan Bootstrap, yang lazimnya dipanggil pengagregatan, ialah teknik ensemble yang melatih berbilang model pada subset rawak data latihan yang berbeza dan menggabungkan ramalan mereka. Perkataan bootstrap berasal daripada statistik dan bermaksud pensampelan dengan penggantian daripada data Anda. Dengan mempuratakan atau mengundi merentas banyak model yang pelbagai, pengagregatan mengurangkan varians ramalan akhir dengan ketara tanpa meningkatkan pincang.
Penjelasan Pensampelan dengan Penggantian
Pensampelan dengan penggantian bermaksud setiap sampel bootstrap diambil secara bebas daripada set data penuh — baris yang sama boleh muncul beberapa kali dalam satu sampel, manakala baris lain mungkin tidak disertakan langsung. Untuk set data dengan N contoh, setiap sampel bootstrap juga mengandungi N baris. Secara purata, kira-kira 63.2% contoh unik muncul dalam mana-mana sampel bootstrap tertentu, manakala baki ~37% membentuk set di luar beg yang boleh digunakan untuk pengesahan.
import numpy as np
np.random.seed(42)
data = np.arange(10) # [0, 1, 2, ..., 9]
bootstrap_sample = np.random.choice(data, size=len(data), replace=True)
print('Original:', data)
print('Bootstrap sample:', bootstrap_sample)Mengapa Kepelbagaian Mengurangkan Varians
Andaikan Anda mempunyai n model bebas yang setiap satunya mempunyai varians σ². Jika Anda mempuratakan ramalan mereka, varians purata itu ialah σ²/n — ia mengecil apabila lebih banyak model ditambahkan. Dalam amalan, model yang dilatih pada sampel bootstrap mempunyai korelasi (model-model tersebut berkongsi taburan latihan yang sama), jadi pengurangan itu hanya sebahagian tetapi masih ketara. Wawasan utamanya ialah pempurataan mengurangkan varians tanpa meningkatkan pincang, lalu menghasilkan pengitlakan yang lebih baik.
Melaksanakan Pengagregatan Secara Manual
Anda boleh melaksanakan pengagregatan secara manual dengan melatih senarai penganggar, setiap satunya pada sampel bootstrap yang berbeza, kemudian mempuratakan outputnya. Ini menunjukkan dengan tepat perkara yang dilakukan oleh BaggingClassifier di sebalik tabir. Memahami versi manual memudahkan Anda mendiagnosis masalah dan melanjutkan teknik ini kepada model tersuai.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import numpy as np
X, y = load_iris(return_X_y=True)
n_estimators = 10
models = []
for _ in range(n_estimators):
idx = np.random.choice(len(X), size=len(X), replace=True)
X_boot, y_boot = X[idx], y[idx]
tree = DecisionTreeClassifier()
tree.fit(X_boot, y_boot)
models.append(tree)
# Predict by majority vote
predictions = np.array([m.predict(X) for m in models])
ensemble_pred = [np.bincount(col).argmax() for col in predictions.T]
print('Ensemble accuracy:', np.mean(ensemble_pred == y))BaggingClassifier scikit-learn
scikit-learn menyediakan BaggingClassifier yang membalut mana-mana penganggar asas serta mengautomatikkan pensampelan bootstrap dan pengagregatan. Anda mengawal n_estimators (bilangan model), max_samples (pecahan atau bilangan mutlak sampel latihan bagi setiap model), dan max_features (bilangan ciri yang digunakan). Menetapkan oob_score=True mengira skor pengesahan percuma menggunakan contoh di luar beg bagi setiap penganggar.
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
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.2, random_state=42)
bag = BaggingClassifier(
estimator=DecisionTreeClassifier(),
n_estimators=100,
oob_score=True,
random_state=42
)
bag.fit(X_train, y_train)
print('OOB score:', bag.oob_score_)
print('Test accuracy:', bag.score(X_test, y_test))Pengagregatan untuk Regresi
Pengagregatan tidak terhad kepada pengelasan. BaggingRegressor menggunakan idea yang sama: melatih berbilang penganggar regresi pada sampel bootstrap dan mempuratakan ramalan berangka mereka. Ini amat berguna apabila pelajar asas ialah model varians tinggi seperti pepohon keputusan yang tidak dipangkas. Satu pepohon menghafal hingar; purata banyak pepohon melicinkannya, lalu mengurangkan RMSE ujian keseluruhan dengan ketara.
from sklearn.ensemble import BaggingRegressor
from sklearn.tree import DecisionTreeRegressor
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)
single_tree = DecisionTreeRegressor(random_state=42)
bag_reg = BaggingRegressor(estimator=DecisionTreeRegressor(), n_estimators=100, random_state=42)
single_rmse = np.sqrt(-cross_val_score(single_tree, X, y, scoring='neg_mean_squared_error', cv=3).mean())
bag_rmse = np.sqrt(-cross_val_score(bag_reg, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print(f'Single tree RMSE: {single_rmse:.4f}')
print(f'Bagged tree RMSE: {bag_rmse:.4f}')Pecahan di Luar Beg
Memandangkan kira-kira ~37% contoh latihan tidak disertakan dalam setiap sampel bootstrap, contoh tersebut boleh berfungsi sebagai set pengesahan bagi penganggar masing-masing tanpa pembahagian data tambahan. Skor OOB dikira dengan meramalkan setiap titik latihan menggunakan hanya penganggar yang tidak melihatnya semasa latihan. Ini memberikan anggaran prestasi pengitlakan yang hampir tidak berat sebelah, serupa dengan pengesahan silang tinggalkan-satu-keluar tetapi jauh lebih murah untuk dikira.
Kesan n_estimators terhadap Prestasi
Menambahkan lebih banyak penganggar kepada ensembel bagging hampir sentiasa membantu (atau sekurang-kurangnya tidak menjejaskan) prestasi pada data ujian. Berbeza dengan kedalaman rangkaian neural, tiada penalti terlebih padan apabila lebih banyak pepohon ditambahkan — varians terus berkurang manakala bias kekal sama. Dalam amalan, prestasi mendatar selepas beberapa ratus penganggar. Pertukaran utama ialah masa pengiraan: menggandakan n_estimators menggandakan masa latihan. Sentiasa semak sama ada peningkatan marginal itu berbaloi dengan kos tambahan.
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
for n in [1, 10, 50, 200]:
bag = BaggingClassifier(estimator=DecisionTreeClassifier(), n_estimators=n, random_state=42)
score = cross_val_score(bag, X, y, cv=5).mean()
print(f'n_estimators={n:4d}: CV accuracy={score:.4f}')Bagging berbanding Model Kompleks Tunggal
Satu model kompleks (pepohon yang dalam, polinomial berperingkat tinggi) mencapai bias rendah tetapi varians tinggi — model itu dipadankan dengan baik pada data latihan tetapi berubah-ubah dengan ketara pada data yang belum pernah dilihat. Bagging mengawal varians tersebut dengan mempuratakan banyak model sedemikian. Ramalan gabungan menjadi jauh lebih stabil. Oleh itu, bagging paling berkesan apabila pembelajar asas mempunyai varians tinggi dan bias rendah. Menggunakan bagging pada model ringkas yang sudah terlebih kurang padan (seperti regresi linear) memberikan sedikit manfaat kerana variansnya memang sudah rendah.
Pemprosesan Selari: Bagging Sangat Mudah Diparalelkan
Setiap penganggar dalam ensembel bagging dilatih secara bebas, tanpa kebergantungan data antara satu sama lain. Hal ini menjadikan bagging sangat mudah diparalelkan — semua penganggar boleh dilatih serentak pada berbilang teras CPU. scikit-learn menyediakan ciri ini melalui parameter n_jobs=-1, yang menggunakan semua teras yang tersedia. Ini sangat berbeza daripada kaedah boosting seperti XGBoost, yang setiap modelnya bergantung pada model sebelumnya dan latihannya sememangnya berjujukan.
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
import time
X, y = load_breast_cancer(return_X_y=True)
bag_serial = BaggingClassifier(n_estimators=200, n_jobs=1, random_state=42)
bag_parallel = BaggingClassifier(n_estimators=200, n_jobs=-1, random_state=42)
start = time.time(); bag_serial.fit(X, y); print('Serial:', round(time.time()-start, 2), 's')
start = time.time(); bag_parallel.fit(X, y); print('Parallel:', round(time.time()-start, 2), 's')Batasan dan Situasi Bagging Gagal
Bagging mempunyai beberapa batasan penting. Pertama, ia meningkatkan pengiraan dan ingatan secara linear mengikut bilangan penganggar. Kedua, ia tidak meningkatkan bias — jika model asas anda terlalu ringkas, memproses banyak model ringkas dengan bagging tetap menghasilkan ensembel yang ringkas. Ketiga, bagging menjadikan model lebih sukar ditafsir — anda kehilangan satu pepohon keputusan yang boleh ditunjukkan kepada pihak berkepentingan. Akhir sekali, bagging sahaja tidak menyahkorelasi pepohon jika semua ciri digunakan pada setiap pemisahan. Dalam keadaan inilah Random Forest menambahkan helah tambahan berupa pensampelan kecil ciri secara rawak.
Semakan Pantas
Uji pemahaman anda tentang konsep Pengagregatan Bootstrap daripada pelajaran ini.
Rumusan Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa: pengagregatan bootstrap melatih berbilang model menggunakan pensampelan semula rawak dengan penggantian, pempurataan ramalan mengurangkan varians tanpa meningkatkan bias, dan contoh di luar beg menyediakan pengesahan percuma untuk setiap penganggar. Seterusnya, kita akan meneroka helah Random Forest untuk mengambil sampel kecil ciri bagi menyahkorelasi pepohon dengan lebih lanjut.
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 “Penjelasan Pengagregatan Bootstrap (Bagging)” percuma?
Ya — teks penuh “Penjelasan Pengagregatan Bootstrap (Bagging)” 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 “Penjelasan Pengagregatan Bootstrap (Bagging)”?
Pelajar akan melaksanakan pensampelan bootstrap secara manual, melatih pengelas pada setiap sampel, dan memahami sebab pemurataan model yang pelbagai mengurangkan varians. 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 1 daripada 4.
Berapa lamakah pelajaran “Penjelasan Pengagregatan Bootstrap (Bagging)” 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