Mengapa tidak melatih model akhir pada seluruh data setelah melakukan data uji dasar tuning hiper-paramaeter dan data validasi dasar pemilihan model?

9

Dengan seluruh data yang saya maksud kereta + tes + validasi

Setelah saya memperbaiki hyperparameter saya menggunakan data validasi, dan memilih model menggunakan data uji, bukankah lebih baik memiliki model yang dilatih pada seluruh data sehingga parameter lebih terlatih daripada memiliki model yang dilatih hanya pada melatih data

Apoorva Abhishekh
sumber
2
Anda harus TIDAK PERNAH memperbaiki hyperparameter Anda menggunakan data tes Anda. Anda baru saja merusak seluruh percobaan Anda dengan menghapus grup kontrol buta Anda (set tes).
JahKnows
@ JonKnows Setelah saya selesai menyetel parameter hiper untuk model, saya tidak mengerti bahayanya kecuali bahwa saya tidak akan tahu seberapa bagusnya generalisasi pada dataset yang berbeda. Bagaimana saya merusak eksperimen saya? apakah saya melewatkan sesuatu?
Apoorva Abhishekh

Jawaban:

8

Pertanyaannya adalah asumsi yang salah. Banyak orang melakukan apa yang Anda katakan "tidak bisa" lakukan.

Faktanya, implementasi pencarian grid dalam paket sklearn yang digunakan secara luas tidak hanya itu. Kecuali refit=False, itu akan melatih model akhir menggunakan seluruh data.

Saya pikir untuk beberapa hiperparameter ini mungkin tidak terlalu diinginkan, karena mereka relatif terhadap volume data. Misalnya, pertimbangkan min_samples_leaftaktik pra-pemangkasan untuk pohon keputusan . Jika Anda memiliki lebih banyak data, pra-pemangkasan mungkin tidak berfungsi seperti yang Anda inginkan.

Tetapi sekali lagi, kebanyakan orang benar-benar berlatih menggunakan seluruh data setelah cross-validation, sehingga mereka berakhir dengan model terbaik.

Tambahan: @NeilSlater mengatakan di bawah ini bahwa beberapa orang melakukan penahanan di atas CV. Dengan kata lain, mereka memiliki tes kereta split dan kemudian melakukan pemilihan model pada pelatihan. Menurutnya, mereka melatih ulang menggunakan set pelatihan asli, tetapi tidak set pengujian. Set pengujian kemudian digunakan untuk melakukan estimasi model akhir. Secara pribadi, saya melihat tiga kelemahan dalam hal ini: (a) tidak menyelesaikan masalah yang saya sebutkan dengan beberapa hiperparameter tergantung pada volume pelatihan karena Anda tetap berlatih kembali, (b) ketika menguji banyak model, saya lebih suka lebih canggih metode seperti validasi silang bersarang sehingga tidak ada data yang terbuang, dan (c) tahan adalah metode yang mengerikan untuk menyimpulkan bagaimana model akan digeneralisasi ketika Anda memiliki sedikit data.

Ricardo Cruz
sumber
Fitur ini tentang menggunakan kembali validasi silang, masih tidak disarankan untuk menggunakan kembali data uji, karena Anda hanya memiliki asumsi dari validasi silang dan tidak ada ukuran kinerja. Parameter bug atau masalah apa pun (seperti contoh yang Anda berikan) dapat membuat model menjadi lebih buruk.
Neil Slater
@NeilSlater Saya tidak mengerti apa yang Anda katakan di sini: "Fitur ini tentang menggunakan kembali validasi silang"
Ricardo Cruz
"fitur" -> refitopsi fungsi GridSearchCV. Itu tidak cocok untuk memasukkan data uji yang ditahan (bahkan tidak bisa melihat data itu).
Neil Slater
@ NeilSlater, Anda dapat dengan mudah memeriksa kode untuk diri sendiri jika Anda tidak percaya (di sini) . Jika refit = True, maka "pas estimator terbaik menggunakan seluruh dataset".
Ricardo Cruz
1
@NeilSlater, itu bukan pengalaman saya, tapi saya telah menambahkan pengalaman Anda ke komentar saya sehingga orang lain bisa mendapat manfaat dari itu. Terima kasih.
Ricardo Cruz
1

Ya kamu bisa.

Karena data uji seharusnya berasal dari distribusi serupa untuk melatih data, Anda tidak akan merusak model Anda. Jika Anda telah melatih model dengan benar, maka Anda tidak akan melihat perubahan signifikan (kecuali metrik akurasi yang lebih baik pada data tes / validasi sebelumnya).

Tetapi jarang benar bahwa data pengujian berasal dari distribusi yang sama persis dengan data kereta, jadi dalam skenario kasus aplikasi nyata Anda mungkin mendapatkan generalisasi model yang lebih baik.

Il'ya Zhenin
sumber
1
Masalah dengan memasukkan data uji sesuai saran ini, sekarang Anda tidak memiliki pengukuran seberapa baik model tersebut di generalisasi. Ya, Anda mungkin berharap untuk menggeneralisasi lebih baik. Namun, Anda tidak tahu , karena Anda telah menghilangkan kemampuan Anda untuk mengukurnya. Saya sarankan tambahkan peringatan itu, dan jelaskan mengapa kadang-kadang ini masih ok (misalnya ketika menerima data baru, Anda mungkin dapat menganggap itu sebagai set pengujian baru dan membangun pengukuran baru dari waktu ke waktu, sambil berharap mengambil keuntungan dari model yang lebih baik - itu risikonya)
Neil Slater
@ NeilSlater: Saya mengerti bahwa saya telah menghilangkan kemampuan saya untuk mengukur seberapa baik akan menggeneralisasi pada dataset yang berbeda. Tetapi jika saya memiliki kedua tes dan ketidaksepakatan, bahkan setelah penyetelan parameter hiper, saya dapat melatih model saya lagi pada tes kereta +, saya akan masih dibiarkan dengan ketidaksepakatan untuk memeriksa apakah model saya digeneralisasi. Saya tahu ini berbeda dari yang saya tanyakan. Tapi saya hanya ingin tahu pandangan Anda.
Apoorva Abhishekh
1
@ApoorvaAbhishekh: Jika Anda memiliki set data ketidaksepakatan lainnya, maka ya Anda dapat menggunakannya sebagai set tes baru terhadap model baru yang dilatih pada new_train = {kereta lama, kereta lama, uji lama}. Maka Anda akan mendapatkan ukuran generalisasi. Meskipun Anda harus berhati-hati untuk tidak menggunakannya secara berlebihan - jika ternyata ada masalah dengan himpunan gabungan baru (misalnya penghentian awal perlu diubah karena lebih banyak data) maka Anda tidak dapat juga menggunakannya sebagai cv set baru. . . kecuali jika Anda memiliki set Holdout lain sebagai cadangan. . .
Neil Slater
@NeilSlater Secara teori Anda memerlukan dataset baru untuk mengetahui kinerja. Dalam prakteknya Anda mungkin yakin bahwa model Anda berkinerja baik, karena Anda bekerja dengan itu lama dan Anda tahu apa yang diharapkan. Tetapi biasanya Anda juga memiliki data lain untuk memeriksa kinerja model, misalnya, dalam visi komputer - data yang tidak berlabel. Itu tidak benar, tetapi berhasil juga. Tentu ini kasus ekstrem, tapi saya ingin mengatakan itu mungkin berhasil. Saya sendiri selalu memiliki set tes yang tidak saya campur dalam pelatihan.
Il'ya Zhenin
1

Jawaban untuk pertanyaan ini tergantung pada algoritma pelatihan (teknologi) yang Anda gunakan. Sebagai contoh, saya telah melihat beberapa pendekatan dalam klasifikasi ensemble di mana pelatihan dan validasi (tetapi tidak menguji) set digabungkan pada akhirnya. Sangat penting untuk mengetahui bahwa bahkan validasi digunakan terutama untuk menentukan parameter hiper beberapa parameter hiper ini dapat menjadi fungsi dari data yang digunakan untuk pelatihan. Misalnya, dalam validasi DNN yang digunakan untuk mengetahui kapan harus berhenti, karena overfitting dapat terjadi sebagai akibat dari penyetelan parameter (bobot) jaringan, kami memerlukan cara untuk mengetahui kapan harus berhenti. Tanpa set validasi, Anda akan berjalan membabi buta dalam proses pelatihan. Di sisi lain, jika Anda menggunakan jumlah iterasi yang persis sama seperti yang ditentukan sebelumnya, ada masalah besar yang tidak akan Anda peroleh dari sampel tambahan ini. Set pengujian tidak boleh disentuh sama sekali, seperti ditunjukkan di atas tanpa set pengujian Anda tidak akan memiliki metode untuk mengevaluasi model Anda. Ini adalah perjudian, Anda TIDAK BISA menyampaikan model atau solusi apa pun tanpa estimasi keakuratannya pada distribusi data yang sebenarnya (yang diwakili oleh data pengujian).

Bashar Haddad
sumber
Maksud saya setelah pelatihan tentang data kereta, penyetelan parameter hiper pada data validasi dan memilih model berdasarkan data uji, Dapatkah saya melatih model saya mendasarkan seluruh data. Atau, bisakah saya menggabungkan data pelatihan dan data validasi setelah saya selesai dengan penyetelan hyperparameter dan memperkirakan akurasi menggunakan data uji. Permintaan maaf karena salah menulis. Telah memperbaikinya sekarang.
Apoorva Abhishekh