Ada banyak utas di CrossValidated pada topik pemilihan model dan validasi silang. Berikut ini beberapa di antaranya:
- Validasi silang internal vs eksternal dan pemilihan model
- @ DikranMarsupial ini jawaban atas untuk seleksi Fitur dan cross-validasi
Namun, jawaban atas utas tersebut cukup umum dan sebagian besar menyoroti masalah dengan pendekatan khusus untuk lintas validasi dan pemilihan model.
Untuk membuat hal-hal sekonkret mungkin , katakan misalnya kita bekerja dengan SVM dengan kernel RBF: , dan itu Saya memiliki dataset fitur X dan label y , dan yang saya inginkan
- Temukan nilai terbaik dari model saya ( dan )
- Latih SVM dengan dataset saya (untuk penerapan akhir)
- Perkirakan kesalahan generalisasi dan ketidakpastian (varians) di sekitar kesalahan ini
Untuk melakukannya, saya pribadi akan melakukan pencarian kotak, misalnya saya mencoba setiap kombinasi yang mungkin dari dan . Untuk mempermudah, kita dapat mengasumsikan rentang berikut:
Lebih khusus lagi, menggunakan dataset lengkap saya, saya melakukan hal berikut:
- Untuk setiap pasangan ( , ), saya melakukan iterasi berulang (mis. 100 pengulangan acak) dari validasi silang lipat (misalnya ), pada dataset saya, yaitu saya melatih SVM saya pada lipatan dan mengevaluasi kesalahan di flip kiri, iterasi semua lipatanSecara keseluruhan, saya mengumpulkan 100 x 10 = 1000 kesalahan tes.
- Untuk setiap pasangan ( , ) tersebut, saya menghitung nilai mean dan varians dari 1000 kesalahan pengujian .
Sekarang saya ingin memilih model terbaik (parameter kernel terbaik) yang akan saya gunakan untuk melatih SVM akhir saya pada dataset lengkap. Pemahaman saya adalah bahwa memilih model yang memiliki mean kesalahan terendah dan varians dan σ M akan menjadi pilihan yang tepat, dan bahwa model ini μ M adalah σ M adalah perkiraan terbaik saya tentang bias kesalahan generalisasi dan varians model ketika pelatihan dengan dataset lengkap.
TETAPI, setelah membaca jawaban di utas-utas di atas, saya mendapat kesan bahwa metode ini untuk memilih SVM terbaik untuk penyebaran dan / atau untuk memperkirakan kesalahannya (kinerja generalisasi), cacat, dan bahwa ada cara yang lebih baik untuk memilih SVM terbaik dan melaporkan kesalahannya. Jika demikian, apakah mereka? Saya mencari jawaban yang konkret.
Berpegang teguh pada masalah ini, seberapa spesifik saya bisa memilih model terbaik dan memperkirakan kesalahan generalisasi dengan tepat ?
sumber
Jawaban:
Makalah saya di JMLR membahas pertanyaan persis ini, dan menunjukkan mengapa prosedur yang disarankan dalam pertanyaan (atau setidaknya satu sangat menyukainya) menghasilkan perkiraan kinerja yang bias secara optimis:
Gavin C. Cawley, Nicola LC Talbot, "Pada Over-fitting dalam Pemilihan Model dan Seleksi Selanjutnya Bias dalam Evaluasi Kinerja", Journal of Machine Learning Research, 11 (Jul): 2079−2107, 2010. ( www )
Hal utama yang perlu diingat adalah bahwa validasi silang adalah teknik untuk memperkirakan kinerja generalisasi untuk metode menghasilkan model, bukan model itu sendiri. Jadi jika memilih parameter kernel adalah bagian dari proses pembuatan model, Anda perlu memvalidasi silang proses pemilihan model juga, jika tidak, Anda akan berakhir dengan perkiraan kinerja yang bias secara optimis (seperti yang akan terjadi dengan prosedur yang Anda usulkan).
Asumsikan Anda memiliki fungsi fit_model, yang menggunakan dataset yang terdiri dari atribut X dan respons yang diinginkan Y, dan yang mengembalikan model yang sesuai untuk dataset tersebut, termasuk penyetelan parameter-hiper (dalam hal ini kernel dan parameter regularisasi). Penyetelan parameter-hiper ini dapat dilakukan dengan banyak cara, misalnya meminimalkan kesalahan validasi silang pada X dan T.
Langkah 1 - Paskan model dengan semua data yang tersedia, menggunakan fungsi fit_model. Ini memberi Anda model yang akan Anda gunakan dalam operasi.
Langkah 2 - Evaluasi kinerja. Lakukan validasi silang berulang dengan menggunakan semua data yang tersedia. Di setiap flip, data dipartisi ke dalam set pelatihan dan set tes. Paskan model menggunakan set pelatihan (catat nilai parameter-hiper untuk model yang dipasang) dan evaluasi kinerja pada set uji. Gunakan nilai tengah untuk semua set tes sebagai perkiraan kinerja (dan mungkin lihat juga penyebaran nilai-nilai).
Langkah 3 - Variabilitas pengaturan hiper-parameter - melakukan analisis nilai hiper-parameter yang dikumpulkan pada langkah 3. Namun saya harus menunjukkan bahwa tidak ada yang istimewa tentang hiper-parameter, mereka hanya parameter model yang telah diperkirakan (secara tidak langsung ) dari data. Mereka diperlakukan sebagai parameter hyper daripada parameter untuk kenyamanan komputasi / matematika, tetapi ini tidak harus menjadi kasus.
Masalah dengan menggunakan validasi silang di sini adalah bahwa data pelatihan dan tes bukan sampel independen (karena mereka berbagi data) yang berarti bahwa estimasi varians dari estimasi kinerja dan parameter-hiper cenderung bias (yaitu lebih kecil dari itu untuk sampel data yang benar-benar independen di setiap lipatan). Daripada cross-validasi berulang, saya mungkin akan menggunakan bootstrap sebagai gantinya dan tas model yang dihasilkan jika ini layak secara komputasi.
Poin kuncinya adalah bahwa untuk mendapatkan perkiraan kinerja yang tidak bias, prosedur apa pun yang Anda gunakan untuk menghasilkan model akhir (fit_model) harus diulang secara keseluruhan secara independen di setiap lipatan prosedur validasi silang.
sumber
rather than repeated cross-validation you would go for bootstrapping
- Apa perbedaan sebenarnya? Kedua melibatkan beberapa pengulangan membagi data ke dalamtrain
dantest
kemudian melatih ditrain
dan mengevaluasi ditest
, bukan?Prosedur yang mengoptimalkan hiperparameter ini dan melatih SVM dengan ini juga hanyalah algoritma pembelajaran mesin . Alih-alih hanya mengoptimalkan parameter internal SVM (vektor dukungan) itu juga mengoptimalkan hyperparameters.
Sekarang Anda memiliki dua masalah [yang dapat diselesaikan secara mandiri]:
Bagaimana cara melakukan optimasi / pemilihan model hyperparameter?
Bagaimana cara memperkirakan kesalahan generalisasi dari algoritma pembelajaran mesin?
Baca penyalahgunaan validasi silang (melaporkan kinerja untuk nilai hyperparameter terbaik) untuk memastikan bahwa Anda tidak mencampuradukkannya.
Solusi spesifik (mungkin tidak optimal) untuk masalah konkret pertanyaan Anda:
Di sini,
model
akan menjadi "model terbaik" Anda danloss_CV
"perkiraan yang tepat untuk kesalahan generalisasi" (walaupun bias ke atas, tetapi Anda tidak dapat memiliki kue dan memakannya juga).sumber