Pemilihan Ciri Rawak: Helah Random Forest
Pelajar akan mengkonfigurasi max_features dalam RandomForestClassifier, memerhatikan cara pensampelan subset ciri mengurangkan korelasi antara pepohon, dan melihat ketepatan ujian meningkat.
Pemilihan Ciri Rawak: Helah Random Forest ialah pelajaran Machine Learning Academy percuma di CoddyKit. Ini ialah pelajaran 2 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.
Daripada Bagging kepada Random Forest
Ensembel bagging biasa melatih setiap pepohon menggunakan sampel bootstrap yang berbeza, tetapi semua pepohon masih boleh menggunakan setiap ciri ketika memilih pemisahan. Ini bermakna ciri yang paling berkuasa meramal akan mendominasi setiap pepohon, lalu menjadikan pepohon-pepohon itu sangat berkorelasi. Apabila model yang berkorelasi dipuratakan, pengurangan varians adalah terhad. Random Forest menambahkan satu helah: pada setiap pemisahan, hanya subset ciri yang dipilih secara rawak dipertimbangkan. Hal ini menyahkorelasi pepohon dan meningkatkan generalisasi ensembel dengan ketara.
Parameter max_features
Dalam RandomForestClassifier, parameter max_features mengawal bilangan ciri yang menjadi calon pada setiap pemisahan. Pilihan biasa ialah 'sqrt' (punca kuasa dua jumlah ciri, lalai untuk pengelasan), 'log2', atau integer/nombor perpuluhan. Untuk regresi (RandomForestRegressor), nilai lalai ialah 1.0 (semua ciri), manakala 'sqrt' atau 0.33 ialah pilihan alternatif yang popular. Nilai yang lebih kecil menghasilkan pepohon yang lebih pelbagai, tetapi setiap pepohon secara individu menjadi sedikit lebih lemah.
from sklearn.ensemble import RandomForestClassifier
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 mf in ['sqrt', 'log2', 0.5, 1.0]:
rf = RandomForestClassifier(n_estimators=100, max_features=mf, random_state=42)
score = cross_val_score(rf, X, y, cv=5).mean()
print(f'max_features={str(mf):6s}: CV accuracy={score:.4f}')Mengapa Pensampelan Kecil Ciri Menyahkorelasi Pepohon
Pertimbangkan set data dengan satu ciri dominan yang meramal label jauh lebih baik daripada ciri-ciri lain. Tanpa pensampelan kecil ciri, setiap pepohon dalam ensembel akan membuat pemisahan pada ciri tersebut di akar, lalu menghasilkan pepohon yang hampir serupa. Memuratakan ramalan yang serupa menghasilkan ramalan yang sama — tiada pengurangan varians. Apabila hanya sqrt(p) ciri menjadi calon pada setiap nod, ciri dominan itu tidak tersedia dalam banyak pemisahan. Hal ini memaksa pepohon mencari corak ramalan alternatif dan menjadi benar-benar pelbagai.
Melatih RandomForestClassifier
Menggunakan RandomForestClassifier daripada scikit-learn adalah mudah. Anda menentukan bilangan pepohon dengan n_estimators, mengawal kerumitan pepohon dengan max_depth, dan mendayakan penilaian OOB dengan oob_score=True. Model melatih semua pepohon secara selari apabila n_jobs=-1. Selepas dipasang, feature_importances_ memberikan ukuran berperingkat tentang ciri input yang mendorong ramalan merentas semua pepohon.
from sklearn.ensemble import RandomForestClassifier
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)
rf = RandomForestClassifier(
n_estimators=200,
max_features='sqrt',
oob_score=True,
n_jobs=-1,
random_state=42
)
rf.fit(X_train, y_train)
print('OOB score:', rf.oob_score_)
print('Test accuracy:', rf.score(X_test, y_test))Kepentingan Ciri daripada Random Forest
Random Forest mengira kepentingan ciri sebagai purata pengurangan ketulenan (Gini atau entropi) yang disebabkan oleh pemisahan berdasarkan ciri tersebut, dengan pemberat berdasarkan bilangan sampel yang melalui setiap nod, kemudian dipuratakan merentas semua pepohon. Ini memberikan kedudukan global kuasa ramalan dengan pantas. Jumlah semua kepentingan ialah 1 dan nilainya boleh dicapai melalui rf.feature_importances_. Namun begitu, ukuran ini boleh berat sebelah terhadap ciri yang mempunyai banyak nilai unik. Oleh itu, anggaplah ia sebagai heuristik yang berguna dan bukannya kebenaran mutlak.
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X, y = data.data, data.target
feature_names = data.feature_names
rf = RandomForestClassifier(n_estimators=200, random_state=42)
rf.fit(X, y)
importances = pd.Series(rf.feature_importances_, index=feature_names)
print(importances.sort_values(ascending=False).head(5))Membandingkan Random Forest dengan Pepohon Tunggal
Satu pepohon keputusan yang dilatih menggunakan keseluruhan set data sangat sensitif terhadap hingar dalam data latihan — perubahan pada beberapa contoh boleh mengubah struktur pepohon dengan ketara. Random forest, dengan memuratakan ratusan pepohon sensitif sedemikian, menghasilkan permukaan ramalan yang jauh lebih lancar dan teguh. Perbandingan ini merupakan salah satu demonstrasi paling jelas tentang bagaimana kepelbagaian ensembel membawa kepada peningkatan generalisasi.
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
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)
single = DecisionTreeClassifier(random_state=42)
forest = RandomForestClassifier(n_estimators=200, random_state=42)
print('Single tree CV:', np.round(cross_val_score(single, X, y, cv=5), 4))
print('Random forest CV:', np.round(cross_val_score(forest, X, y, cv=5), 4))Mengawal Kedalaman Pepohon dalam Random Forest
Setiap pepohon dalam Random Forest biasanya dibiarkan tumbuh dalam (bias rendah, varians tinggi). Bagging kemudiannya membetulkan varians tersebut. Namun, untuk set data yang sangat besar, anda mungkin mengehadkan max_depth atau min_samples_leaf bagi mengurangkan ingatan dan masa latihan. Menetapkan max_depth=None (nilai lalai) membolehkan pepohon tumbuh sehingga semua daun menjadi tulen. Random forest yang cetek berkelakuan lebih seperti ensembel boosting: pembelajar asas ber varians rendah yang sukar menangkap sempadan kompleks. Titik optimum bergantung pada tahap hingar set data anda.
Random Forest untuk Regresi
RandomForestRegressor mengikut algoritma yang sama tetapi memuratakan nilai berangka yang diramal oleh setiap pepohon, bukannya mengundi label kelas. Nilai lalai max_features untuk regresi dalam scikit-learn moden ialah 1.0, tetapi menggunakan 'sqrt' atau suatu pecahan sering membantu. Random forest regresi berfungsi dengan baik pada data berbentuk jadual yang mempunyai interaksi tak linear dan kerap digunakan untuk meramal harga rumah, meramalkan penggunaan tenaga, serta masalah lain yang mempunyai sasaran berterusan.
from sklearn.ensemble import RandomForestRegressor
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)
rfr = RandomForestRegressor(n_estimators=100, max_features='sqrt', n_jobs=-1, random_state=42)
rmse = np.sqrt(-cross_val_score(rfr, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print(f'Random Forest Regression RMSE: {rmse:.4f}')Varians Kepentingan Ciri
Oleh sebab setiap pepohon melihat sampel bootstrap dan subset ciri yang berbeza, kepentingan ciri yang dikira daripada larian atau random forest yang berbeza boleh berubah-ubah. Untuk anggaran kepentingan yang lebih boleh dipercayai, gunakan kepentingan permutasi (sklearn.inspection.permutation_importance), yang mengukur sejauh mana ketepatan model menurun apabila nilai sesuatu ciri diacak secara rawak. Kepentingan permutasi berfungsi untuk mana-mana model kotak hitam dan tidak mengalami bias terhadap ciri yang mempunyai banyak nilai unik seperti kepentingan berasaskan ketulenan.
from sklearn.inspection import permutation_importance
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import pandas as pd
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)
rf = RandomForestClassifier(n_estimators=100, random_state=42).fit(X_train, y_train)
result = permutation_importance(rf, X_test, y_test, n_repeats=10, random_state=42)
print(pd.Series(result.importances_mean, index=load_breast_cancer().feature_names).sort_values(ascending=False).head(5))Penalaan Hiperparameter untuk Random Forest
Hiperparameter yang paling penting dalam Random Forest ialah n_estimators (lebih banyak biasanya lebih baik sehingga prestasi mendatar), max_features (mengawal penyahkorelasi), max_depth dan min_samples_leaf (mengawal pertukaran bias-varians bagi setiap pepohon). Carian grid terhadap max_features dan min_samples_leaf selalunya mencukupi kerana n_estimators boleh ditetapkan tinggi dan max_depth=None ialah nilai lalai yang baik. Gunakan skor OOB untuk penalaan anggaran yang pantas sebelum menjalankan pengesahan silang penuh.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_breast_cancer
X, y = load_breast_cancer(return_X_y=True)
param_grid = {'max_features': ['sqrt', 'log2', 0.5], 'min_samples_leaf': [1, 3, 5]}
grid = GridSearchCV(RandomForestClassifier(n_estimators=100, random_state=42), param_grid, cv=5)
grid.fit(X, y)
print('Best params:', grid.best_params_)
print('Best CV score:', round(grid.best_score_, 4))Batasan Random Forest
Random Forest berkuasa tetapi mempunyai beberapa batasan yang ketara. Ia menggunakan banyak ingatan kerana setiap pepohon perlu disimpan. Pembuatan ramalan adalah perlahan pada random forest yang sangat besar kerana setiap ramalan memerlukan semua pepohon dilalui. Ia juga bukan pilihan terbaik untuk data berbentuk jadual yang berstruktur dan mempunyai banyak ciri tidak relevan, kerana boosting kecerunan sering memberikan hasil yang lebih baik. Akhir sekali, Random Forest tidak mempunyai mekanisme semula jadi untuk menangkap struktur berjujukan atau spatial — bagi imej atau teks, kaedah pembelajaran mendalam mengatasinya dengan ketara.
Semakan Pantas
Uji pemahaman anda tentang konsep pemilihan ciri Random Forest daripada pelajaran ini.
Rumusan Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa: Random Forest menambahkan pensampelan kecil ciri kepada bagging untuk menyahkorelasi pepohon, max_features mengawal bilangan ciri calon pada setiap pemisahan, dan kepentingan ciri menunjukkan input yang mendorong ramalan merentas random forest. Seterusnya, kita akan meneroka ralat di luar beg sebagai mekanisme pengesahan terbina dalam yang percuma.
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 “Pemilihan Ciri Rawak: Helah Random Forest” percuma?
Ya — teks penuh “Pemilihan Ciri Rawak: Helah Random Forest” 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 “Pemilihan Ciri Rawak: Helah Random Forest”?
Pelajar akan mengkonfigurasi max_features dalam RandomForestClassifier, memerhatikan cara pensampelan subset ciri mengurangkan korelasi antara pepohon, dan melihat ketepatan ujian meningkat. 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 2 daripada 4.
Berapa lamakah pelajaran “Pemilihan Ciri Rawak: Helah Random Forest” 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