Haruskah pemilihan fitur dilakukan hanya pada data pelatihan (atau semua data)? Saya telah melalui beberapa diskusi dan makalah seperti Guyon (2003) dan Singhi dan Liu (2006) , tetapi masih tidak yakin tentang jawaban yang benar.
Pengaturan percobaan saya adalah sebagai berikut:
- Dataset: 50-kontrol sehat & 50-pasien penyakit (cca 200 fitur yang dapat relevan dengan prediksi penyakit).
- Tugasnya adalah untuk mendiagnosis penyakit berdasarkan fitur yang tersedia.
Apa yang saya lakukan adalah
- Ambil seluruh dataset dan lakukan pemilihan fitur (FS). Saya hanya menyimpan fitur yang dipilih untuk diproses lebih lanjut
- Berpisah untuk menguji dan melatih, mengklasifikasikan kereta menggunakan data kereta dan fitur yang dipilih. Kemudian, gunakan classifier untuk menguji data (sekali lagi hanya menggunakan fitur yang dipilih). Validasi Leave-one-out digunakan.
- memperoleh akurasi klasifikasi
- Rata-rata: ulangi 1) -3) N kali. (100).
Saya setuju bahwa melakukan FS pada seluruh dataset dapat menimbulkan beberapa bias, tetapi pendapat saya adalah bahwa itu "rata-rata keluar" selama rata-rata (langkah 4). Apakah itu benar? (Varians akurasi adalah )
1 Guyon, I. (2003) "Pengantar Variabel dan Pemilihan Fitur", Jurnal Penelitian Pembelajaran Mesin, Vol. 3, hal. 1157-1182
2 Singhi, SK dan Liu, H. (2006) "Fitur Subset Seleksi Bias untuk Pembelajaran Klasifikasi", Prosiding ICML '06 Prosiding konferensi internasional ke-23 tentang pembelajaran mesin, hal. 849-856
Sama seperti tambahan untuk jawaban di sini, saya punya dua tautan yang benar-benar membantu saya memahami mengapa ini bukan prosedur yang baik:
http://nbviewer.jupyter.org/github/cs109/content/blob/master/lec_10_cross_val.ipynb
https://www.youtube.com/watch?v=S06JpVoNaA0
Edit: seperti yang diminta, penjelasan singkat tentang isi tautan:
Misalkan saya sedang melatih classifier, dan saya memiliki dataset 1000 sampel, dengan masing-masing 1 juta fitur. Saya tidak dapat memproses semuanya, jadi saya membutuhkan lebih sedikit fitur (katakanlah, saya dapat menghitung 300 fitur). Saya juga memiliki set uji yang diadakan dari 100 sampel untuk secara akurat memperkirakan out-of-sample, akurasi dunia nyata saya.
Jika saya memfilter 1 juta fitur saya ke 300, dengan memilih fitur-fitur dengan korelasi tertinggi dengan target seluruh dataset saya, saya membuat kesalahan (karena saya memperkenalkan overfitting yang tidak dapat dideteksi oleh Cross Validasi nanti). Set saya yang tertahan akan menunjukkan ini dengan memuntahkan nilai akurasi yang buruk.
Menurut tautan di atas, cara yang benar untuk melakukannya adalah dengan membagi dataset saya ke dalam set pelatihan dan set Validasi Lintas, dan kemudian menyetel model saya (menyaring fitur, dll.) Berdasarkan pada set pelatihan ini dan itu terkait skor CV. Jika saya menggunakan K-folds, saya harus menyetel dari awal setiap kali saya membuat split / lipat, dan kemudian rata-rata hasilnya.
Secara programatis, Anda melakukan hal berikut:
Sangat penting bagi Anda untuk melakukan rekayasa fitur di dalam loop, pada set sub-pelatihan, Ti, bukan pada set pelatihan penuh, T1.
Alasan untuk ini adalah bahwa ketika Anda cocok / insinyur fitur untuk Ti, Anda menguji pada CVi, yang tidak terlihat untuk model itu. Sedangkan, jika Anda cocok / fitur engineer di T1, CV apa pun yang Anda pilih harus menjadi subset T1, dan karenanya Anda akan bias secara optimis, yaitu Anda akan overfit, karena Anda berlatih dan menguji sampel data yang sama.
Jawaban StackExchange yang sangat bagus adalah yang ini , yang benar-benar menjelaskannya lebih mendalam dan dengan contoh kode. Juga lihat ini sebagai tambahan.
sumber
Bootstrap "optimisme" Efron-Gong sangat bagus untuk ini. Idenya adalah untuk menggunakan semua data yang tersedia untuk mengembangkan model prediktif, dan menggunakan semua data untuk memperkirakan kemungkinan kinerja masa depan dari model yang sama. Dan ukuran sampel Anda terlalu kecil dengan faktor 100 untuk setiap pendekatan sampel terpisah untuk bekerja.
Untuk menggunakan bootstrap dengan benar, Anda harus memprogram semua langkah yang menggunakan dan mengulanginya lagi di setiap resample. Kecuali untuk pemilihan fitur, berikut ini contoh yang bagus: Menafsirkan model regresi logistik dengan banyak prediktorY
sumber