Bagaimana seharusnya Seleksi Fitur dan optimasi Hyperparameter dipesan dalam pipa pembelajaran mesin?

14

Tujuan saya adalah mengklasifikasikan sinyal sensor. Konsep solusi saya sejauh ini adalah: i) Fitur teknik dari sinyal mentah ii) Memilih fitur yang relevan dengan ReliefF dan pendekatan pengelompokan iii) Menerapkan NN, Random Forest dan SVM

Namun saya terjebak dalam dilema. Dalam ii) dan iii), ada hiperparameter seperti k-Neigbours terdekat untuk ReliefF atau panjang jendela, yang di dalamnya sinyal sensor dievaluasi, atau jumlah unit tersembunyi di setiap lapisan NN

Ada 3 Masalah yang saya lihat di sini: 1) Parameter pemilihan fitur tuning akan mempengaruhi kinerja classifier 2) Mengoptimalkan hyperparameters dari classifier akan mempengaruhi pilihan fitur. 3) Mengevaluasi setiap kombinasi konfigurasi yang memungkinkan tidak dapat dilakukan.

Jadi pertanyaan saya adalah: a) Dapatkah saya membuat asumsi penyederhanaan, parameter pemilihan fitur tuning dapat dipisahkan dari parameter tuning classifier? b) Apakah ada solusi lain yang mungkin?

Grunwalski
sumber
Saya pikir tuning pemilihan fitur decoupling dan tuning classifier adalah valid, karena heuritsic for reliefF bertujuan untuk memaksimalkan varians antar-kelas dan meminimalkan varians intra-kelas yang juga menunjukkan classifier yang baik. Oleh karena itu menyetel parameter optimal untuk reliefF juga membuat pengklasifikasi yang baik lebih 'cenderung'. Namun memiliki formulasi matematika untuk mendukung ide ini, akan sangat menyenangkan.
Grunwalski
Varian spesifik dari pertanyaan ini: Haruskah pemilihan fitur menjadi bagian dari rutin crossvalidation (seperti pada: # untuk setiap set hyperparam classifer: # untuk setiap k-fold CV run: 1) pemilihan fitur, 2) penskalaan fitur, 3) fit classifier 4) memprediksi pada set tes?
Nikolas Rieble
1
@NikolasRieble Saya baru saja menulis jawaban untuk pertanyaan asli, dan juga memasukkan pertanyaan Anda dalam jawaban
Dennis Soemers

Jawaban:

14

Seperti yang telah Anda amati sendiri, pilihan fitur Anda (pemilihan fitur) dapat berdampak pada hyperparameters untuk algoritme Anda yang optimal, dan hyperparameter yang Anda pilih untuk algoritme Anda mungkin berdampak pada pilihan fitur mana yang optimal.

Jadi, ya, jika Anda benar-benar peduli untuk memeras setiap persen kinerja dari model Anda, dan Anda mampu membayar jumlah perhitungan yang diperlukan, solusi terbaik mungkin adalah melakukan pemilihan fitur dan penyetelan hyperparamter "pada saat yang sama". Itu mungkin tidak mudah (tergantung bagaimana Anda melakukan pemilihan fitur). Cara saya membayangkannya bekerja akan seperti memiliki set fitur yang berbeda sebagai kandidat, dan memperlakukan pemilihan satu set fitur dari semua set kandidat sebagai hyperparameter tambahan.

Dalam praktiknya itu mungkin tidak benar-benar layak. Secara umum, jika Anda tidak mampu mengevaluasi semua kombinasi yang mungkin, saya akan merekomendasikan:

  1. Sangat longgar mengoptimalkan hiperparameter, hanya untuk memastikan Anda tidak menetapkan nilai yang sangat buruk untuk beberapa hiperparameter. Hal ini seringkali dapat dilakukan dengan tangan jika Anda memiliki pemahaman intuitif yang baik tentang hiperparameter Anda, atau dilakukan dengan prosedur optimasi hiperparameter yang sangat singkat menggunakan hanya beberapa fitur yang Anda tahu cukup baik jika tidak.

  2. Pilihan fitur, dengan hyperparameter yang mungkin tidak 100% dioptimalkan tetapi setidaknya tidak terlalu buruk. Jika Anda setidaknya sudah memiliki algoritma pembelajaran mesin yang dikonfigurasi dengan cukup baik, memiliki fitur yang baik akan secara signifikan lebih penting untuk kinerja Anda daripada hiperparameter yang mengoptimalkan mikro. Contoh ekstrem: Jika Anda tidak memiliki fitur, Anda tidak dapat memprediksi apa pun. Jika Anda memiliki fitur curang yang berisi label kelas, Anda dapat dengan sempurna mengklasifikasikan semuanya.

  3. Optimalkan hyperparameters dengan fitur yang dipilih pada langkah di atas. Ini harus menjadi set fitur yang baik sekarang, di mana sebenarnya mungkin sedikit mengoptimalkan hyperparams.


Untuk menjawab pertanyaan tambahan yang diposting Nikolas di komentar, menyimpulkan bagaimana semua hal ini (pemilihan fitur, optimasi hyperparameter) berinteraksi dengan validasi silang k-fold: Saya akan mengatakan itu tergantung.

Setiap kali Anda menggunakan data di salah satu lipatan untuk apa saja, dan kemudian mengevaluasi kinerja pada lipatan yang sama, Anda mendapatkan estimasi bias kinerja Anda (Anda akan melebih-lebihkan kinerja). Jadi, jika Anda menggunakan data di semua lipatan untuk langkah pemilihan fitur, dan kemudian mengevaluasi kinerja pada masing-masing lipatan tersebut, Anda akan mendapatkan estimasi kinerja yang bias untuk masing-masingnya (yang tidak baik). Demikian pula, jika Anda memiliki optimasi hiperparameter yang digerakkan oleh data dan menggunakan data dari lipatan tertentu (atau semua lipatan), dan kemudian mengevaluasi pada lipatan yang sama, Anda akan kembali mendapatkan estimasi kinerja yang bias. Solusi yang mungkin adalah:

  1. Ulangi pipa lengkap dalam setiap lipatan secara terpisah (misalnya dalam setiap lipatan, lakukan pemilihan fitur + optimisasi hyperparameter dan model pelatihan). Melakukan ini berarti bahwa validasi silang k-fold memberi Anda perkiraan yang tidak bias tentang kinerja pipa lengkap ini .

  2. Pisahkan dataset awal Anda menjadi '' dataset preprocessing '' dan '' train / dataset dataset ''. Anda dapat melakukan optimasi pemilihan fitur + hyperparameter Anda pada '' dataset preprocessing ''. Kemudian, Anda memperbaiki fitur dan hyperparameter yang Anda pilih, dan melakukan validasi silang k-fold pada '' train / test dataset ''. Melakukan hal ini berarti bahwa validasi k-fold cross memberi Anda perkiraan yang tidak bias dari kinerja algoritma ML Anda mengingat nilai fitur-set dan hyperparameter yang tetap .

Perhatikan bagaimana kedua solusi menghasilkan estimasi kinerja yang sedikit berbeda. Mana yang lebih menarik tergantung pada kasus penggunaan Anda, tergantung pada bagaimana Anda berencana untuk menggunakan solusi pembelajaran mesin Anda dalam praktiknya. Jika Anda, misalnya, perusahaan yang berniat memiliki saluran lengkap pemilihan fitur + optimisasi hyperparameter + pelatihan yang berjalan secara otomatis setiap hari / minggu / bulan / tahun / apa pun, Anda juga akan tertarik dengan kinerja yang lengkap pipa, dan Anda akan menginginkan solusi pertama.

Jika, di sisi lain, Anda hanya mampu melakukan pemilihan fitur + optimisasi hyperparameter satu kali dalam hidup Anda, dan setelah itu hanya secara teratur melatih kembali algoritma Anda (dengan nilai-nilai fitur-set dan nilai hyperparam tetap), maka kinerja hanya langkah itu yang akan membuat Anda tertarik, dan Anda harus mencari solusi kedua

Dennis Soemers
sumber
Bisakah Anda memberikan referensi juga?
Nikolas Rieble
1
Ada beberapa gambar buku terkenal di pos ini: nodalpoint.com/not-perform-feature-selection . Mereka tampaknya setuju dengan "kemungkinan solusi 1" saya. Saya tidak perlu referensi untuk kasus lain, selain ... saya sendiri? Saya memang memberikan alasan / motivasi saya di sana, yang menurut hemat saya, jadi itulah rujukannya: D
Dennis Soemers
1
Bab ESL tersebut harus merupakan bacaan wajib 100% untuk setiap pemodel prediktif.
Matthew Drury
Jadi mengenai soln 1, bagaimana Anda mendapatkan set fitur akhir dan memodelkan hiperparameter setelah menjalankan pemilihan fitur (fs) dan optimasi hiperparam (ho) di beberapa iter cv? Juga, ketika kita melakukan ini di dalam cv, apakah kita menjalankan fs pertama, dan kemudian menggunakan fitur-fitur itu?
sma
1
@skim CV umumnya digunakan hanya untuk mendapatkan estimasi kinerja yang baik. Anda biasanya tidak akan langsung mulai menggunakan salah satu model yang dilatih di salah satu set lipatan . Jika Anda menemukan kinerja yang diperkirakan melalui CV memuaskan, Anda akan menjalankan pipa lengkap sekali lagi pada set data pelatihan lengkap (termasuk, sekali lagi, pemilihan fitur dan penyetelan hyperparam). Set fitur + model hyperparams + yang Anda dapatkan dari hal itulah yang Anda masukkan "dalam produksi"K1
Dennis Soemers
4

Tidak ada pendekatan yang disebutkan yang membuat penyetelan hyper-parameter dan pemilihan fitur yang sama jadi saya akan membicarakannya. Untuk kasus ini, Anda harus merekayasa semua fitur yang Anda inginkan di awal dan memasukkan semuanya.

Penelitian sekarang di komunitas statistik telah mencoba menjadikan pemilihan fitur kriteria penyetelan. Pada dasarnya Anda menghukum seorang model sedemikian rupa sehingga insentif untuk memilih hanya beberapa fitur yang membantunya membuat prediksi terbaik. Tetapi Anda menambahkan parameter penyetelan untuk menentukan seberapa besar penalti yang harus Anda tanggung.

Dengan kata lain Anda mengizinkan model untuk memilih fitur untuk Anda dan Anda kurang lebih memiliki kendali atas jumlah fitur. Ini sebenarnya mengurangi perhitungan karena Anda tidak lagi harus memutuskan fitur mana tetapi berapa banyak fitur dan model melakukan sisanya.

Jadi ketika Anda melakukan validasi silang pada parameter maka Anda secara efektif melakukan validasi silang pada pemilihan fitur juga.

Sudah ada banyak model ML yang menggabungkan pemilihan fitur ini dalam beberapa cara.

  • Mesin vektor dukungan yang diregulasi ganda yang seperti SVM normal tetapi dengan pemilihan fitur
  • Net elastis yang berkaitan dengan regresi linier
  • Regulator drop-out di jaringan saraf (tidak punya referensi untuk yang ini)
  • Hutan acak biasanya melakukan himpunan bagian acak dari fitur sehingga jenis pegangan pemilihan fitur untuk Anda

Singkatnya, orang-orang telah mencoba untuk memasukkan penyetelan parameter dan pemilihan fitur secara bersamaan untuk mengurangi kerumitan dan dapat melakukan validasi silang.

MathIsKey
sumber
0

Saya pikir Anda terlalu banyak berpikir di sana. Pemilihan fitur, yang merupakan bagian dari rekayasa fitur, biasanya membantu tetapi beberapa fitur yang berlebihan tidak banyak berbahaya pada tahap awal sistem pembelajaran mesin. Jadi praktik terbaiknya adalah Anda menghasilkan semua fitur yang berarti terlebih dahulu, kemudian menggunakannya untuk memilih algoritma dan model penyetelan, setelah menyetel model, Anda dapat memangkas set fitur atau memutuskan untuk menggunakan fitur baru.

Prosedur pembelajaran mesin sebenarnya merupakan proses iterasi, di mana Anda melakukan rekayasa fitur, kemudian coba dengan beberapa algoritma, lalu sesuaikan model dan kembali hingga Anda puas dengan hasilnya.

THN
sumber
Maksudmu itu sedang mencoba sampai ia bekerja: D
Grunwalski
Mencoba dalam prosedur ML, tidak secara acak. Sebenarnya ML sebenarnya sedikit peretasan.
THN