Haruskah pemilihan fitur dilakukan hanya pada data pelatihan (atau semua data)?

10

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

  1. Ambil seluruh dataset dan lakukan pemilihan fitur (FS). Saya hanya menyimpan fitur yang dipilih untuk diproses lebih lanjut
  2. 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.
  3. memperoleh akurasi klasifikasi
  4. Rata-rata: ulangi 1) -3) N kali. (100).N=50

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 )<2%

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

pedro29
sumber

Jawaban:

12

Prosedur yang Anda gunakan akan menghasilkan estimasi kinerja yang bias secara optimis, karena Anda menggunakan data dari set tes yang digunakan pada langkah 2 dan 3 untuk memutuskan fitur mana yang digunakan pada langkah 1. Mengulangi latihan mengurangi varian estimasi kinerja, bukan Bias, jadi bias tidak akan keluar rata-rata. Untuk mendapatkan perkiraan kinerja yang tidak bias, data pengujian tidak boleh digunakan dengan cara apa pun untuk membuat pilihan tentang model, termasuk pemilihan fitur.

Pendekatan yang lebih baik adalah dengan menggunakan validasi silang bersarang, sehingga validasi silang luar memberikan perkiraan kinerja yang dapat diperoleh dengan menggunakan metode membangun model (termasuk pemilihan fitur) dan validasi silang dalam digunakan untuk memilih fitur secara mandiri. di setiap lipatan validasi silang luar. Kemudian buat model prediksi akhir Anda menggunakan semua data.

Karena Anda memiliki lebih banyak fitur daripada kasing, Anda cenderung cocok dengan data hanya dengan pemilihan fitur. Ini adalah sedikit mitos bahwa pemilihan fitur meningkatkan kinerja prediksi, jadi jika itu yang Anda minati (daripada mengidentifikasi fitur yang relevan sebagai tujuan itu sendiri) maka Anda mungkin lebih baik menggunakan regresi ridge dan tidak melakukan fitur apa pun. pilihan. Ini mungkin akan memberikan kinerja prediktif yang lebih baik daripada pemilihan fitur, asalkan parameter ridge dipilih dengan hati-hati (saya menggunakan minimalisasi statistik PRESS Allen - yaitu perkiraan tinggalkan satu kesalahan error mean-squared).

Untuk perincian lebih lanjut, lihat Ambroise dan McLachlan , dan jawaban saya untuk pertanyaan ini .

Dikran Marsupial
sumber
Terimakasih untuk jawaban. Sebenarnya saya tertarik pada keduanya, untuk menemukan fitur yang relevan dan meningkatkan kinerja prediksi. Dalam percobaan saya (SVM untuk klasifikasi), pemilihan fitur secara signifikan meningkatkan keakuratan prediksi (namun seperti yang Anda catat ini mungkin hasil dari pemasangan data yang berlebihan). Saya berasumsi, bahwa dengan regresi ridge yang Anda maksud sesuatu yang dikenal juga sebagai regularisasi Tikhonov?
pedro29
ya, regresi ridge hanyalah regresi linier normal dengan jangka waktu hukuman berdasarkan norma bobot. Untuk sebagian besar masalah, ini berfungsi seperti halnya SVM, tetapi lebih mudah untuk diterapkan (dan Anda dapat mengatasi kesalahan validasi silang tinggalkan satu keluar secara gratis, yang dapat digunakan untuk menyetel parameter hiper).
Dikran Marsupial
Ngomong-ngomong, apa perbedaan antara regularisasi ridge dan pemilihan fitur? Maksud saya, pada akhirnya, keduanya menunjukkan "subset terbaik" dari prediktor dari sekumpulan prediktor yang diberikan.
pedro29
regresi ridge tidak mengidentifikasi subset fitur, bentuk LASSO atau LARS melakukan regresi yang dikenakan sanksi. Itu akan menjadi pilihan saya untuk metode pemilihan fitur karena kurang rentan terhadap over-fitting karena istilah penalti memaksakan pemesanan dalam fitur yang masuk dan keluar dari model, jadi ada lebih sedikit derajat kebebasan daripada sekadar mencari set perangkat terbaik. fitur.
Dikran Marsupial
3

Sama seperti tambahan untuk jawaban di sini, saya punya dua tautan yang benar-benar membantu saya memahami mengapa ini bukan prosedur yang baik:

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:

  • Singkirkan bagian dari dataset Anda sebagai set hold-out.
  • Bagi sisa dataset Anda (selanjutnya disebut T1) menjadi K-folds.
  • Dalam for-loop dari i = 1 ke K, lakukan hal berikut:
    • pilih lipatan ke-i sebagai set CV Anda, dan sampel yang tersisa sebagai set latihan Anda (selanjutnya disebut Ti).
    • Lakukan rekayasa fitur dan pemilihan fitur apa pun yang Anda inginkan: filter fitur, gabungkan dll.
    • Konversikan set CV Anda (flip saat ini, disebut CVi) dan set training Ti Anda saat ini menjadi satu dengan fitur yang sesuai.
    • Latih model Anda pada set pelatihan Ti
    • Dapatkan skor dari flip saat ini, CVi. Tambahkan skor ini ke daftar yang menyimpan semua skor.
  • Sekarang, daftar Anda memiliki skor setiap lipatan, jadi Anda rata-rata, mendapatkan skor K-lipatan.

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.

Abhishek Divekar
sumber
1
Bisakah Anda memasukkan ringkasan singkat dari isi tautan ini? Kami lebih suka jawaban mandiri, jika tidak mereka bisa sangat rentan terhadap "tautan" jika tautan mengubah lokasi. Atau, kami dapat mengonversikan ini menjadi komentar untuk Anda.
Silverfish
@Silverfish Done
Abhishek Divekar
Jadi di dalam for-loop, seseorang dapat memiliki fitur yang dipilih berbeda untuk lipatan yang berbeda?
stackunderflow
2

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

Frank Harrell
sumber