Penghapusan Ciri Berulang dengan Pengesahan Silang
Pelajar akan menggunakan RFECV supaya model sendiri menyingkirkan ciri yang paling kurang berguna, sambil mengekalkan gelung pengesahan silang untuk mencegah kebocoran.
Penghapusan Ciri Berulang dengan Pengesahan Silang 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.
Batasan Pemilihan Univariat
Kaedah pemilihan ciri univariat seperti SelectKBest menilai setiap ciri secara berasingan. Kaedah ini terlepas beberapa keadaan penting: ciri yang tidak berguna secara bersendirian tetapi sangat bernilai apabila digabungkan dengan ciri lain, atau dua ciri yang kukuh secara individu tetapi sangat berlebihan apabila digabungkan. Recursive Feature Elimination (RFE) mengatasi masalah ini dengan menggunakan model itu sendiri untuk menilai kepentingan ciri: model dilatih dengan semua ciri, ciri yang paling tidak penting dibuang, model dilatih semula, ciri seterusnya dibuang, dan proses ini diulang. Kaedah ini menangkap cara ciri berinteraksi dalam model.
Cara RFE Berfungsi
RFE berfungsi seperti berikut: (1) latih model menggunakan semua ciri; (2) susun ciri berdasarkan kepentingan (magnitud pekali untuk model linear, feature_importances_ untuk pepohon); (3) buang ciri yang berada pada kedudukan paling rendah; (4) ulangi sehingga bilangan ciri yang dikehendaki tinggal. Pada setiap langkah, susunan dikira semula menggunakan model yang dilatih dengan ciri yang masih tinggal. Ini bermakna ciri yang kelihatan lemah apabila terdapat ciri pesaing yang berlebihan mungkin menjadi penting selepas pesaing tersebut dibuang.
from sklearn.feature_selection import RFE
from sklearn.svm import SVR
from sklearn.datasets import load_diabetes
import numpy as np
X, y = load_diabetes(return_X_y=True)
feature_names = load_diabetes().feature_names
# Select top 5 features
rfe = RFE(estimator=SVR(kernel='linear'), n_features_to_select=5)
rfe.fit(X, y)
print('Selected features:', [feature_names[i] for i in range(len(feature_names)) if rfe.support_[i]])
print('Feature rankings:', rfe.ranking_) # 1 = selectedRFECV: Memilih Bilangan Ciri Secara Automatik
RFECV (Recursive Feature Elimination with Cross-Validation) memperluas RFE dengan turut menentukan bilangan ciri optimum untuk dikekalkan. Ia melaksanakan RFE sambil menggunakan pengesahan silang pada setiap langkah untuk memberikan skor kepada subset, kemudian memilih bilangan ciri yang memaksimumkan skor CV. Ini menghapuskan keperluan untuk menetapkan n_features_to_select secara manual dan mencegah kebocoran semasa pemilihan kerana gelung CV mengasingkan lipatan ujian.
from sklearn.feature_selection import RFECV
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
X, y = load_breast_cancer(return_X_y=True)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # scale first, then RFECV
rfecv = RFECV(
estimator=LogisticRegression(max_iter=1000),
step=1,
cv=5,
scoring='accuracy',
n_jobs=-1
)
rfecv.fit(X_scaled, y)
print('Optimal number of features:', rfecv.n_features_)
print('CV scores per feature count:', rfecv.cv_results_['mean_test_score'].round(4))RFECV dan Topeng Sokongan
Selepas latihan, rfecv.support_ ialah tatasusunan boolean yang menunjukkan ciri asal yang dipilih. rfecv.ranking_ memberikan kedudukan penyingkiran (1 = dipilih). Anda boleh menggunakan rfecv.transform(X) untuk menerapkan pemilihan pada data baharu, dengan mengekalkan hanya lajur yang terselamat daripada penyingkiran. Ini menjadikan RFECV pengganti terus untuk SelectKBest di dalam Pipelines.
from sklearn.feature_selection import RFECV
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
import numpy as np
data = load_breast_cancer()
X, y = data.data, data.target
feature_names = data.feature_names
X_sc = StandardScaler().fit_transform(X)
rfecv = RFECV(LogisticRegression(max_iter=1000), cv=5, scoring='accuracy', n_jobs=-1)
rfecv.fit(X_sc, y)
selected = [feature_names[i] for i in range(len(feature_names)) if rfecv.support_[i]]
print(f'Selected {len(selected)} features:', selected)Menggunakan RFE dengan Model Berasaskan Pepohon
RFECV berfungsi dengan mana-mana model yang mendedahkan feature_importances_ (model pepohon) atau coef_ (model linear). Menggunakan RandomForestClassifier sebagai penganggar menjadikan RFECV tidak bergantung pada model dengan cara yang berkuasa: penilaian hutan itu sendiri terhadap kepentingan ciri membimbing penyingkiran. Ini amat berguna apabila model akhir ialah ensembel pepohon dan anda mahu pemilihan ciri selaras dengan susunan dalaman model akhir.
from sklearn.feature_selection import RFECV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
X, y = load_breast_cancer(return_X_y=True)
rfecv = RFECV(
estimator=RandomForestClassifier(n_estimators=50, random_state=42),
step=1,
cv=5,
scoring='accuracy',
n_jobs=-1
)
rfecv.fit(X, y) # RF does not require scaling
print('Optimal features:', rfecv.n_features_)
print('Best CV score:', round(max(rfecv.cv_results_['mean_test_score']), 4))RFECV di Dalam Pipeline: Mencegah Kebocoran
Risiko kebocoran yang halus dengan RFECV: apabila anda menggunakannya bersama model linear yang memerlukan penskalaan, anda mesti membuat penskalaan di dalam gelung pengesahan silang. Jika anda membuat penskalaan pada keseluruhan set data sebelum RFECV, penskala akan melihat lipatan ujian CV semasa latihan, lalu membocorkan statistik. Pendekatan yang betul adalah dengan meletakkan StandardScaler sebelum penganggar dalam penganggar dalaman RFECV — tetapi RFECV tidak menyokong penganggar Pipeline secara langsung sebagai penganggar asasnya. Sebagai alternatif, gunakan langkah penskalaan sebelum RFECV pada data latihan sahaja, yang dilaksanakan dalam Pipeline luaran tersuai.
Parameter Langkah: Lebih Pantas tetapi Lebih Kasar
Secara lalai, RFE membuang satu ciri bagi setiap pusingan, yang memerlukan N latihan model untuk N ciri. Menetapkan step kepada integer atau pecahan yang lebih besar (contohnya, step=0.1 membuang 10% daripada ciri yang masih tinggal pada setiap pusingan) mengurangkan bilangan pusingan. Ini amat penting untuk data berdimensi tinggi: dengan 1,000 ciri dan step=1, RFE memerlukan 1,000 latihan model bagi setiap lipatan CV. Dengan step=0.1, kira-kira 23 pusingan sudah mencukupi. Pertukarannya ialah penyingkiran yang lebih kasar — sekumpulan 100 ciri dibuang bersama-sama dan bukannya satu demi satu.
from sklearn.feature_selection import RFECV
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
import time
X, y = load_breast_cancer(return_X_y=True)
X_sc = StandardScaler().fit_transform(X)
for step in [1, 2, 5]:
start = time.time()
rfecv = RFECV(LogisticRegression(max_iter=1000), step=step, cv=5, n_jobs=-1)
rfecv.fit(X_sc, y)
print(f'step={step}: {round(time.time()-start,2)}s, optimal_features={rfecv.n_features_}')Membandingkan RFECV dengan SelectKBest
RFECV dan SelectKBest memenuhi keperluan yang berbeza. SelectKBest pantas, tidak bergantung pada model dan berfungsi berdasarkan korelasi univariat — ia ialah langkah awal yang baik untuk set ciri yang besar. RFECV lebih lambat tetapi mengambil kira interaksi ciri (cara ciri berfungsi bersama dalam model) dan memilih K secara automatik. Dalam amalan: gunakan SelectKBest untuk mengurangkan 1000 ciri kepada 100 ciri dengan pantas, kemudian RFECV untuk memperhalusnya kepada subset optimum. Menggabungkan kedua-duanya lebih pantas berbanding menggunakan RFECV sahaja pada data berdimensi tinggi.
from sklearn.feature_selection import SelectKBest, f_classif, RFECV
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_breast_cancer
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
X_sc = StandardScaler().fit_transform(X)
# Baseline: no selection
base = cross_val_score(LogisticRegression(max_iter=1000), X_sc, y, cv=5).mean()
# SelectKBest
X_skb = SelectKBest(f_classif, k=15).fit_transform(X_sc, y)
skb = cross_val_score(LogisticRegression(max_iter=1000), X_skb, y, cv=5).mean()
# RFECV
rfecv = RFECV(LogisticRegression(max_iter=1000), cv=5, n_jobs=-1).fit(X_sc, y)
rfe_score = rfecv.cv_results_['mean_test_score'].max()
print(f'All features: {base:.4f}')
print(f'SelectKBest(k=15): {skb:.4f}')
print(f'RFECV: {rfe_score:.4f} ({rfecv.n_features_} features)')Bila RFECV Bukan Pilihan Terbaik
RFECV memerlukan kos pengiraan yang tinggi dan mempunyai beberapa batasan. Ia tidak menjamin subset ciri yang optimum secara global — penyingkiran berundur secara tamak boleh terperangkap dalam optimum setempat. Kaedah ini tidak praktikal untuk set data dengan ribuan ciri melainkan step adalah besar atau penganggar yang pantas digunakan. Untuk data jarang berdimensi sangat tinggi (NLP, genomik), pengawalan L1 (Lasso, LinearSVC dengan L1) lebih cekap kerana ia menetapkan pekali kepada sifar secara matematik tanpa latihan semula berulang. RFECV paling sesuai untuk set data berdimensi sederhana (10-200 ciri) yang membolehkan pengulangan dilakukan.
Pemilihan Ciri dalam Aliran Kerja ML Lengkap
Pemilihan ciri terletak antara prapemprosesan dengan pemodelan dalam pipeline. Aliran kerja lengkap yang disyorkan: (1) bersihkan dan kodkan data mentah; (2) gunakan VarianceThreshold; (3) gunakan RFECV atau SelectKBest di dalam Pipeline; (4) latih dan nilai dengan pengesahan silang; (5) selepas pemilihan, periksa ciri yang dikekalkan dan sahkan dengan pengetahuan bidang. Ciri yang dipilih tetapi tidak dapat dijelaskan oleh pakar bidang hendaklah disiasat kerana mungkin berlaku kebocoran data — kadangkala ciri tersebut mengekod maklumat masa hadapan yang meningkatkan skor kepentingan secara palsu.
Mengesahkan Ciri yang Dipilih dengan Pakar Bidang
Selepas RFECV mengenal pasti subset ciri yang optimum, sentiasa sahkan pemilihan tersebut dengan pihak berkepentingan atau pakar bidang. Bentangkan senarai ciri yang dipilih dan tanyakan: 'Adakah munasabah dari segi intuisi bahawa ciri-ciri ini meramalkan sasaran?' Jika ciri seperti 'ID rekod' atau 'cap masa pengukuran' muncul dalam ciri teratas, itu hampir pasti merupakan artifak kebocoran data. Sebaliknya, jika ciri yang jelas penting (contohnya, 'umur' untuk model kematian) digugurkan, siasat sebabnya — ciri itu mungkin berkorelasi dengan ciri lain yang dipilih, atau mungkin terdapat isu kualiti data.
Semakan Pantas
Uji pemahaman anda tentang Penghapusan Ciri Berulang daripada pelajaran ini.
Ulang Kaji Pelajaran
Dalam pelajaran ini, anda telah mempelajari: RFE menghapuskan ciri yang paling kurang penting secara berulang berdasarkan penilaian model itu sendiri, lalu mengambil kira interaksi antara ciri, RFECV melanjutkan RFE dengan mencari bilangan ciri optimum secara automatik melalui pengesahan silang, dan parameter step mengawal bilangan ciri yang dihapuskan pada setiap pusingan, dengan mengimbangi ketepatan dan kelajuan. Kini anda telah melengkapkan kursus Kejuruteraan Ciri dan bersedia untuk meneroka pengelompokan serta pembelajaran tanpa penyeliaan.
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 “Penghapusan Ciri Berulang dengan Pengesahan Silang” percuma?
Ya — teks penuh “Penghapusan Ciri Berulang dengan Pengesahan Silang” 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 “Penghapusan Ciri Berulang dengan Pengesahan Silang”?
Pelajar akan menggunakan RFECV supaya model sendiri menyingkirkan ciri yang paling kurang berguna, sambil mengekalkan gelung pengesahan silang untuk mencegah kebocoran. 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 “Penghapusan Ciri Berulang dengan Pengesahan Silang” 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
- Mencipta Ciri Baharu: Transformasi Log, Pengelompokan dan Interaksi
- Pengekstrakan Ciri Tarikh dan Masa
- Pemilihan Ciri: Ambang Varians dan SelectKBest
- Penghapusan Ciri Berulang dengan Pengesahan Silang