Seleksi Fitur: Ambang Varians dan SelectKBest
Peserta akan menghapus fitur dengan varians mendekati nol, kemudian mengurutkan fitur yang tersisa berdasarkan uji statistik univariat dan mempertahankan hanya K fitur paling informatif.
Seleksi Fitur: Ambang Varians dan SelectKBest adalah pelajaran Machine Learning Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Machine Learning Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Machine Learning Academy mencakup 4 pelajaran total.
Mengapa Fitur Perlu Dihapus?
Menambahkan lebih banyak fitur tidak selalu lebih baik. Fitur yang tidak relevan menambah derau tanpa sinyal, meningkatkan risiko overfitting, memperlambat pelatihan, dan memboroskan memori. Fitur redundan memberikan informasi duplikat dan dapat mengganggu kestabilan beberapa model. Seleksi fitur mengidentifikasi dan menghapus masukan yang tidak membantu ini, sehingga tersisa kumpulan fitur informatif yang ringkas. Hasilnya: pelatihan lebih cepat, penggunaan memori lebih rendah, overfitting berkurang, dan sering kali generalisasi lebih baik — terutama untuk model tanpa regularisasi bawaan seperti KNN atau Naive Bayes.
Variance Threshold: Menghapus Fitur yang Hampir Konstan
VarianceThreshold menghapus fitur yang variansnya berada di bawah ambang batas yang ditentukan. Fitur dengan varians nol bersifat konstan—memiliki nilai yang sama untuk setiap contoh sehingga tidak memberikan informasi pembeda. Fitur yang hampir konstan (varians sangat rendah) hampir sama tidak informatifnya. Menetapkan threshold=0 hanya menghapus fitur yang benar-benar konstan; threshold=0.01 menghapus fitur apa pun yang memiliki nilai sama pada setidaknya 99% data. Ini adalah langkah awal yang cepat dan tidak bergantung pada model untuk membersihkan kumpulan fitur.
from sklearn.feature_selection import VarianceThreshold
import numpy as np
# Create feature matrix with some constant/near-constant columns
X = np.array([
[1, 2, 1, 5], # col 3: near constant (mostly 1)
[2, 4, 1, 3],
[3, 6, 1, 4],
[4, 8, 2, 7], # col 3 varied
[5, 10, 1, 2]
], dtype=float)
print('Column variances:', X.var(axis=0).round(2))
vt = VarianceThreshold(threshold=0.5) # remove columns with variance < 0.5
X_filtered = vt.fit_transform(X)
print('Features kept:', vt.get_support())
print('X shape before:', X.shape, '-> after:', X_filtered.shape)Menerapkan Ambang Varians pada Data Nyata
Ambang varians sangat berguna setelah penyandian one-hot, ketika beberapa kategori mungkin hanya memiliki sedikit contoh (sehingga menghasilkan kolom biner dengan varians hampir nol), atau saat bekerja dengan data genomik, teks, maupun sensor yang sebagian besar fiturnya mendekati nol. Tetapkan ambang berdasarkan proporsi nol yang diperkirakan: jika 95% nilai adalah nol, variansnya paling tinggi 0.95 × 0.05 = 0.0475, sehingga threshold=0.05 menghapus fitur yang setidaknya 95% nilainya konstan.
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_breast_cancer
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
print('Original n_features:', X.shape[1])
vt = VarianceThreshold(threshold=10.0) # remove low-variance features
X_filtered = vt.fit_transform(X)
print('After threshold=10.0, n_features:', X_filtered.shape[1])
print('Removed features:', (~vt.get_support()).sum())SelectKBest: Mengurutkan Berdasarkan Uji Statistik
SelectKBest mengevaluasi setiap fitur secara independen menggunakan uji statistik univariat dan mempertahankan K fitur teratas. Untuk klasifikasi, gunakan chi2 (chi-kuadrat, untuk fitur non-negatif) atau f_classif (statistik F ANOVA). Untuk regresi, gunakan f_regression (korelasi linear) atau mutual_info_regression. Uji tersebut mengukur seberapa kuat setiap fitur secara individual berkorelasi dengan target. Menetapkan k='all' akan mengurutkan semua fitur berdasarkan skor, bukan memilih jumlah fitur yang tetap.
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.datasets import load_breast_cancer
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
skb = SelectKBest(score_func=f_classif, k=10)
X_new = skb.fit_transform(X, y)
print('Original shape:', X.shape)
print('After SelectKBest(k=10):', X_new.shape)
print('Top feature mask:', skb.get_support())
scores = skb.scores_
top5_idx = np.argsort(scores)[::-1][:5]
print('Top 5 feature indices:', top5_idx)
print('Top 5 F-scores:', np.round(scores[top5_idx], 2))Informasi Mutual: Penilaian Nonlinear
Uji F dalam f_classif hanya mendeteksi hubungan linear antara fitur dan target. Informasi mutual (mutual_info_classif, mutual_info_regression) mengukur ketergantungan statistik apa pun—linear maupun nonlinear. Fitur dengan hubungan nonlinear terhadap target dapat memperoleh skor nol melalui uji F, tetapi skor tinggi melalui informasi mutual. Informasi mutual lebih lambat dihitung, tetapi memberikan informasi yang lebih kaya, terutama untuk model berbasis pohon yang hubungan nonlinearnya penting.
from sklearn.feature_selection import SelectKBest, mutual_info_classif, f_classif
from sklearn.datasets import load_breast_cancer
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
feature_names = load_breast_cancer().feature_names
# Compare F-test and mutual information rankings
f_scores = f_classif(X, y)[0]
mi_scores = mutual_info_classif(X, y, random_state=42)
import pandas as pd
df = pd.DataFrame({'feature': feature_names, 'f_score': f_scores, 'mi_score': mi_scores})
print('Top 5 by F-test:'); print(df.sort_values('f_score', ascending=False).head(5)['feature'].values)
print('Top 5 by MI: '); print(df.sort_values('mi_score', ascending=False).head(5)['feature'].values)Memilih K: Validasi Silang untuk Berbagai Jumlah Fitur
Berapa banyak fitur yang sebaiknya dipertahankan? Cara yang tepat untuk memilih K adalah memperlakukannya sebagai hiperparameter dan mencari nilai yang memaksimalkan skor validasi silang. Gunakan SelectKBest di dalam Pipeline dan tambahkan selectkbest__k ke parameter pencarian grid Anda. Dengan demikian, Anda menghindari kesalahan umum berupa pemilihan K berdasarkan kinerja pelatihan (yang selalu meningkat jika fitur ditambah), dan menemukan nilai K yang memaksimalkan kemampuan generalisasi.
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_breast_cancer
X, y = load_breast_cancer(return_X_y=True)
pipe = Pipeline([('sel', SelectKBest(f_classif)), ('clf', LogisticRegression(max_iter=1000))])
param_grid = {'sel__k': [5, 10, 15, 20, 30]}
grid = GridSearchCV(pipe, param_grid, cv=5)
grid.fit(X, y)
print('Best k:', grid.best_params_['sel__k'])
print('Best CV score:', round(grid.best_score_, 4))SelectPercentile: Pemilihan Fitur Relatif
SelectPercentile adalah pasangan SelectKBest yang mempertahankan percentile% fitur teratas, bukan jumlah tetap K. Cara ini lebih tangguh ketika jumlah fitur berbeda-beda antarset data atau ketika alur pemrosesan yang sama diterapkan pada masalah yang berbeda. Misalnya, SelectPercentile(f_classif, percentile=20) mempertahankan 20% fitur terbaik, berapa pun jumlah keseluruhannya. Konsekuensinya, Anda mendapatkan batas relatif, bukan jumlah absolut.
from sklearn.feature_selection import SelectPercentile, f_classif
from sklearn.datasets import load_breast_cancer
X, y = load_breast_cancer(return_X_y=True)
for pct in [20, 50, 80]:
sel = SelectPercentile(f_classif, percentile=pct)
X_new = sel.fit_transform(X, y)
print(f'percentile={pct}: kept {X_new.shape[1]} of {X.shape[1]} features')Pemilihan Fitur vs Regularisasi
Pemilihan fitur dan regularisasi adalah pendekatan yang saling melengkapi, tetapi berbeda. Pemilihan fitur secara eksplisit menghapus fitur sebelum pelatihan, sehingga menghasilkan model yang lebih jarang dengan lebih sedikit masukan. Regularisasi (penalti L1/L2) mempertahankan semua fitur, tetapi menyusutkan koefisien yang tidak penting mendekati nol—L1 (Lasso) bahkan menghasilkan nilai nol secara tepat. Pemilihan fitur bersifat eksplisit dan mudah ditafsirkan; regularisasi bersifat berkelanjutan dan mempertahankan lebih banyak informasi. Untuk kemudahan interpretasi, pemilihan fitur secara eksplisit lebih disukai. Untuk daya prediksi, regularisasi sering lebih unggul karena membuat keputusan tentang tingkat kepentingan secara lunak dan berdasarkan data.
Keterbatasan: Fitur Tidak Saling Independen
Keterbatasan utama pemilihan univariat (VarianceThreshold, SelectKBest) adalah setiap fitur dievaluasi secara independen. Fitur yang tidak memiliki korelasi marginal dengan target mungkin tetap sangat berguna jika digabungkan dengan fitur lain (interaksi). Dua fitur yang redundan mungkin masing-masing memperoleh skor tinggi, tetapi tidak memberikan nilai tambahan setelah fitur pertama digunakan. Metode ini tidak dapat mendeteksi ketergantungan tersebut. Recursive Feature Elimination (RFECV), yang dibahas pada pelajaran berikutnya, mengatasi masalah ini dengan membiarkan model itu sendiri mengurutkan fitur berdasarkan kontribusi prediktif gabungannya.
Alur Kerja Praktis untuk Pemilihan Fitur
Alur kerja pemilihan fitur yang disarankan: (1) mulai dengan VarianceThreshold untuk menghapus fitur yang konstan dan hampir konstan; (2) terapkan SelectKBest dengan informasi mutual untuk mengurutkan fitur yang tersisa secara cepat; (3) buat grafik skor CV terhadap K untuk menemukan titik siku; (4) masukkan fitur yang dipilih ke dalam alur pemrosesan lengkap dengan validasi silang; (5) jika model memiliki tingkat kepentingan bawaan (berbasis pohon), gunakan tingkat kepentingan permutasi sebagai pemeriksaan tahap kedua. Selalu tempatkan pemilihan fitur di dalam Pipeline untuk mencegah kebocoran.
from sklearn.feature_selection import VarianceThreshold, SelectKBest, f_classif
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_breast_cancer
X, y = load_breast_cancer(return_X_y=True)
pipe = Pipeline([
('vt', VarianceThreshold(threshold=0.1)), # step 1
('sel', SelectKBest(f_classif, k=15)), # step 2
('clf', RandomForestClassifier(n_estimators=100, random_state=42))
])
scores = cross_val_score(pipe, X, y, cv=5)
print('Pipeline CV score:', round(scores.mean(), 4))SelectFromModel: Biarkan Model yang Menentukan
SelectFromModel menggunakan tingkat kepentingan fitur (atau koefisien) dari model yang telah dilatih untuk memilih fitur yang berada di atas suatu ambang batas. Setelah melatih hutan acak atau Lasso, teruskan model tersebut ke SelectFromModel dengan threshold seperti 'mean' (mempertahankan fitur dengan tingkat kepentingan di atas rata-rata) atau 'median'. Cara ini sangat berguna sebagai langkah alur pemrosesan sebelum pengestimasi sekunder—pemilihan berdasarkan tingkat kepentingan langsung dimasukkan ke dalam proses validasi silang sehingga kebocoran dapat dicegah.
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
X, y = load_breast_cancer(return_X_y=True)
pipe = Pipeline([
('sel', SelectFromModel(RandomForestClassifier(n_estimators=50, random_state=42), threshold='mean')),
('clf', RandomForestClassifier(n_estimators=100, random_state=42))
])
scores = cross_val_score(pipe, X, y, cv=5)
print('SelectFromModel CV:', round(scores.mean(), 4))Pemeriksaan Singkat
Uji pemahaman Anda tentang VarianceThreshold dan SelectKBest dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini, Anda mempelajari bahwa: VarianceThreshold menghapus fitur yang konstan dan hampir konstan sebagai langkah awal yang cepat, SelectKBest mengurutkan fitur berdasarkan uji univariat (uji F atau informasi mutual) dan mempertahankan K fitur teratas, serta pemilihan fitur harus selalu ditempatkan di dalam Pipeline dan K harus divalidasi silang sebagai hiperparameter. Selanjutnya, kita akan membahas Recursive Feature Elimination with Cross-Validation (RFECV), yang memungkinkan model itu sendiri mengeluarkan fitur yang paling tidak berguna.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Seleksi Fitur: Ambang Varians dan SelectKBest” gratis?
Ya — teks lengkap “Seleksi Fitur: Ambang Varians dan SelectKBest” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Machine Learning Academy, upgrade ke CoddyKit PRO. Kursus Machine Learning Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Seleksi Fitur: Ambang Varians dan SelectKBest”?
Peserta akan menghapus fitur dengan varians mendekati nol, kemudian mengurutkan fitur yang tersisa berdasarkan uji statistik univariat dan mempertahankan hanya K fitur paling informatif. Kamu berlatih Machine Learning Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Machine Learning Academy?
Tidak diperlukan pengalaman sebelumnya. Machine Learning Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Seleksi Fitur: Ambang Varians dan SelectKBest” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Machine Learning Academy ini?
Ya. Setiap pelajaran Machine Learning Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membuat Fitur Baru: Transformasi Log, Pengelompokan, dan Interaksi
- Ekstraksi Fitur Tanggal dan Waktu
- Seleksi Fitur: Ambang Varians dan SelectKBest
- Eliminasi Fitur Rekursif dengan Validasi Silang