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:
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.
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.
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:
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 .
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