Apakah ada aturan praktis tentang cara membagi dataset ke dalam set pelatihan dan validasi?

194

Apakah ada aturan praktis tentang cara terbaik membagi data ke dalam set pelatihan dan validasi? Apakah pemisahan 50/50 bahkan disarankan? Atau adakah keuntungan yang jelas dari memiliki lebih banyak data pelatihan relatif terhadap data validasi (atau sebaliknya)? Atau apakah pilihan ini tergantung pada aplikasi?

Saya sebagian besar menggunakan 80% / 20% data pelatihan dan validasi, masing-masing, tetapi saya memilih divisi ini tanpa alasan prinsip. Dapatkah seseorang yang lebih berpengalaman dalam pembelajaran mesin menasihati saya?

perampokan
sumber
Jika Anda tidak memiliki terlalu banyak data, pertimbangkan en.wikipedia.org/wiki/Resampling_(statistics)#Jackknife
nair.ashvin

Jawaban:

221

Ada dua masalah yang bersaing: dengan lebih sedikit data pelatihan, estimasi parameter Anda memiliki varian yang lebih besar. Dengan lebih sedikit data pengujian, statistik kinerja Anda akan memiliki varian yang lebih besar. Secara umum Anda harus peduli dengan membagi data sedemikian rupa sehingga tidak ada varians yang terlalu tinggi, yang lebih berkaitan dengan jumlah absolut contoh di setiap kategori daripada persentase.

Jika Anda memiliki total 100 contoh, Anda mungkin terjebak dengan validasi silang karena tidak ada pemisahan tunggal yang akan memberi Anda varians yang memuaskan dalam perkiraan Anda. Jika Anda memiliki 100.000 instance, tidak masalah apakah Anda memilih split 80:20 atau 90:10 (memang Anda mungkin memilih untuk menggunakan lebih sedikit data pelatihan jika metode Anda sangat intensif secara komputasi).

Dengan asumsi Anda memiliki data yang cukup untuk melakukan data uji bertahan yang tepat (daripada validasi silang), berikut ini adalah cara instruktif untuk menangani varian:

  1. Bagi data Anda menjadi pelatihan dan pengujian (80/20 memang merupakan titik awal yang baik)
  2. Membagi data pelatihan menjadi pelatihan dan validasi (sekali lagi, 80/20 adalah pembagian yang adil).
  3. Subsampel pilihan acak dari data pelatihan Anda, latih classifier dengan ini, dan catat kinerja pada set validasi
  4. Coba serangkaian proses dengan jumlah data pelatihan yang berbeda: sampel secara acak 20% dari itu, katakanlah, 10 kali dan amati kinerja pada data validasi, kemudian lakukan hal yang sama dengan 40%, 60%, 80%. Anda akan melihat kinerja yang lebih baik dengan lebih banyak data, tetapi juga varians yang lebih rendah di berbagai sampel acak
  5. Untuk mendapatkan pegangan pada varians karena ukuran data pengujian, lakukan prosedur yang sama secara terbalik. Latih semua data pelatihan Anda, lalu sampel acak persentase data validasi Anda beberapa kali, dan amati kinerja. Anda sekarang harus menemukan bahwa kinerja rata-rata pada sampel kecil dari data validasi Anda kira-kira sama dengan kinerja pada semua data validasi, tetapi variansnya jauh lebih tinggi dengan jumlah sampel uji yang lebih kecil
Ben Allison
sumber
Terima kasih, ini juga sangat membantu! Saya akan mencobanya. FYI, saya memiliki sekitar 6000 contoh data pelatihan. Saya menggunakan SVM, jadi kinerja agak menjadi masalah.
robguinness
1
FWIW, varians dalam kinerja dapat dihitung dengan mengklasifikasikan semua instans satu kali, menilai keputusan apakah itu benar atau tidak, dan kemudian mengambil sampel keputusan ini alih-alih instance instans untuk menghasilkan efek menggunakan ukuran set tes yang berbeda
Ben Allison
Dan 6000 instance harus cukup sehingga perbedaan antara menggunakan 10% atau 20% untuk pengujian tidak akan terlalu bagus (Anda dapat mengonfirmasi ini dengan menggunakan metode yang saya jelaskan)
Ben Allison
1
Halo lagi. Saya agak bingung pada poin # 5. Anda berkata "lalu sampel secara acak persentase data validasi Anda beberapa kali". Apakah Anda bermaksud melihat data pengujian saja? Jika saya mengerti benar, saya harus membagi data saya pertama kali ke dalam set data pelatihan dan tes, kemudian membagi lebih lanjut beberapa set data pelatihan saya ke dalam set data validasi. Jadi pada langkah 5, jika saya mengukur varians pada data pengujian saya, bukankah saya harus secara acak sampel populasi dari data pengujian saya? Atau apakah saya melewatkan sesuatu?
perampokan
2
Intinya adalah bahwa saat Anda bermain-main dengan parameter, mengamati efek dari mengubah sesuatu, Anda harus menggunakan data validasi Anda untuk menguji. Jika Anda mulai melihat data pengujian Anda, dan memilih strategi berdasarkan pada apa yang memberi Anda skor tertinggi pada itu, Anda akan merasakan peningkatan kinerja metode Anda. Ketika semua parameter Anda ditetapkan dan keputusan dibuat, maka jalankan pada data pengujian Anda. Ini memungkinkan Anda mengetahui kinerja seperti apa yang akan Anda dapatkan pada data yang benar-benar baru dan tidak teramati (yang mungkin Anda minati!)
Ben Allison
54

Anda akan terkejut mengetahui bahwa 80/20 adalah rasio yang cukup umum terjadi, sering disebut sebagai prinsip Pareto . Ini biasanya taruhan yang aman jika Anda menggunakan rasio itu.

Namun, tergantung pada metodologi pelatihan / validasi yang Anda gunakan, rasionya mungkin berubah. Misalnya: jika Anda menggunakan validasi silang 10 kali lipat, maka Anda akan berakhir dengan set validasi 10% di setiap lipatan.

Ada beberapa penelitian tentang berapa rasio yang tepat antara set pelatihan dan set validasi :

Fraksi pola yang disediakan untuk set validasi harus berbanding terbalik dengan akar kuadrat dari jumlah parameter bebas yang dapat disesuaikan.

Dalam kesimpulannya mereka menentukan formula:

Set validasi (v) ke set pelatihan (t) rasio ukuran, v / t, skala seperti ln (N / h-maks), di mana N adalah jumlah keluarga pengenal dan h-max adalah kompleksitas terbesar dari keluarga tersebut.

Yang mereka maksud dengan kompleksitas adalah:

Setiap kelompok pengenal ditandai dengan kompleksitasnya, yang mungkin terkait atau tidak dengan dimensi VC , panjang deskripsi, jumlah parameter yang dapat disesuaikan, atau ukuran kompleksitas lainnya.

Mengambil aturan pertama (set validasi harus berbanding terbalik dengan akar kuadrat dari jumlah parameter yang dapat disesuaikan gratis), Anda dapat menyimpulkan bahwa jika Anda memiliki 32 parameter yang dapat disesuaikan, akar kuadrat dari 32 adalah ~ 5,65, fraksi harus 1 / 5.65 atau 0.177 (v / t). Sekitar 17,7% harus dicadangkan untuk validasi dan 82,3% untuk pelatihan.

Kiril
sumber
2
Makalah ini, bagi mereka yang mungkin mengalami kesulitan memuatnya seperti saya (tidak yakin mengapa), adalah: "Undang-undang penskalaan untuk ukuran rasio pelatihan-set pelatihan-set validasi" (I. Guyon, 1996, Laporan Teknis yang Tidak Diterbitkan, AT&T Bell Laboratories ).
theforestecologist
3
Apakah aturan praktisnya masuk akal? Jika Anda memiliki dua parameter yang dapat disesuaikan maka rasionya adalah 0,77, artinya Anda akan menggunakan 77% untuk validasi. Masalahnya adalah definisi parameter gratis. Untuk SVM linier, Anda dapat mengatur parameter penalti C untuk istilah kesalahan yang merupakan satu parameter, tetapi kompleksitasnya lebih tinggi Dimensi + 1 untuk SVM.
Reed Richards
4
Maka haruskah ukuran pengujian saya menjadi 1 jika saya memiliki jaringan saraf ..?
YellowPillow
51

Tahun lalu, saya mengikuti kursus pembelajaran mesin online Prof: Andrew Ng. Rekomendasinya adalah:

Pelatihan : 60%

Validasi silang : 20%

Pengujian : 20%

Upul Bandara
sumber
20
coursera.org/learn/deep-neural-network/lecture/cxG1s/... in the modern big data era, where, for example, you might have a million examples in total, then the trend is that your dev (cross validation) and test sets have been becoming a much smaller percentage of the total. Dia menyarankan itu bisa 99.5: 0.25: 0.25.
Nobu
9

Anda harus memikirkan satu hal lagi.

Jika Anda memiliki dataset yang sangat besar, seperti 1.000.000 contoh, membagi 80/10/10 mungkin tidak perlu, karena 10% = 100.000 contoh tidak perlu untuk memberi tahu bahwa model berfungsi dengan baik.

Mungkin 99 / 0,5 / 0,5 sudah cukup, karena 5.000 contoh dapat mewakili sebagian besar varians dalam data dan Anda dapat dengan mudah mengatakan bahwa model berfungsi baik berdasarkan 5.000 contoh ini dalam pengujian dan pengembangan.

DavidS1992
sumber
0,5% di set validasi bisa cukup tetapi saya berpendapat bahwa Anda mengambil risiko besar dan tidak perlu karena Anda tidak tahu cukup atau tidak. Pelatihan Anda dapat dengan mudah salah jika Anda menggunakan set validasi yang terlalu kecil, tetapi hampir tidak mungkin untuk salah dengan menggunakan set validasi besar.
Björn Lindqvist
2

Misalkan Anda memiliki lebih sedikit data, saya sarankan untuk mencoba 70%, 80% dan 90% dan tes yang memberikan hasil yang lebih baik. Dalam hal 90% ada kemungkinan bahwa untuk tes 10% Anda mendapatkan akurasi yang buruk.

Rishi Bansal
sumber
1

Mungkin 63,2% / 36,8% adalah pilihan yang masuk akal. Alasannya adalah bahwa jika Anda memiliki ukuran sampel total n dan ingin mengambil sampel secara acak dengan penggantian (alias sampel ulang, seperti dalam bootstrap statistik) n kasus di luar n awal , kemungkinan setiap kasus dipilih di sampel ulang akan menjadi sekitar 0,632, asalkan n tidak terlalu kecil, seperti yang dijelaskan di sini: https://stats.stackexchange.com/a/88993/16263

Untuk sampel n = 250, probabilitas kasus individual yang dipilih untuk sampel ulang menjadi 4 digit adalah 0,6329. Untuk sampel n = 20000, probabilitasnya adalah 0,6321.

pengguna16263
sumber
1

Itu semua tergantung pada data yang ada. Jika Anda memiliki jumlah data yang cukup maka 80/20 adalah pilihan yang baik seperti yang disebutkan di atas. Tetapi jika Anda tidak Validasi Silang dengan split 50/50 mungkin membantu Anda lebih banyak dan mencegah Anda membuat model yang terlalu pas dengan data pelatihan Anda.

Mayank
sumber