Saya baru-baru ini banyak membaca di situs ini (@Aniko, @Dikran Marsupial, @Erik) dan di tempat lain tentang masalah overfitting yang terjadi dengan validasi silang - (Smialowski dkk 2010 Bioinformatika, Hastie, Elemen pembelajaran statistik). Sarannya adalah bahwa setiap pemilihan fitur yang diawasi (menggunakan korelasi dengan label kelas) dilakukan di luar estimasi kinerja model menggunakan validasi silang (atau metode estimasi model lainnya seperti bootstrap) dapat mengakibatkan overfitting.
Ini tampaknya tidak intuitif bagi saya - tentu saja jika Anda memilih set fitur dan kemudian mengevaluasi model Anda hanya menggunakan fitur yang dipilih menggunakan validasi silang, maka Anda mendapatkan estimasi yang tidak bias dari kinerja model umum pada fitur-fitur tersebut (ini mengasumsikan sampel yang diteliti adalah representatif populasi)?
Dengan prosedur ini seseorang tentu saja tidak dapat mengklaim set fitur optimal tetapi dapatkah seseorang melaporkan kinerja fitur yang dipilih pada data yang tidak terlihat sebagai valid?
Saya menerima bahwa memilih fitur berdasarkan seluruh set data dapat muncul kembali dalam beberapa kebocoran data antara set tes dan kereta. Tetapi jika set fitur statis setelah pemilihan awal, dan tidak ada penyetelan lain yang dilakukan, tentu valid untuk melaporkan metrik kinerja yang divalidasi silang?
Dalam kasus saya, saya memiliki 56 fitur dan 259 kasus dan #cases> #features. Fitur tersebut berasal dari data sensor.
Mohon maaf jika pertanyaan saya tampaknya turunan tetapi ini sepertinya poin penting untuk diklarifikasi.
Sunting: Pada penerapan pemilihan fitur dalam validasi silang pada kumpulan data yang dirinci di atas (berkat jawaban di bawah), saya dapat mengonfirmasi bahwa memilih fitur sebelum validasi silang dalam rangkaian data ini memperkenalkan signifikanbias. Bias / overfitting ini paling baik ketika melakukannya untuk formulasi 3-kelas, dibandingkan dengan formulasi 2-kelas. Saya pikir fakta bahwa saya menggunakan regresi bertahap untuk pemilihan fitur meningkatkan overfitting ini; untuk tujuan perbandingan, pada set data yang berbeda namun terkait I membandingkan rutin pemilihan fitur forward sequential forward yang dilakukan sebelum validasi silang terhadap hasil yang sebelumnya saya dapatkan dengan pemilihan fitur dalam CV. Hasil antara kedua metode tidak berbeda secara dramatis. Ini mungkin berarti bahwa regresi bertahap lebih rentan terhadap overfitting daripada FS berurutan atau mungkin merupakan kekhasan dari kumpulan data ini.
sumber
Jawaban:
Jika Anda melakukan pemilihan fitur pada semua data dan kemudian melakukan validasi silang, maka data uji di setiap lipatan prosedur validasi silang juga digunakan untuk memilih fitur dan inilah yang bias analisis kinerja.
Pertimbangkan contoh ini. Kami menghasilkan beberapa data target dengan membalik koin 10 kali dan merekam apakah itu jatuh sebagai kepala atau ekor. Selanjutnya kita menghasilkan 20 fitur dengan membalik koin 10 kali untuk setiap fitur dan menuliskan apa yang kita dapatkan. Kami kemudian melakukan pemilihan fitur dengan memilih fitur yang sesuai dengan data target semaksimal mungkin dan menggunakannya sebagai prediksi kami. Jika kami kemudian melakukan validasi silang, kami akan mendapatkan tingkat kesalahan yang diharapkan sedikit lebih rendah dari 0,5. Ini karena kami telah memilih fitur berdasarkan korelasi pada set pelatihan dan set tes di setiap lipatan prosedur validasi silang. Namun tingkat kesalahan sebenarnya adalah 0,5 karena data target hanya acak. Jika Anda melakukan pemilihan fitur secara independen dalam setiap lipatan validasi silang, nilai yang diharapkan dari tingkat kesalahan adalah 0.
Gagasan utamanya adalah bahwa validasi silang adalah cara memperkirakan kinerja generalisasi dari suatu proses untuk membangun model, jadi Anda perlu mengulangi seluruh proses di setiap lipatan. Kalau tidak, Anda akan berakhir dengan estimasi yang bias, atau estimasi yang kurang dari varian estimasi (atau keduanya).
HTH
Berikut adalah beberapa kode MATLAB yang melakukan simulasi Monte-Carlo dari pengaturan ini, dengan 56 fitur dan 259 kasus, untuk mencocokkan contoh Anda, output yang diberikan adalah:
Penaksir yang bias: erate = 0,429210 (0,397683 - 0,451737)
Estimator tidak berdasar: erate = 0,499689 (0,397683 - 0,590734)
Estimator yang bias adalah yang di mana pemilihan fitur dilakukan sebelum validasi silang, estimator yang tidak bias adalah yang di mana pemilihan fitur dilakukan secara independen di setiap lipatan validasi silang. Ini menunjukkan bahwa bias bisa sangat parah dalam kasus ini, tergantung pada sifat tugas pembelajaran.
sumber
Untuk menambahkan deskripsi masalah yang sedikit berbeda dan lebih umum:
Jika Anda melakukan segala jenis pra-pemrosesan yang didorong data , mis
dan ingin menggunakan validasi silang / out-of-bootstrap (/ tahan) untuk memperkirakan kinerja model akhir , pra-pemrosesan yang didorong data perlu dilakukan pada data pelatihan pengganti, yaitu secara terpisah untuk setiap model pengganti.
Jika pra-pemrosesan yang digerakkan oleh data adalah tipe 1., ini mengarah pada validasi silang "ganda" atau "bersarang": estimasi parameter dilakukan dalam validasi silang menggunakan hanya set pelatihan validasi silang "luar". ElemStatLearn memiliki ilustrasi ( https://web.stanford.edu/~hastie/Papers/ESLII.pdf Halaman 222 dari cetak 5).
Anda dapat mengatakan bahwa pra-pemrosesan benar-benar merupakan bagian dari pembangunan model. hanya pra-pemrosesan yang dilakukan
dapat dikeluarkan dari loop validasi untuk menyimpan perhitungan.
Jadi sebaliknya: jika model Anda benar-benar dibangun oleh pengetahuan eksternal ke set data tertentu (misalnya Anda memutuskan sebelumnya dengan pengetahuan ahli Anda bahwa saluran pengukuran 63 - 79 tidak mungkin membantu menyelesaikan masalah, Anda tentu saja dapat mengecualikan saluran ini , membangun model dan cross-memvalidasi. hal yang sama, jika Anda melakukan regresi PLS dan memutuskan dengan pengalaman Anda bahwa 3 variabel laten adalah pilihan yang wajar (tapi jangan tidak bermain-main apakah 2 atau 5 lv memberikan hasil yang lebih baik) maka Anda dapat lanjutkan dengan validasi out-of-bootstrap / cross normal.
sumber
Mari kita coba membuatnya sedikit intuitif. Pertimbangkan contoh ini: Anda memiliki prediksi biner dan dua biner. Anda menginginkan model dengan hanya satu prediktor. Kedua prediktor memiliki peluang untuk mengatakan 95% sama dengan dependen dan peluang 5% tidak setuju dengan dependen.
Sekarang, secara kebetulan pada data Anda, satu prediktor sama dengan ketergantungan pada seluruh data dalam 97% waktu dan yang lain hanya pada 93% waktu. Anda akan memilih prediktor dengan 97% dan membangun model Anda. Di setiap lipatan validasi silang Anda akan memiliki model dependen = prediktor, karena hampir selalu benar. Oleh karena itu Anda akan mendapatkan prediksi kinerja lintas 97%.
Sekarang, bisa dibilang, ok itu cuma sial. Tetapi jika prediktor dibuat seperti di atas maka Anda memiliki peluang 75% dari setidaknya satu dari mereka memiliki akurasi> 95% pada seluruh kumpulan data dan itu adalah yang akan Anda pilih. Jadi, Anda memiliki peluang 75% untuk melebih-lebihkan kinerja.
Dalam praktiknya, sama sekali tidak sepele untuk memperkirakan efeknya. Sangat mungkin bahwa pemilihan fitur Anda akan memilih fitur yang sama di setiap lipatan seolah-olah Anda melakukannya pada seluruh kumpulan data dan kemudian tidak akan ada bias. Efeknya juga menjadi lebih kecil jika Anda memiliki lebih banyak sampel tetapi fitur. Mungkin bermanfaat untuk menggunakan kedua cara dengan data Anda dan melihat bagaimana hasilnya berbeda.
Anda juga dapat menyisihkan sejumlah data (katakanlah 20%), gunakan cara Anda dan cara yang benar untuk mendapatkan perkiraan kinerja dengan memvalidasi silang pada 80% dan melihat prediksi kinerja mana yang terbukti lebih akurat ketika Anda mentransfer model Anda ke 20 % dari data yang disisihkan. Perhatikan bahwa agar ini berfungsi pemilihan fitur Anda sebelum CV juga harus dilakukan hanya pada 80% dari data. Jika tidak, ini tidak akan mensimulasikan transfer model Anda ke data di luar sampel Anda.
sumber