Saya sedang mengerjakan masalah dengan terlalu banyak fitur dan melatih model saya terlalu lama. Saya menerapkan algoritma pemilihan maju untuk memilih fitur.
Namun, saya bertanya-tanya apakah scikit-belajar memiliki algoritma seleksi / stepwise regresi maju?
feature-selection
scikit-learn
Maksud
sumber
sumber
Jawaban:
Tidak, sklearn tampaknya tidak memiliki algoritme pemilihan maju. Namun, ia menyediakan penghapusan fitur rekursif, yang merupakan algoritma penghapusan fitur serakah mirip dengan seleksi mundur berurutan. Lihat dokumentasi di sini:
http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
sumber
coef_
antarmuka. Ini akan mengesampingkan metode berbasis pohon dll. Namun, saya pikir apa yang diminta oleh @Maksud adalah apa yang dijelaskan dalam "Pengantar pembelajaran statistik" oleh James di mana fitur ditambahkan / dihapus secara rekursif oleh kepentingannya yang dikuantifikasi dengan validasi set akurasi . Ini memungkinkan pemilihan fitur di semua jenis model, bukan yang parametrik linier saja.Sklearn DOES memiliki algoritma pemilihan maju, meskipun tidak disebut dalam scikit-learn. Metode pemilihan fitur yang disebut F_regress di scikit-learn akan secara berurutan menyertakan fitur yang paling meningkatkan model, sampai ada
K
fitur dalam model (K adalah input).Dimulai dengan regresi label pada setiap fitur secara individual, dan kemudian mengamati fitur mana yang paling meningkatkan model menggunakan F-statistik. Kemudian menggabungkan fitur yang menang ke dalam model. Kemudian beralih ke fitur yang tersisa untuk menemukan fitur berikutnya yang paling meningkatkan model, sekali lagi menggunakan F-statistik atau uji F. Ia melakukan ini sampai ada fitur K dalam model.
Perhatikan bahwa fitur yang tersisa yang berkorelasi dengan fitur yang dimasukkan ke dalam model mungkin tidak akan dipilih, karena mereka tidak berkorelasi dengan residu (meskipun mereka mungkin berkorelasi baik dengan label). Ini membantu menjaga dari multi-collinearity.
sumber
Scikit-belajar memang tidak mendukung regresi bertahap. Itu karena apa yang umumnya dikenal sebagai 'regresi bertahap' adalah algoritma yang didasarkan pada nilai-p dari koefisien regresi linier, dan scikit-learning sengaja menghindari pendekatan inferensial untuk model pembelajaran (pengujian signifikansi dll). Selain itu, OLS murni hanyalah salah satu dari banyak algoritma regresi, dan dari sudut pandang scikit-belajar, itu tidak terlalu penting, juga bukan yang terbaik.
Namun, ada beberapa saran bagi mereka yang masih membutuhkan cara yang baik untuk pemilihan fitur dengan model linier:
ElasticNet
atauLasso
.StandardScaler
, dan kemudian pesan fitur Anda hanya denganmodel.coef_
. Untuk kovariat yang benar-benar independen, itu sama dengan menyortir berdasarkan nilai-p. Kelassklearn.feature_selection.RFE
akan melakukannya untuk Anda, danRFECV
bahkan akan mengevaluasi jumlah fitur yang optimal.statsmodels
mlxtend
Paket yang kompatibel scikit-learn mendukung pendekatan ini untuk estimator dan metrik apa saja.statsmodels
, karena paket ini menghitung nilai-p untuk Anda. Pilihan maju-mundur dasar bisa terlihat seperti ini:`` `
Contoh ini akan mencetak output berikut:
sumber
Sebenarnya ada algoritma yang bagus yang disebut "Forward_Select" yang menggunakan Statsmodels dan memungkinkan Anda untuk mengatur metrik Anda sendiri (AIC, BIC, Adjusted-R-Squared, atau apa pun yang Anda suka) untuk secara progresif menambahkan variabel ke model. Algoritma dapat ditemukan di bagian komentar di halaman ini - gulir ke bawah dan Anda akan melihatnya di dekat bagian bawah halaman.
https://planspace.org/20150423-forward_selection_with_statsmodels/
Saya akan menambahkan bahwa algoritma ini juga memiliki satu fitur yang bagus: Anda dapat menerapkannya pada masalah klasifikasi atau regresi! Anda hanya harus mengatakannya.
Cobalah dan lihat sendiri.
sumber
Sebenarnya sklearn tidak memiliki algoritma pemilihan maju, pikir permintaan tarik dengan implementasi menunggu pemilihan fitur maju di repositori Scikit-Learn sejak April 2017.
Sebagai alternatif, ada seleksi mundur maju dan selangkah lebih maju di mlxtend . Anda dapat menemukan dokumen itu di Pemilih Fitur Berurutan
sumber