Validasi hold-out vs validasi silang


54

Bagi saya, tampaknya validasi tahan tidak berguna. Yaitu, memisahkan dataset asli menjadi dua bagian (pelatihan dan pengujian) dan menggunakan skor pengujian sebagai ukuran generalisasi, agak tidak berguna.

K-fold cross-validation tampaknya memberikan perkiraan yang lebih baik dari generalisasi (karena melatih dan menguji pada setiap titik). Jadi, mengapa kita menggunakan validasi hold-out standar? Atau bahkan membicarakannya?


10
mengapa Anda pikir itu tidak berguna? Anda dapat membaca Elemen-elemen teori belajar Statistik bagian 7 untuk analisis formal pro dan kontra-nya. Secara statistik, k-fold lebih baik, tetapi menggunakan set tes tidak selalu buruk. Secara intuitif, Anda perlu mempertimbangkan bahwa set tes (bila digunakan dengan benar) memang merupakan set data yang belum pernah digunakan sama sekali saat pelatihan. Jadi sangat berguna dalam beberapa hal untuk mengevaluasi model. Juga, k-fold super mahal, jadi bertahan adalah semacam "perkiraan" terhadap apa yang k-fold lakukan (tetapi untuk seseorang dengan daya komputasi rendah).
Charlie Parker

Tentu. Dari perspektif teoritis, K-fold lebih tepat tetapi sedikit lebih mahal secara komputasi. Pertanyaannya adalah: mengapa tidak SELALU melakukan validasi silang K-fold?

2
Saya melihat. Saya berpendapat bahwa alasannya kebanyakan selalu komputasi. K-fold mendekati kesalahan generalisasi dengan lebih baik sehingga dari sudut pandang statistik K-fold adalah metode pilihan yang saya percaya. Hold-out jauh lebih mudah untuk diterapkan DAN tidak memerlukan pelatihan karena banyak model. Dalam praktiknya, pelatihan model bisa sangat mahal.
Charlie Parker

1
Benar - tapi saya pikir argumen "terlalu mahal untuk komputasi" cukup lemah. Hampir sepanjang waktu, kami bertujuan untuk mengembangkan model yang paling akurat. Namun ada paradoks ini di mana banyak percobaan yang dilakukan dalam literatur hanya memiliki satu set validasi hold-out.

1
Pertanyaan - Elemen teori pembelajaran Statistik bagian 7.10.1 berjudul "validasi silang K lipat" tampaknya menunjukkan bahwa menjaga data uji yang sepenuhnya terpisah dari data pelatihan (seperti dalam validasi tahan) adalah ideal, dan validasi k-lipatan hanya kompromi sebagai data banyak kali langka. Saya masih cukup baru dalam statistik, dapatkah Anda menunjukkan bagaimana validasi silang sebenarnya lebih tepat?
numX

Jawaban:


21

Satu-satunya tebakan saya adalah bahwa Anda dapat Tahan dengan tiga jam pengalaman pemrograman; yang lain membutuhkan waktu satu minggu dalam prinsip dan enam bulan dalam praktik.

Pada prinsipnya sederhana, tetapi menulis kode itu membosankan dan menghabiskan waktu. Seperti yang dikatakan Linus Torvalds, "Pemrogram yang buruk mengkhawatirkan kodenya. Pemrogram yang baik khawatir tentang struktur data dan hubungan mereka." Banyak orang yang melakukan statistik adalah programmer yang buruk, bukan karena kesalahan mereka sendiri. Melakukan validasi k-fold cross secara efisien (dan maksud saya, dengan cara yang tidak membuat frustasi untuk debug dan menggunakan lebih dari sekali) dalam R membutuhkan pemahaman yang kabur tentang struktur data, tetapi struktur data umumnya dilompati dalam "intro "ke pemrograman statistik". Ini seperti orang tua yang menggunakan Internet untuk pertama kalinya. Ini benar-benar tidak sulit, hanya butuh setengah jam ekstra untuk mencari tahu pertama kali, tapi ini baru dan itu membuatnya membingungkan, sehingga mudah untuk diabaikan.

Anda memiliki pertanyaan seperti ini: Bagaimana menerapkan validasi terus-out di R . Tidak ada pelanggaran yang ditujukan, apa pun, kepada penanya. Tetapi banyak orang yang tidak melek kode. Fakta bahwa orang melakukan validasi silang sama sekali sudah cukup untuk membuat saya bahagia.

Kedengarannya konyol dan sepele, tetapi ini berasal dari pengalaman pribadi, telah menjadi pria itu dan pernah bekerja dengan banyak orang yang adalah pria itu.


18
Mungkin sebagai seseorang yang mengambil jurusan CS saya memiliki pandangan yang sedikit miring tentang hal ini, tetapi jika Anda dapat menerapkan validasi hold-out dengan benar (yang sudah berarti membagi dataset menjadi 2 bagian dan menggunakan satu untuk pelatihan dan yang lainnya untuk pengujian), Satu-satunya hal yang perlu Anda ubah adalah rasio dari perpecahan dan menempatkan semuanya menjadi satu lingkaran. Sepertinya sulit untuk percaya bahwa ini akan menjadi masalah besar.
Voo

3
@ Vo: di samping itu, dapat memprogram tidak cukup di sini: Anda harus memahami masalah dengan cukup baik untuk dapat menilai perancu mana yang perlu Anda pertanggungjawabkan selama prosedur pemisahan Anda. Lihat misalnya stats.stackexchange.com/questions/20010/… . Saya pikir saya melihat masalah semacam ini lebih sering daripada masalah pengkodean "murni" (walaupun orang tidak pernah tahu: seseorang yang nyaris tidak dapat mengkodekan pemisahan baris dari baris-baris dalam matriks data biasanya juga akan membuat kesalahan tingkat lebih tinggi dari tidak memisahkan. misalnya pada tingkat pasien)
cbeleites mendukung Monica

Perhatikan juga bahwa Anda dapat melakukan pemisahan hold-out yang tepat (mis. Pasien / hari / /) tanpa pemrograman sama sekali dengan memisahkan file yang dihasilkan instrumen pengukuran ...
cbeleites mendukung Monica

5
Kepada para pemilih: perhatikan bahwa saya mengajukan pertanyaan terpisah yang mempertanyakan logika saya. stats.stackexchange.com/q/108345/36229
shadowtalker

1
Saya tidak berpikir jawaban yang menjelaskan perbedaan antara dua metode validasi silang seharusnya menjadi waktu manusia untuk belajar, biasnya tidak masuk akal dan tidak membantu
rgalbo

40

Hold-out sering digunakan identik dengan validasi dengan set tes independen, meskipun ada perbedaan penting antara pemisahan data secara acak dan merancang eksperimen validasi untuk pengujian independen.

Set tes independen dapat digunakan untuk mengukur kinerja generalisasi yang tidak dapat diukur dengan melakukan resampling atau validasi hold-out, misalnya kinerja untuk kasus mendatang yang tidak diketahui (= kasus yang diukur kemudian, setelah pelatihan selesai). Ini penting untuk mengetahui berapa lama model yang sudah ada dapat digunakan untuk data baru (misalkan instrumen melayang). Secara umum, ini dapat digambarkan sebagai pengukuran kinerja ekstrapolasi untuk menentukan batas penerapan.

Skenario lain di mana penundaan benar-benar dapat bermanfaat adalah: sangat mudah untuk memastikan bahwa pelatihan dan data uji dipisahkan dengan benar - jauh lebih mudah daripada melakukan resampling validasi: misalnya

  1. memutuskan pemisahan (mis. lakukan penugasan kasus secara acak)
  2. mengukur
  3. data pengukuran dan referensi kasus pelatihan => pemodelan \ baik pengukuran maupun referensi kasus uji tidak diserahkan kepada orang yang membuat model.
  4. model akhir + pengukuran case yang bertahan => prediksi
  5. bandingkan prediksi dengan referensi untuk kasus-kasus yang ada.

Tergantung pada tingkat pemisahan yang Anda butuhkan, setiap langkah dapat dilakukan oleh orang lain. Sebagai tingkat pertama, tidak menyerahkan data apa pun (bahkan pengukuran) dari kasus uji ke pemodel memungkinkan untuk sangat yakin bahwa tidak ada data uji yang bocor ke dalam proses pemodelan. Pada tingkat kedua, model akhir dan pengukuran test case dapat diserahkan kepada orang lain, dan seterusnya.

Ya, Anda membayarnya dengan efisiensi yang lebih rendah dari perkiraan penunda dibandingkan dengan validasi sampel ulang. Tetapi saya telah melihat banyak makalah di mana saya menduga bahwa validasi resampling tidak memisahkan kasus dengan benar (di bidang saya, kami memiliki banyak data yang dikelompokkan / hierarkis / dikelompokkan).

Saya telah belajar pelajaran saya tentang kebocoran data untuk dilakukan resampling dengan menarik kembali naskah seminggu setelah penyerahan ketika saya mengetahui bahwa saya sebelumnya tidak terdeteksi (dengan menjalankan tes permutasi bersama) kebocoran dalam prosedur pemisahan saya (salah ketik dalam perhitungan indeks).

Kadang-kadang penahanan bisa lebih efisien daripada menemukan seseorang yang bersedia meluangkan waktu untuk memeriksa kode resampling (misalnya untuk data yang dikelompokkan) untuk mendapatkan tingkat kepastian yang sama tentang hasil. Namun, IMHO biasanya tidak efisien untuk melakukan ini sebelum Anda berada di tahap di mana Anda harus mengukur misalnya kinerja masa depan (poin pertama) - dengan kata lain, ketika Anda harus menyiapkan percobaan validasi untuk model yang ada.

OTOH, dalam situasi ukuran sampel kecil, tahan tidak ada pilihan: Anda perlu memegang cukup kasus uji sehingga hasil tes cukup tepat untuk memungkinkan kesimpulan yang diperlukan (ingat: 3 mengoreksi dari 3 kasus uji untuk klasifikasi berarti suatu binomial interval kepercayaan 95% yang berkisar jauh di bawah 50:50 menebak!) Frank Harrell akan menunjuk pada aturan praktis yang setidaknya ca. Diperlukan 100 kasus (uji) untuk mengukur proporsi [seperti fraksi dari kasus yang diprediksi dengan benar] dengan presisi yang berguna.


Pembaruan: ada situasi di mana pemisahan yang tepat sangat sulit untuk dicapai, dan validasi silang menjadi tidak layak. Pertimbangkan masalah dengan sejumlah perancu. Pemisahan itu mudah jika pembaur ini bersarang secara ketat (misalnya penelitian dengan sejumlah pasien memiliki beberapa spesimen dari setiap pasien dan menganalisis sejumlah sel dari masing-masing spesimen): Anda membelah pada level tertinggi dari hirarki pengambilan sampel (berdasarkan pasien) . Tetapi Anda mungkin memiliki perancu independen yang tidak bersarang, misalnya variasi atau varians harian yang disebabkan oleh berbagai eksperimen yang menjalankan tes. Anda kemudian perlu memastikan pemisahan itu independen untuk semuaperancu pada tingkat tertinggi (perancu yang bersarang akan otomatis independen). Menjaga ini sangat sulit jika beberapa perancu hanya diidentifikasi selama penelitian, dan merancang dan melakukan percobaan validasi mungkin lebih efisien daripada berurusan dengan perpecahan yang hampir tidak meninggalkan data baik untuk pelatihan maupun untuk pengujian model pengganti.


6
Saya berharap bisa memberikan lebih dari +1 untuk jawaban yang sangat menyeluruh ini. Saya sangat suka Anda menyebutkan masalah Anda dengan kebocoran data karena secara efektif menggambarkan bahwa mungkin jauh dari sepele untuk mengesampingkan masalah seperti itu, bahkan untuk para ahli. Ini adalah pengecekan realitas yang baik!
Marc Claesen

Apakah Anda tidak mengajukan pertanyaan? Ya, pemisahan itu sulit, karena perancu, tetapi sulit terlepas dari apakah Anda melakukan validasi penahanan tunggal atau validasi silang k-fold, bukan? (Terima kasih atas jawaban yang berwawasan luas!)
Nils von Barth

1
@NilsvonBarth: Saya tidak melihat bagaimana argumen saya melingkar: OP bertanya "mengapa [sama sekali] menggunakan validasi hold-out", dan saya memberikan banyak alasan praktis. Penggunaan statistik yang paling efisien dari sejumlah kasus yang terbatas tidak selalu merupakan sifat paling penting dari desain penelitian. (Walaupun menurut pengalaman saya sering kali demikian, karena jumlah kasus yang sangat terbatas: Saya jauh lebih sering menyarankan untuk CV k-fold berulang / iterated daripada bertahan). Untuk beberapa pembaur, pembelahan fisik dimungkinkan dan mudah - dan cara yang sangat efisien untuk mencegah preview-menyelinap. Siapa yang tahu apakah kita akan menemukan itu dua kali lipat ...
cbeleites mendukung Monica

analisis data statistik buta mungkin diperlukan terhadap terlalu banyak makalah positif palsu di beberapa titik?
cbeleites mendukung Monica

2
@NilsvonBarth: Hati-hati dengan kemandirian penjaminan bertahan: mudah untuk menerapkan penahanan sedemikian rupa (dengan penyimpangan fisik kasus, yaitu benda uji disingkirkan dan hanya diukur setelah pelatihan model selesai), tetapi sering istilah hold-out digunakan untuk apa yang sebenarnya jauh lebih seperti split data acak tunggal - dan kemudian semua kemungkinan membuat kesalahan dalam pemisahan dapat dibuat dengan hold-out juga!
Cbeleites mendukung Monica

8

knnkk

Jadi untuk menjawab pertanyaan:

  1. Mengapa membicarakannya? Secara pedagogis. Penting untuk menganggap validasi Hold-out sebagai kasus khusus - dan hanya kadang-kadang berguna - dari metode lain yang cukup berguna dengan banyak variasi.

  2. nk

nknkn


13
Saya tidak berpikir bahwa ketidaksesuaian sama dengan validasi 2 kali lipat, karena dalam validasi 2 kali lipat Anda akan cocok dengan dua model dan kemudian rata-rata kesalahan di dua set holdout.
Alex

8

Jika pemilihan model & prosedur pemasangan Anda tidak dapat dikodekan karena bersifat subyektif, atau sebagian demikian, —dengan melihat grafik & sejenisnya — validasi penahan mungkin adalah yang terbaik yang dapat Anda lakukan. (Saya kira Anda mungkin bisa menggunakan sesuatu seperti Mechanical Turk di setiap lipatan CV, meskipun saya belum pernah mendengarnya dilakukan.)


6

Hanya ingin menambahkan beberapa pedoman sederhana yang Andrew Ng sebutkan di kelas CS 229 kami di Stanford mengenai cross-validation. Ini adalah praktik yang ia ikuti dalam karyanya sendiri.

mm20

20<m100km

100<m1,000,000(k=5)m>10,000

m1,000,000(k=5)


5

Jawaban singkat:

k=5

  • model yang kompleks
  • hasil akhir yang harus mematuhi batasan validitas

Anda dapat bersantai ini untuk:

  • pelatihan dataset yang sangat besar
  • melatih model-model sederhana
  • membuat prototipe saat waktu menjadi masalah

Beberapa dari Anda menyebutkan, bahwa memprogram ini dalam R mungkin menjadi masalah. Saya sarankan Anda untuk melihat paket "mlr" . Ini membungkus paket yang berbeda dalam antarmuka terpadu, juga menyediakan metode pengujian kinerja dan evaluasi yang benar-benar canggih.

Lihat: http://mlr-org.github.io/mlr-tutorial/release/html/resample/ dan: http://mlr-org.github.io/mlr-tutorial/release/html/performance/ index.htm

Beberapa penjelasan lagi - apa yang sebenarnya dilakukan CV adalah mematahkan bias varians tradeoff:

Sekarang, masalah yang kedua pendekatan mencoba untuk memecahkan adalah untuk memperkirakan kesalahan generalisasi, yang tergantung pada data yang digunakan untuk melatih model.

Holdout memiliki masalah dengan bias dan varians:

Dengan membuat jumlah data yang kami uji menjadi lebih kecil, kami memperkenalkan varians terhadap perkiraan kesalahan generalisasi kami, karena data pengujian mungkin tidak lagi mewakili distribusi yang mendasarinya. Ini sendiri tidak menimbulkan bias, karena dalam ekspektasi kinerja yang diperkirakan akan benar.

Membuat pelatihan lebih kecil namun menimbulkan bias pesimistis, karena distribusi yang mendasarinya tidak terwakili dengan baik dalam data dan model tidak dapat memuat data juga. Membuat set pelatihan yang sangat kecil memperkenalkan varians juga.

Ketika ukuran pelatihan dan set tes menentukan satu sama lain, ini memberi kita tradeoff: bias pesimistis vs varians tinggi.

kk1k

Validasi silang sangat penting untuk pelajar yang lebih kompleks (varians tinggi). Mereka biasanya lebih mahal secara komputasi juga, yang dapat membuat seluruh proses cukup intensif waktu.


3

Semua ini adalah komentar yang bermanfaat. Hanya pertimbangkan satu lagi. Ketika Anda memiliki data yang cukup, menggunakan Hold-Out adalah cara untuk menilai model tertentu (model SVM spesifik, model CART spesifik, dll), sedangkan jika Anda menggunakan prosedur validasi silang lainnya, Anda menilai metodologi (dalam kondisi masalah Anda ) daripada model (metodologi SVM, metodologi CART, dll).

Semoga ini bisa membantu!


3

Pemodelan dengan data serius waktu adalah pengecualian bagi saya. K fold tidak dapat berfungsi dalam beberapa kasus ketika Anda perlu memprediksi masa depan berdasarkan data sebelumnya. Set tes harus menjadi data masa depan, dan Anda tidak akan pernah bisa menyentuhnya dalam fase pelatihan. ex memprediksi penjualan atau pasar saham. Menahan berguna dalam kasus-kasus itu.


Data serius waktu?
nbro

3

Sederhananya; waktu. Validasi silang Anda menjalankan rutinitas pelatihan k kali (yaitu sekali untuk setiap set hold-out). Jika Anda memiliki data besar, maka Anda mungkin perlu berjam-jam atau bahkan berhari-hari untuk melatih model hanya untuk satu set data, sehingga Anda mengalikannya dengan k saat menggunakan validasi silang.

Jadi walaupun cross-validasi adalah metode terbaik, dalam keadaan tertentu itu tidak layak, dan waktu yang dibutuhkan mungkin lebih baik dihabiskan untuk memodelkan data dengan cara yang berbeda, atau mencoba fungsi kerugian yang berbeda untuk mendapatkan model yang lebih baik.

Preferensi pribadi saya adalah untuk mengambil data validasi dari seluruh kumpulan data, jadi daripada mengambil 10% potongan tunggal dari kepala atau ekor data, saya mengambil 2% dari 5 poin dalam kumpulan data. Itu membuat data validasi sedikit lebih mewakili data secara keseluruhan.


Meskipun ini adalah pertanyaan lama dan jawaban baru, saya memilih ini karena ini menantang pernyataan tidak berdasar bahwa "K-fold lebih tepat tetapi sedikit lebih mahal secara komputasional", yang jawaban lain diabaikan atau dilewati terlalu cepat.
The Laconic

0

Perlu dicatat bahwa tidak selalu mungkin untuk menerapkan validasi silang. Pertimbangkan kumpulan data yang tergantung waktu sehingga Anda ingin menggunakan data historis untuk melatih model prediksi untuk perilaku di masa mendatang. Dalam hal ini, Anda harus menerapkan validasi hold-out.


2
Dalam hal ini, Anda harus melakukan validasi maju.
Neil G
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.