Bagaimana saya bisa membantu memastikan data pengujian tidak bocor ke dalam data pelatihan?

60

Misalkan kita memiliki seseorang yang membangun model prediktif, tetapi seseorang belum tentu berpengalaman dalam prinsip-prinsip statistik atau pembelajaran mesin yang tepat. Mungkin kita membantu orang itu saat mereka sedang belajar, atau mungkin orang itu menggunakan semacam paket perangkat lunak yang membutuhkan pengetahuan minimal untuk digunakan.

Sekarang orang ini mungkin sangat mengenali bahwa tes yang sebenarnya datang dari akurasi (atau apa pun metrik lainnya) pada data out-of-sample . Namun, kekhawatiran saya adalah bahwa ada banyak kehalusan di sana untuk dikhawatirkan. Dalam kasus sederhana, mereka membangun model mereka dan mengevaluasinya berdasarkan data pelatihan dan mengevaluasinya pada data pengujian yang diadakan. Sayangnya kadang-kadang bisa terlalu mudah pada saat itu untuk kembali dan mengubah beberapa parameter pemodelan dan memeriksa hasilnya pada data "pengujian" yang sama. Pada titik ini, data tidak lagi benar sebagai data out-of-sample, dan overfitting dapat menjadi masalah.

Salah satu cara potensial untuk menyelesaikan masalah ini adalah dengan menyarankan membuat banyak dataset yang tidak sampel sehingga setiap dataset pengujian dapat dibuang setelah digunakan dan tidak digunakan kembali sama sekali. Ini membutuhkan banyak manajemen data, terutama pemisahan harus dilakukan sebelum analisis (jadi Anda perlu tahu berapa banyak pemisahan sebelumnya).

Mungkin pendekatan yang lebih konvensional adalah validasi k-fold cross. Namun, dalam beberapa hal kehilangan perbedaan antara dataset "pelatihan" dan "pengujian" yang menurut saya dapat berguna, terutama bagi mereka yang masih belajar. Saya juga tidak yakin ini masuk akal untuk semua jenis model prediksi.

Apakah ada cara yang saya abaikan untuk membantu mengatasi masalah overfitting dan pengujian kebocoran sementara masih agak jelas bagi pengguna yang tidak berpengalaman?

Michael McGowan
sumber
Michael, saya menutup utas duplikat dari situs ML dan menggabungkan jawaban di sini. Silakan mengedit pertanyaan ini untuk mencerminkan setiap perubahan yang ingin Anda buat - Saya tidak ingin melakukan itu karena takut secara tidak sengaja mengubah makna Anda.
whuber
Pertanyaan ini sudah tua dan memiliki jawaban yang dapat diterima, tetapi saya tidak dapat keluar dari pikiran saya bahwa premis awal tampaknya bertentangan. Jika ini tentang latihan belajar, maka cara terbaik untuk mendekati itu adalah membiarkan mereka gagal dan membuat model pakaian yang kemudian tidak dapat diprediksi dengan baik. (Mungkin menyimpan setumpuk data rahasia yang Anda tunjukkan pada mereka kesalahan dalam caranya.) Tapi itu juga terdengar seperti Anda membuat orang-orang yang tidak berkualitas membuat model yang akan ditanggapi dengan serius oleh seseorang dan ditindaklanjuti dan Anda berusaha meminimalkan kerusakan. agak jauh. Ada BANYAK kehalusan, seperti yang Anda katakan.
Wayne

Jawaban:

50

Anda benar, ini adalah masalah signifikan dalam pembelajaran mesin / pemodelan statistik. Pada dasarnya satu-satunya cara untuk benar-benar menyelesaikan masalah ini adalah dengan mempertahankan set tes independen dan tetap bertahan sampai studi selesai dan menggunakannya untuk validasi akhir.

Namun, orang akan melihat hasil pada set tes dan kemudian mengubah model mereka; namun ini tidak serta merta menghasilkan peningkatan kinerja generalisasi karena perbedaan kinerja model yang berbeda mungkin sebagian besar disebabkan oleh sampel data uji tertentu yang kami miliki. Dalam hal ini, dalam menentukan pilihan, kami secara efektif mengatasi kesalahan pengujian.

Cara untuk membatasi ini adalah dengan membuat varians dari kesalahan tes sekecil mungkin (yaitu variabilitas dalam kesalahan tes kita akan melihat apakah kita menggunakan sampel data yang berbeda sebagai set tes, yang diambil dari distribusi dasar yang sama). Ini paling mudah dicapai dengan menggunakan set uji besar jika memungkinkan, atau mis. Bootstrap atau validasi silang jika tidak banyak data tersedia.

Saya telah menemukan bahwa jenis yang terlalu pas dalam pemilihan model ini jauh lebih merepotkan daripada yang umumnya dihargai, terutama yang berkaitan dengan estimasi kinerja, lihat

GC Cawley dan NLC Talbot, Over-fitting dalam pemilihan model dan bias seleksi selanjutnya dalam evaluasi kinerja, Journal of Machine Learning Research, 2010. Penelitian, vol. 11, hlm. 2079-2107, Juli 2010 (www)

Masalah semacam ini terutama mempengaruhi penggunaan dataset benchmark, yang telah digunakan dalam banyak studi, dan setiap studi baru secara implisit dipengaruhi oleh hasil studi sebelumnya, sehingga kinerja yang diamati cenderung menjadi perkiraan optimis yang berlebihan dari kenyataan. kinerja metode. Cara saya mencoba menyiasatinya adalah dengan melihat banyak dataset (jadi metode ini tidak disetel ke satu dataset tertentu) dan juga menggunakan beberapa uji acak / pelatihan split untuk estimasi kinerja (untuk mengurangi varian estimasi). Namun hasilnya masih perlu peringatan bahwa tolok ukur ini telah over-fit.

Contoh lain di mana hal ini terjadi adalah dalam kompetisi pembelajaran mesin dengan papan pimpinan berdasarkan pada set validasi. Tak pelak beberapa pesaing terus mengutak-atik model mereka untuk semakin naik papan pemimpin, tetapi kemudian berakhir di bagian bawah peringkat akhir. Alasan untuk ini adalah bahwa beberapa pilihan mereka memiliki over-fitting set validasi (secara efektif mempelajari variasi acak dalam set validasi kecil).

Jika Anda tidak dapat menyimpan set tes murni secara statistik, maka saya khawatir dua pilihan terbaik adalah (i) mengumpulkan beberapa data baru untuk membuat set tes murni secara statistik atau (ii) membuat peringatan bahwa model baru didasarkan pada pilihan yang dibuat setelah mengamati kesalahan set tes, sehingga estimasi kinerja cenderung memiliki bias optimis.

Dikran Marsupial
sumber
1
+1 Saya terkesan dengan seberapa baik jawaban ini berdasarkan pengalaman dan seberapa efektif jawaban itu untuk pertanyaan.
whuber
3
Cheers whuber, ini telah menjadi topik penelitian utama saya selama beberapa tahun, dan saya telah menemukan bahwa banyak prosedur pemilihan model yang banyak digunakan dalam pembelajaran mesin sangat rapuh, dan semakin teliti mereka dievaluasi, semakin kurang baik mereka tampaknya bekerja. Tidak akan mengejutkan saya bahwa banyak metode yang digunakan dalam pembelajaran mesin tidak bekerja lebih baik daripada metode yang lebih sederhana, hanya karena prosedur pemilihan model yang bias digunakan selama evaluasi kinerja. Pertanyaannya adalah pertanyaan yang sangat bagus, penting untuk tidak menjadi bagian dari prosedur pemilihan model sendiri dengan bermain-main!
Dikran Marsupial
Sangat menarik. (Saya juga mengangkat pertanyaan itu sendiri karena balasan Anda membuat saya menghargainya dengan lebih baik.)
whuber
2
(+1) Respons yang bagus. Penggunaan beberapa pengklasifikasi pada dataset yang sama yang menghasilkan pengukuran akurasi uji yang terlalu optimis telah dibahas dalam pemilihan pengklasifikasi optimal dan bias negatif dalam estimasi tingkat kesalahan: studi empiris pada prediksi dimensi tinggi , BMC MRM 2009, 9:85 (dengan beberapa slide PDF di sini ), dengan diskusi lain dalam beberapa aturan bias dalam perbandingan aturan klasifikasi (Yousefi et al., Bioinformatika 2011, 27 (12): 1675).
chl
Terima kasih atas tautannya ke surat kabar, mereka terlihat menarik.
Dikran Marsupial
15

Salah satu cara untuk memastikan ini adalah memastikan Anda telah membuat kode semua hal yang Anda lakukan agar sesuai dengan model, bahkan "bermain-main". Dengan cara ini, ketika Anda menjalankan proses berulang kali, katakan melalui validasi silang, Anda menjaga hal-hal yang konsisten antara berjalan. Ini memastikan bahwa semua sumber variasi potensial ditangkap oleh proses validasi silang.

Hal lain yang sangat penting adalah untuk memastikan bahwa Anda memiliki sampel yang representatif, di kedua set data. Jika kumpulan data Anda tidak mewakili jenis data yang Anda harapkan akan digunakan untuk memprediksi, maka tidak banyak yang dapat Anda lakukan. Semua pemodelan bertumpu pada asumsi bahwa "induksi" bekerja - hal-hal yang belum kita amati berperilaku seperti hal-hal yang telah kita amati.

Sebagai aturan umum, menjauhlah dari prosedur pemasangan model rumit kecuali (i) Anda tahu apa yang Anda lakukan, dan (ii) Anda telah mencoba metode yang lebih sederhana, dan menemukan bahwa mereka tidak bekerja, dan bagaimana metode kompleks memperbaiki masalah dengan metode sederhana. "Sederhana" dan "kompleks" dimaksudkan dalam arti "sederhana" atau "kompleks" bagi orang yang melakukan pemasangan. Alasan mengapa hal ini sangat penting adalah memungkinkan Anda untuk menerapkan apa yang saya suka sebut "tes mengendus" pada hasilnya. Apakah hasilnya terlihat benar? Anda tidak dapat "mencium" hasil dari prosedur yang tidak Anda mengerti.

CATATAN: bagian berikutnya, jawaban saya yang agak panjang didasarkan pada pengalaman saya, yang ada di area , dengan mungkin besar. Saya hampir yakin bahwa apa yang berikut di bawah ini tidak akan berlaku untuk atau kasusN>>p p Np N<p

Ketika Anda memiliki sampel besar, perbedaan antara menggunakan dan tidak menggunakan pengamatan yang diberikan sangat kecil, asalkan pemodelan Anda tidak terlalu "lokal". Ini karena pengaruh titik data yang diberikan umumnya urutan . Jadi dalam set data besar, residu yang Anda dapatkan dari "bertahan" pada set data uji pada dasarnya sama dengan residu yang Anda dapatkan dari menggunakannya dalam set data pelatihan. Anda dapat menunjukkan ini menggunakan kuadrat terkecil biasa. Sisa yang Anda dapatkan dari mengecualikan observasi ke- (yaitu apa kesalahan set tes akan jika kita menempatkan pengamatan di set tes) adalah , di mana adalah sisa pelatihan, dan1Nieitest=(1hii)1eitraineitrainhiiadalah leverage dari titik data ke- . Sekarang kita memiliki , di mana adalah jumlah variabel dalam regresi. Sekarang jika , maka sangat sulit untuk setiap menjadi cukup besar untuk membuat perbedaan yang cukup besar antara set tes dan kesalahan set pelatihan. Kita dapat mengambil contoh yang disederhanakan, misalkan (mencegat dan variabel), desain matriks adalah (baik set pelatihan dan pengujian), dan leverageiihii=ppN>>phiip=21N×pX

hii=xiT(XTX)1xi=1Nsx2(1xi)(x2¯x¯x¯1)(1xi)=1+x~i2N

Di mana , , dan . Akhirnya, adalah variabel prediktor standar, dan mengukur berapa banyak standar deviasi dari mean. Jadi, kita tahu dari awal bahwa kesalahan set tes akan jauh lebih besar daripada kesalahan set pelatihan untuk pengamatan "di ujung" set pelatihan. Tapi ini pada dasarnya adalah masalah representatif lagi - pengamatan "di ujung" kurang representatif dari pengamatan "di tengah". Selain itu, ini untuk memesan . Jadi jika Anda memiliki pengamatan, bahkan jikax¯=N1ixix2¯=N1ixi2sx2=x2¯x¯2x~i=xix¯sxxi1N100x~i=5 (pencilan dalam ruang x oleh sebagian besar definisi), ini berarti , dan kesalahan pengujian oleh faktor hanya . Jika Anda memiliki kumpulan data besar, katakanlah , itu bahkan lebih kecil, , yang kurang dari . Bahkan, untuk pengamatan , Anda akan memerlukan pengamatan untuk membuat bawah perkiraan kesalahan set tes, menggunakan kesalahan set pelatihan.hii=26100126100=7410010000126100001%10000x~=5025%

Jadi untuk set data besar, menggunakan set tes tidak hanya tidak efisien, juga tidak perlu, selama . Ini berlaku untuk OLS dan juga kira-kira berlaku untuk GLM (detailnya berbeda untuk GLM, tetapi kesimpulan umumnya sama). Dalam lebih dari dimensi, "pencilan" didefinisikan oleh pengamatan dengan skor "komponen utama" yang besar. Ini dapat ditunjukkan dengan menulis Di mana adalah matriks vektor eigen (ortogonal) untuk , dengan matriks nilai eigen . Kita mendapatkan manaN>>p2hii=xiTEET(XTX)1EETxiEXTXΛhii=ziTΛ1zi=j=1pzji2Λjjzi=ETxiadalah skor komponen utama untuk .xi

Jika set pengujian Anda memiliki observasi , Anda mendapatkan versi matriks , di mana dan adalah baris-baris dari matriks desain dalam set tes. Jadi, untuk regresi OLS, Anda sudah tahu apa kesalahan "set tes" untuk semua kemungkinan pemisahan data ke dalam set pelatihan dan pengujian. Dalam hal ini ( ), tidak perlu membagi data sama sekali. Anda dapat melaporkan kesalahan set uji "kasus terbaik" dan "kasus terburuk" dari hampir semua ukuran tanpa benar-benar harus membagi data. Ini dapat menghemat banyak waktu dan sumber daya PC.ke{k}test=(IkH{k})1e{k}trainH{k}=X{k}(XTX)1X{k}TX{k}N>>p

Pada dasarnya, semua ini mengurangi penggunaan hukuman, untuk menjelaskan perbedaan antara kesalahan pelatihan dan pengujian, seperti BIC atau AIC. Ini secara efektif mencapai hasil yang sama seperti apa yang dilakukan dengan set tes, namun Anda tidak dipaksa untuk membuang informasi yang berpotensi berguna. Dengan BIC, Anda mendekati bukti untuk model, yang terlihat secara matematis seperti:

p(D|MiI)=p(y1y2yN|MiI)

Perhatikan bahwa dalam prosedur ini, kami tidak dapat memperkirakan parameter internal apa pun - setiap model harus ditentukan sepenuhnya atau memiliki parameter internal yang terintegrasi. Namun, kita dapat membuat ini tampak seperti validasi silang (menggunakan fungsi kerugian spesifik) dengan berulang kali menggunakan aturan produk, dan kemudian mengambil log hasilnya:Mi

p(D|MiI)=p(y1|MiI)p(y2yN|y1MiI)
=p(y1|MiI)p(y2|y1MiI)p(y3yN|y1y2MiI)
==i=1Np(yi|y1yi1MiI)
log[p(D|MiI)]=i=1Nlog[p(yi|y1yi1MiI)]

Ini menunjukkan bentuk validasi silang, tetapi di mana set pelatihan terus diperbarui, satu pengamatan pada satu waktu dari set tes - mirip dengan Filter Kalman. Kami memprediksi pengamatan selanjutnya dari set tes menggunakan set pelatihan saat ini, mengukur penyimpangan dari nilai yang diamati menggunakan log-kemungkinan bersyarat, dan kemudian memperbarui set pelatihan untuk memasukkan pengamatan baru. Tetapi perhatikan bahwa prosedur ini sepenuhnya mencerna semua data yang tersedia, sementara pada saat yang sama memastikan bahwa setiap pengamatan diuji sebagai kasus "out-of-sample". Ini juga tidak berubah, dalam hal apa pun yang Anda sebut "observasi 1" atau "observasi 10"; hasilnya sama (perhitungan mungkin lebih mudah untuk beberapa permutasi daripada yang lain). Fungsi kerugian juga "adaptif" dalam hal itu jika kita mendefinisikan L i iLi=log[p(yi|y1yi1MiI)] , maka ketajaman tergantung pada , karena fungsi kerugian terus diperbarui dengan data baru.Lii

Saya akan menyarankan bahwa menilai model prediksi dengan cara ini akan bekerja dengan baik.

probabilityislogic
sumber
4
+1 - saran bagus dan diskusi menarik tentang leverage (untuk kumpulan data besar). Saya cenderung menggunakan dataset yang kecil, di mana over-fitting mungkin terjadi, dan dalam situasi seperti itu seringkali sangat mudah untuk menyesuaikan kemungkinan marjinal ("bukti"), dan berakhir dengan model yang lebih buruk daripada yang Anda mulai. Saya menduga AIC dan BIC juga "rapuh". Pada dasarnya optimasi adalah akar dari semua kejahatan dalam statistik, karena setiap pilihan yang Anda buat atau parameter yang Anda sesuaikan berdasarkan sampel terbatas memperkenalkan kemungkinan over-fitting. Peminggiran jauh lebih aman, tetapi pada umumnya mahal secara komputasi.
Dikran Marsupial
2
+1 - terutama pada paragraf ketiga (gunakan metode sederhana dulu). Mengingatkan pada aturan Pareto-Rule yang baik. Jika pelajar mesin akan mengingatnya sebelum mereka mempublikasikan upaya mereka yang tidak memadai untuk membuktikan keunggulan algoritma yang baru mereka
hasilkan
8

Saya kira satu-satunya cara untuk menjamin ini adalah orang lain memiliki data pengujian . Dalam hubungan klien-konsultan ini dapat dikelola dengan cukup mudah: klien memberikan konsultan pelatihan yang ditetapkan untuk membangun model, dan dalam pelatihan ini konsultan dapat membagi data dengan cara apa pun yang diperlukan untuk memastikan bahwa overfitting tidak terjadi; selanjutnya model diberikan kembali ke klien untuk digunakan pada data pengujian mereka.

Untuk seorang peneliti perorangan, masuk akal bahwa karena itu praktik terbaik adalah meniru pengaturan ini. Ini berarti memberikan beberapa data untuk diuji, setelah semua pemilihan model dilakukan. Sayangnya, seperti yang Anda katakan, ini tidak dipraktikkan oleh banyak orang, dan itu bahkan terjadi pada orang - orang yang seharusnya lebih tahu!

Namun pada akhirnya itu tergantung pada apa model yang digunakan. Jika Anda hanya tertarik pada prediksi pada dataset tunggal itu, maka mungkin Anda bisa menyesuaikan semua yang Anda suka? Namun jika Anda mencoba untuk mempromosikan model Anda sebagai model yang umum, atau menggunakan model tersebut dalam beberapa aplikasi dunia nyata, maka tentu saja ini sangat penting.

Ada masalah sampingan yang saya pikir harus saya sebutkan, yaitu bahwa bahkan jika Anda mengikuti semua prosedur dengan benar, Anda masih dapat berakhir dengan model yang dilengkapi berlebihan, karena data tidak benar-benar iid . Misalnya, jika ada korelasi temporal dalam data, maka jika Anda mengambil semua data pelatihan Anda dari waktu 1-3, dan menguji pada waktu 4, maka Anda mungkin menemukan bahwa kesalahan prediksi lebih besar dari yang diharapkan. Atau bisa jadi ada artefak khusus eksperimen, seperti perangkat pengukuran yang digunakan, atau kumpulan subjek dalam eksperimen manusia, yang menyebabkan generalisasi model menjadi lebih buruk dari yang diharapkan.

tdc
sumber
Ya, saya sadar bahwa sangat sulit untuk membuat dataset yang benar-benar out-of-sample karena mudah untuk secara tidak sengaja berakhir dengan korelasi temporal dan yang tidak.
Michael McGowan
1
Beberapa perusahaan melakukan ini sebagai kebijakan, diterapkan misalnya dengan memiliki viewizin basis data yang ditetapkan di mana beberapa tim uji-data-privasi dan yang lain buta data uji.
ijoseph
6

Ini adalah pertanyaan yang sangat bagus dan masalah yang sangat halus. Tentu saja ada kesalahan niat buruk, yang berasal dari seseorang yang mencoba menipu Anda. Tetapi ada pertanyaan yang lebih dalam tentang bagaimana menghindari kebocoran yang tidak disengaja dan menghindari kesalahan yang jujur.

Biarkan saya daftar beberapa praktik baik operasional. Mereka semua berasal dari kesalahan jujur ​​yang saya buat di beberapa titik:

  • Pisahkan data Anda menjadi tiga kelompok: latih, validasi, dan uji.
  • Memahami pengaturan masalah untuk dapat berdebat apa yang masuk akal dan apa yang tidak. Memahami masalahnya, sering kali kesalahpahaman yang halus tentang apa yang diwakili data dapat menyebabkan kebocoran. Misalnya, sementara tidak ada yang akan melatih dan menguji pada frame yang sama dari satu video, itu lebih halus ketika dua frame dari video yang sama jatuh dalam lipatan yang berbeda, dua frame dari video yang sama mungkin berbagi individu yang sama pencahayaan yang sama dan seterusnya .
  • Berhati-hatilah dengan prosedur validasi silang yang ditulis sebelumnya. Apalagi dengan yang tidak ditulis oleh Anda (LIBSVM adalah pelaku besar di sini).
  • Ulangi setiap percobaan setidaknya dua kali sebelum melaporkan apa pun, meskipun melaporkan ke teman kantor Anda. Kontrol versi adalah teman Anda, sebelum menjalankan percobaan, komit dan tulis versi kode apa yang Anda jalankan.
  • Berhati-hatilah saat menormalkan data Anda. Sering kali hal ini membuat Anda berpikir Anda akan memiliki dataset lengkap yang ingin Anda uji pada waktu yang sama, yang lagi-lagi seringkali tidak realistis.
carlosdc
sumber
Ada pertanyaan tentang set pelatihan / evaluasi dan saya memberikan tinjauan teoretis tentang itu di machinelearning.stackexchange.com/a/196/114 - menjelaskan ketidaktertarikan stratifikasi, validasi k-fold cross, dan eksperimen berulang. Bagi pikiran saya yang tidak berpendidikan, metode-metode itu sepenuhnya menjawab pertanyaan di atas, dan sisanya hanyalah "masalah guru". Juga, semua praktik dalam daftar Anda tampaknya memperbaiki "kesalahan yang ceroboh, tidak dapat diterima" dan saya tidak melihat ada seluk-beluk di sana. Saya sangat ingin memahami apa yang saya lewatkan - dapatkah Anda berkomentar?
andreister
Saya setuju bahwa mereka semua berasal dari kecerobohan. Saya juga menyebutkan bahwa mereka tidak teoretis sama sekali (setelah mengatakan bahwa mereka operasional). Saya telah mengedit posting saya sedikit.
carlosdc
5

Banyak poin penting telah dibahas dalam jawaban luar biasa yang sudah diberikan.

Akhir-akhir ini, saya telah mengembangkan daftar periksa pribadi ini untuk kemandirian statistik data uji:

  • Membagi data pada tingkat hierarki data tertinggi (misalnya pemisahan berdasarkan pasien)
  • Membagi juga secara independen untuk pembaur yang diketahui atau diduga, seperti variasi harian dalam instrumen, dll.
  • (DoE harus mengurus urutan pengukuran acak **)
  • Semua langkah perhitungan yang dimulai dengan langkah pertama (biasanya pra-pemrosesan) yang melibatkan lebih dari satu pasien * perlu diperbaiki untuk setiap model pengganti dalam resampling validasi. Untuk valdiation set tes bertahan / independen, pasien tes harus dipisahkan sebelum langkah ini.
    • Ini terlepas dari apakah perhitungannya disebut preprocessing atau dianggap sebagai bagian dari model aktual.
    • Penyebab umum: pemusatan rata-rata, penskalaan varian (biasanya hanya pengaruh ringan), pengurangan dimensionalitas seperti PCA atau PLS (dapat menyebabkan bias berat, mis. Meremehkan tidak ada kesalahan dengan urutan besarnya)
  • Segala jenis optimasi berdasarkan data atau pemilihan model memerlukan pengujian (luar) lainnya untuk memvalidasi model final secara independen.
  • Ada beberapa jenis kinerja generalisasi yang hanya dapat diukur dengan set tes independen tertentu, misalnya bagaimana kinerja prediktif memburuk untuk kasus-kasus yang diukur di masa depan (saya tidak berurusan dengan peramalan time series, hanya dengan penyimpangan instrumen). Tetapi ini membutuhkan studi validasi yang dirancang dengan baik.
  • Ada tipe lain dari kebocoran data di bidang saya: kami melakukan spektroskopi jaringan biologis yang diselesaikan secara spasial. Pelabelan referensi dari spektrum uji perlu dibutakan terhadap informasi spektroskopi, bahkan jika tergoda untuk menggunakan analisis kluster dan kemudian hanya mencari tahu kelas mana yang dimiliki masing-masing klaster (yang akan menjadi data uji semi-diawasi yang tidak independen sama sekali).

  • Terakhir, tetapi tentu tidak kalah pentingnya: Ketika mengkode validasi resampling, saya benar-benar memeriksa apakah indeks yang dihitung ke dalam set data tidak mengarah pada pengambilan baris tes dari pasien pelatihan, hari dll.

Perhatikan bahwa "pemisahan tidak dilakukan untuk memastikan independensi" dan "pemisahan sebelum terjadi perhitungan yang melibatkan lebih dari satu kasus" juga dapat terjadi dengan pengujian yang mengklaim menggunakan set pengujian independen, dan yang terakhir bahkan jika analis data diharuskan. membutakan referensi kasus uji. Kesalahan ini tidak dapat terjadi jika data uji ditahan sampai model akhir disajikan.

* Saya menggunakan pasien sebagai hierarki teratas dalam data hanya untuk kemudahan deskripsi.
** Saya ahli kimia analitik: Penyimpangan instrumen adalah masalah yang diketahui. Bahkan, bagian dari validasi metode analisis kimia adalah menentukan seberapa sering kalibrasi perlu diperiksa terhadap sampel validasi, dan seberapa sering kalibrasi perlu diulang.


FWIW: Dalam praktiknya, saya berurusan dengan aplikasi di mana

  • p berada dalam urutan besarnya ,102103
  • hlmnrows biasanya lebih besar dari , tetapip
  • n p a t saya e n t sp 10 0 - 10 1 10 2nbiol.replicates atau adalah (urutan besarnya: , jarang )npatientsp100101102
  • tergantung pada metode pengukuran spektroskopi, semua baris dari satu, katakanlah, pasien mungkin sangat mirip atau agak berbeda karena jenis spektrum yang berbeda memiliki rasio signal-to-noise (kesalahan instrumen) juga bervariasi berdasarkan urutan besarnya atau lebih

Secara pribadi, saya belum memenuhi aplikasi di mana untuk pengembangan pengklasifikasian saya mendapatkan cukup case independen untuk mengesampingkan set test independen yang tepat. Jadi, saya sampai pada kesimpulan bahwa validasi resampling yang dilakukan dengan benar adalah alternatif yang lebih baik saat metode ini masih dalam pengembangan. Studi validasi yang tepat perlu dilakukan pada akhirnya, tetapi itu adalah pemborosan sumber daya yang besar (atau hasilnya tidak akan membawa informasi yang berguna karena varians) melakukan hal itu sementara pengembangan metode berada pada tahap di mana hal-hal masih berubah.

Cbeleites mendukung Monica
sumber
2

Jika saya ingat dengan benar, beberapa kontes peramalan (seperti Netflix atau yang ada di Kaggle) menggunakan skema ini:

Ada satu set pelatihan, dengan "jawaban". Ada set tes # 1, di mana peneliti memberikan jawaban. Peneliti menemukan skor mereka. Ada set tes # 2, di mana peneliti memberikan jawaban, TETAPI peneliti tidak mengetahui skor mereka. Peneliti tidak tahu kasus prediksi mana yang ada di # 1 dan # 2.

Pada titik tertentu, set # 2 harus terlihat, tetapi Anda setidaknya membatasi kontaminasi.

zbicyclist
sumber
2

Dalam beberapa kasus, seperti prediksi berbasis urutan biologis, tidak cukup untuk memastikan bahwa kasus tidak muncul dalam lebih dari satu set. Anda masih perlu khawatir tentang ketergantungan antara set.

Misalnya, untuk prediktor berbasis urutan, seseorang perlu menghapus redundansi dengan memastikan bahwa sekuens dalam set yang berbeda (termasuk set validasi silang yang berbeda) tidak berbagi tingkat kemiripan urutan yang tinggi.

Itamar
sumber
2

Saya akan mengatakan "validasi silang k-fold" adalah jawaban yang tepat dari sudut pandang teoritis, tetapi pertanyaan Anda tampaknya lebih banyak tentang hal-hal organisasi dan pengajaran jadi saya akan menjawab secara berbeda.


Ketika orang "masih belajar" sering dianggap seolah-olah mereka sedang belajar bagaimana "dengan cepat dan kotor" menerapkan algoritma dan semua "ekstra" pengetahuan (motivasi masalah, persiapan dataset, validasi, analisis kesalahan, gotcha praktis dan sebagainya ) akan dipelajari "nanti" ketika mereka "lebih siap".

Ini benar-benar salah.

  1. Jika kita ingin seorang siswa atau siapa pun untuk memahami perbedaan antara set tes dan set pelatihan, hal terburuk adalah memberikan dua set kepada dua orang yang berbeda seolah-olah kita berpikir bahwa "pada tahap ini" "pengetahuan tambahan" adalah berbahaya. Ini seperti pendekatan air terjun dalam pengembangan perangkat lunak - beberapa bulan desain murni, kemudian beberapa bulan pengkodean murni, kemudian beberapa bulan pengujian murni dan hasil pembuangan yang menyedihkan pada akhirnya.

  2. Belajar seharusnya tidak seperti air terjun. Semua bagian pembelajaran - motivasi masalah, algoritma, gotcha praktis, evaluasi hasil - harus disatukan, dalam langkah-langkah kecil. (Suka pendekatan tangkas dalam pengembangan perangkat lunak).

Mungkin semua orang di sini telah membaca Andrew Ng's ml-class.org - Saya akan menjadikan kursusnya sebagai contoh "lincah" yang kuat, jika Anda mau, gaya belajar - yang tidak akan pernah menghasilkan pertanyaan tentang "bagaimana caranya". memastikan bahwa data uji tidak bocor ke dalam data pelatihan ".


Perhatikan bahwa saya mungkin benar-benar salah memahami pertanyaan Anda, jadi mohon maaf! :)

andreister
sumber
Belajar untuk manusia (yaitu, belajar bagaimana membuat model secara umum) tidak harus seperti air terjun, tetapi pembelajaran untuk model harus. Kalau tidak, bit data uji akan menyelinap ke dalam data pelatihan, dan model Anda lebih rentan terhadap overfitting.
Michael McGowan
Dan saya lebih memikirkannya dari sisi perangkat lunak. Seorang pengguna membangun model yang mendapatkan akurasi 90% pada pelatihan dan akurasi 75% pada pengujian. Mereka kemudian mengubah beberapa tombol dan pengaturan dalam perangkat lunak dan mendapatkan akurasi 80% pada "pengujian." Mereka kembali lagi dan melakukan lebih banyak tweak dan mendapatkan akurasi 85% pada "pengujian." Tetapi apa yang disebut dataset "testing" ini tidak lagi out-of-sample, dan model telah sesuai untuk itu.
Michael McGowan
Persis. Ini adalah masalah belajar manusia (masalah guru, jika Anda mau). Ini harus diungkapkan sesegera mungkin, daripada disembunyikan dengan cara buatan "memastikan X tidak bocor ke Y"
andreister
Orang yang seharusnya tahu lebih baik masih akan melakukan kesalahan ini. Anda dapat mengurangi efek ini pada tingkat tertentu dalam paket perangkat lunak dengan alur kerja yang secara implisit atau eksplisit mendorong praktik yang baik dan mencegah praktik yang buruk. Bahwa manusia harus tahu lebih baik bukan alasan untuk mengabaikan masalahnya.
Michael McGowan
@MichaelMcGowan - Anda juga mengabaikan manfaat kebocoran - bahwa algoritme Anda berpotensi ditingkatkan dengan menggunakan set tes (mis. Train + test lebih banyak data daripada hanya train). Ini benar-benar hanya trade-off yang berbeda, peningkatan akurasi vs peningkatan pengukuran akurasi. Bagi saya yang pertama lebih penting.
probabilityislogic