Pelatihan dengan set data lengkap setelah validasi silang?

140

Apakah selalu ide yang baik untuk berlatih dengan dataset lengkap setelah cross-validation ? Kata lain, itu ok untuk melatih dengan semua sampel dalam dataset saya dan tidak bisa memeriksa apakah ini pas tertentu overfits ?


Beberapa latar belakang masalah:

Katakanlah saya memiliki keluarga model parametrized oleh . Katakan juga bahwa saya memiliki satu set titik data dan bahwa saya melakukan pemilihan model dengan k-fold cross-validation untuk memilih model yang paling menggeneralisasi data. NαN

Untuk pemilihan model, saya dapat melakukan pencarian (mis. Pencarian grid) pada dengan, misalnya, menjalankan k-fold cross-validation untuk setiap kandidat. Di setiap lipatan dalam validasi silang, saya berakhir dengan model terpelajar . βαα βα

Inti dari cross-validation adalah bahwa untuk setiap lipatan ini saya dapat memeriksa apakah model yang dipelajari memiliki overfit, dengan mengujinya pada "data yang tidak terlihat". Bergantung pada hasilnya, saya dapat memilih model dipelajari untuk parameter yang digeneralisasi terbaik selama validasi silang dalam pencarian kisi.α terbaikβbestαbest

Sekarang, mengatakan bahwa setelah pemilihan model , saya ingin menggunakan semua yang poin dalam dataset saya dan mudah-mudahan belajar model yang lebih baik. Untuk ini saya bisa menggunakan parameter sesuai dengan model yang saya pilih selama pemilihan model, dan kemudian setelah pelatihan tentang dataset lengkap, saya akan mendapatkan model yang baru dipelajari . Masalahnya adalah, jika saya menggunakan semua poin dalam dataset saya untuk pelatihan, saya tidak dapat memeriksa apakah model yang baru dipelajari ini cocok dengan data yang tidak terlihat. Apa cara yang tepat untuk memikirkan masalah ini?α b e s t β f u l l β f u l lNαbestβfull βfull

Amelio Vazquez-Reina
sumber
2
Duplikat yang hampir pasti: stats.stackexchange.com/questions/52274 dengan banyak jawaban yang layak. Mungkin utas ini harus digabung tetapi saya tidak yakin ke arah mana. Keduanya menerima jawaban yang sangat baik.
amoeba

Jawaban:

111

Cara berpikir validasi silang adalah dengan memperkirakan kinerja yang diperoleh dengan menggunakan metode untuk membangun model, bukan untuk memperkirakan kinerja model.

Jika Anda menggunakan validasi silang untuk memperkirakan hiperparameter model (the s) dan kemudian menggunakan parameter-hip tersebut agar sesuai dengan model ke seluruh dataset, maka itu sah-sah saja, asalkan Anda mengenali bahwa estimasi validasi silang kinerja cenderung (mungkin secara substansial) bias optimis. Ini karena bagian dari model (parameter-hiper) telah dipilih untuk meminimalkan kinerja validasi silang, jadi jika statistik validasi silang memiliki varian tidak nol (dan itu akan) ada kemungkinan over-fitting kriteria pemilihan model.α

Jika Anda ingin memilih parameter-hiper dan memperkirakan kinerja model yang dihasilkan maka Anda perlu melakukan validasi silang bersarang, di mana validasi silang luar digunakan untuk menilai kinerja model, dan di setiap lipatan silang validasi digunakan untuk menentukan parameter-hiper secara terpisah di setiap lipatan. Anda membangun model akhir dengan menggunakan cross-validation pada seluruh set untuk memilih parameter-hiper dan kemudian membangun classifier pada seluruh dataset menggunakan parameter-hiper yang dioptimalkan.

Ini tentu saja mahal secara komputasi, tetapi layak karena bias yang diperkenalkan oleh estimasi kinerja yang tidak tepat bisa besar. Lihat kertas saya

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 , pdf )

Namun, masih dimungkinkan untuk memiliki kecocokan yang berlebihan dalam pemilihan model (validasi silang bersarang hanya memungkinkan Anda untuk mengujinya). Metode yang menurut saya bermanfaat adalah menambahkan istilah regularisasi ke kesalahan validasi silang yang menghukum nilai-nilai parameter-hip yang cenderung menghasilkan model yang terlalu rumit, lihat

GC Cawley dan NLC Talbot, Mencegah over-fitting dalam pemilihan model melalui regularisasi Bayesian dari hyper-parameter, Journal of Machine Learning Research, volume 8, halaman 841-861, April 2007. ( www , pdf )

Jadi jawaban untuk pertanyaan Anda adalah (i) ya, Anda harus menggunakan dataset lengkap untuk menghasilkan model akhir Anda karena semakin banyak data yang Anda gunakan, semakin besar kemungkinannya untuk digeneralisasikan dengan baik, tetapi (ii) pastikan Anda mendapatkan estimasi kinerja yang tidak bias melalui melakukan validasi silang bersarang dan berpotensi mempertimbangkan untuk menghukum statistik cross-validasi untuk lebih menghindari pemasangan yang berlebihan dalam pemilihan model.

Dikran Marsupial
sumber
3
+1: Menjawab pertanyaan: "Jika Anda menggunakan validasi silang untuk memperkirakan hiperparameter model (α) dan kemudian menggunakan parameter-hip tersebut agar sesuai dengan model ke seluruh dataset, maka itu tidak masalah ..."
Neil G
4
@soufanom, tidak, penggunaan "percobaan awal" untuk membuat pilihan mengenai model ini cenderung mengakibatkan over-fitting dan hampir pasti akan memperkenalkan bias optimis ke dalam analisis kinerja. Validasi silang yang digunakan untuk analisis kinerja harus mengulangi SETIAP langkah yang digunakan dalam pemasangan model secara independen di setiap lipatan. Eksperimen dalam makalah saya menunjukkan bahwa model kernel bisa sangat sensitif terhadap bias semacam ini, sehingga sangat penting untuk melakukan pemilihan model dan evaluasi kinerja dengan semua kemungkinan kekakuan.
Dikran Marsupial
3
Untuk metode kernel, seperti SVM, seringkali dimungkinkan untuk melakukan validasi silang tinggalkan satu tanpa biaya komputasi (lihat makalah yang tercantum dalam jawaban saya). Saya menggunakan validasi silang kiri-satu-keluar "virtual" ini untuk menyetel hyper-parameter, bersarang dalam k-fold cross-validation untuk evaluasi kinerja. Biaya itu kemudian cukup masuk akal. Menurut pendapat saya itu tidak dapat diterima untuk menggunakan prosedur apa pun di mana evaluasi kinerja bias dengan cara apa pun oleh penyetelan parameter-hiper. Sebaiknya biaya komputasi untuk mendapatkan estimasi yang andal.
Dikran Marsupial
2
@DikranMarsupial. Saya tidak mendapatkan paragraf ketiga dalam jawaban Anda. Jika saya melakukan validasi silang bersarang, saya akan mendapatkan set hiperparameter yang berbeda untuk setiap lipatan CV luar (yaitu saya mendapatkan satu set hiperparameter dari menjalankan inner CV pada grid parameter). Bagaimana cara memilih set hiperparameter terbaik?
Amelio Vazquez-Reina
1
cross-validation pada dasarnya adalah cara memperkirakan kinerja metode pemasangan model, bukan metode itu sendiri. Jadi setelah melakukan validasi silang bersarang untuk mendapatkan perkiraan kinerja, cukup buat kembali model akhir menggunakan seluruh dataset, menggunakan prosedur yang telah Anda validasi silang (yang mencakup pemilihan parameter-hiper).
Dikran Marsupial
23

Hanya untuk menambah jawaban oleh @ mark999, caretpaket Max Kuhn (Pelatihan Klasifikasi dan Regresi) adalah sumber paling komprehensif dalam R untuk pemilihan model berdasarkan validasi silang bootstrap atau N-lipat CV dan beberapa skema lainnya juga.

Bukan untuk mengabaikan kehebatan rmspaket, tetapi caretmemungkinkan Anda menyesuaikan hampir setiap metode pembelajaran yang tersedia di R, sedangkan validatehanya bekerja dengan rmsmetode (saya pikir).

The caretpaket infrastruktur tunggal untuk pra proses data, fit dan mengevaluasi model apapun populer, karena itu adalah mudah digunakan untuk semua metode dan menyediakan penilaian grafis dari banyak ukuran kinerja (sesuatu yang di sebelah masalah overfit mungkin mempengaruhi pemilihan model jauh sebagai baik) lebih dari kisi-kisi Anda dan variabel penting.

Lihat sketsa paket untuk memulai (sangat mudah digunakan) Pemilihan Variabel
Preprocessing Data
dengan caret
Model Building dengan caret
Variable Pentingnya

Anda juga dapat melihat situs web tanda sisipan untuk informasi lebih lanjut tentang paket, dan contoh implementasi spesifik:
Situs tanda sisipan resmi

Momo
sumber
Terima kasih. Apakah Anda tahu jika, setelah pemilihan model (yang dilakukan dengan menelepon train), ada cara caret untuk berlatih dengan dataset lengkap?
Amelio Vazquez-Reina
Tidak yakin apakah itu ide yang bagus atau mengapa Anda menginginkannya, tetapi Anda bisa memasukkan model akhir yang dikembalikan dengan kereta api ke set data lengkap.
Momo
16

Saya percaya bahwa Frank Harrell akan merekomendasikan validasi bootstrap daripada validasi silang. Validasi bootstrap akan memungkinkan Anda untuk memvalidasi model yang dipasang pada set data lengkap, dan lebih stabil daripada validasi silang. Anda dapat melakukannya di R menggunakan paket validateHarrell rms.

Lihat buku "Strategi Pemodelan Regresi" oleh Harrell dan / atau "Pengantar Bootstrap" oleh Efron dan Tibshirani untuk informasi lebih lanjut.

mark999
sumber
9
Untuk menghilangkan mitos berikutnya tentang "CV buruk", ini adalah masalah terminologi - "validasi silang" Harrell berarti CV lipat-N, dan "validasi bootstrap" berarti resampling CV. Jelas saya setuju bahwa rasa kedua ini lebih stabil dan secara keseluruhan lebih baik, tetapi ini juga merupakan jenis validasi silang.
1
mark999 atau @mbq, maukah Anda menguraikan bagaimana bootstrap akan memungkinkan seseorang untuk memvalidasi model yang dipasang pada dataset lengkap?
Amelio Vazquez-Reina
1
@ user27915816 Nah, pada prinsipnya nohow; ide di balik cross-validation adalah Anda menguji apakah metode pelatihan yang diberikan andal membuat model yang baik pada set yang sangat mirip dengan yang terakhir, dan, jika demikian, generalisasikan pengamatan ini ke set lengkap dengan asumsi diam bahwa tidak ada hal aneh yang akan terjadi dan metode CV yang Anda gunakan tidak bias. Ini tentu saja hampir selalu cukup baik, masih Anda tidak pernah bisa yakin bahwa model yang dibangun pada semua data yang Anda miliki tidak dilengkapi secara berlebihan.
14

Saya pikir Anda memiliki banyak pertanyaan berbeda di sini:

Masalahnya adalah, jika saya menggunakan semua poin dalam dataset saya untuk pelatihan, saya tidak dapat memeriksa apakah model yang baru dipelajari ini βfull overfits!

Masalahnya adalah, Anda dapat menggunakan (satu) langkah validasi hanya untuk satu hal: baik untuk optimasi parameter, (x) atau untuk memperkirakan kinerja generalisasi.

Jadi, jika Anda melakukan optimasi parameter dengan validasi silang (atau jenis lain dari penentuan parameter yang digerakkan oleh data), Anda perlu sampel uji yang independen dari sampel pelatihan dan optimisasi tersebut. Dikran menyebutnya validasi silang bersarang, nama lain validasi silang ganda. Atau, tentu saja, satu set tes independen.

Jadi, inilah pertanyaan untuk posting ini: Apakah ide yang baik untuk berlatih dengan dataset lengkap setelah k-fold cross-validation? Atau lebih baik tetap menggunakan salah satu model yang dipelajari dalam salah satu pemisahan lintas-validasi untuk αbest?

Menggunakan salah satu model validasi silang biasanya lebih buruk daripada pelatihan pada set lengkap (setidaknya jika kinerja kurva belajar Anda = f (nsamples) masih meningkat. Dalam praktiknya, itu adalah: jika tidak, Anda mungkin akan telah menetapkan mengesampingkan set tes independen.)

Jika Anda mengamati variasi besar antara model validasi silang (dengan parameter yang sama), maka model Anda tidak stabil. Dalam hal itu, menggabungkan model dapat membantu dan benar-benar lebih baik daripada menggunakan satu model yang dilatih pada seluruh data.

Pembaruan: Agregasi ini adalah ide di balik pengantongan yang diterapkan pada resampling tanpa penggantian (validasi silang) alih-alih penggantian ulang dengan penggantian (validasi bootstrap / out-of-bootstrap).

Berikut makalah di mana kami menggunakan teknik ini:
Beleites, C. & Salzer, R .: Menilai dan meningkatkan stabilitas model-model kemometrik dalam situasi ukuran sampel kecil, Anal Bioanal Chem, 390, 1261-1271 (2008).
DOI: 10.1007 / s00216-007-1818-6

Mungkin yang paling penting, bagaimana saya bisa berlatih dengan semua poin di dataset saya dan masih berjuang overfitting?

Dengan menjadi sangat konservatif dengan derajat kebebasan yang diperbolehkan untuk model "terbaik", yaitu dengan memperhitungkan ketidakpastian (acak) pada hasil validasi silang optimasi. Jika df benar-benar sesuai untuk model validasi silang, kemungkinan bagus bahwa mereka tidak terlalu banyak untuk set pelatihan yang lebih besar . Masalahnya adalah bahwa optimasi parameter sebenarnya adalah pengujian berganda. Anda harus menjaga terhadap set parameter yang tidak sengaja terlihat bagus.

cbeleites
sumber
...If you observe a large variation between the cross validation models (with the same parameters), then your models are unstable. In that case, aggregating the models can help...Bisakah Anda menjelaskan ini lebih banyak? mis. jika saya menjalankan regresi logistik dalam pengaturan lintas 10-k yang divalidasi dan berakhir dengan 10 set koefisien, apakah Anda merekomendasikan untuk menggabungkan perkiraan koefisien untuk membentuk model akhir? Jika demikian, bagaimana ini bisa dilakukan, hanya dengan mengambil sarana?
Zhubarb
@cbeleites bisa Anda jelaskan If the d.f. are actually appropriate for the cross validation models. Dalam pemahaman saya Anda berpendapat bahwa set kereta / validasi tidak terlalu besar bila dibandingkan dengan set data lengkap, apakah saya benar?
jpcgandre
1
1k
1
Lebih penting lagi: model pengganti validasi silang berulang berbagi set yang sama dari hiperparameter. Artinya, mereka setara dalam semua yang Anda anggap penting selain pemilihan pelatihan dan uji kasus yang sewenang-wenang. Memilih model "baik" sehingga sebenarnya harus terutama memilih kombinasi set tes / pelatihan yang baik - yang pada dasarnya apa yang biasanya tidak kita inginkan: kita menginginkan pilihan yang menggeneralisasi dengan baik dan dengan demikian tidak hanya bekerja untuk kasus yang menguntungkan. Dari sudut pandang ini, memilih model pengganti dari validasi silang "normal" tidak masuk akal bagi saya.
cbeleites
1
11k
6

Apa yang Anda lakukan bukanlah validasi silang, melainkan semacam optimisasi stokastik.

Gagasan CV adalah untuk mensimulasikan kinerja pada data yang tidak terlihat dengan melakukan beberapa putaran membangun model pada subset objek dan menguji pada yang tersisa. Hasil yang agak rata-rata dari semua putaran adalah perkiraan kinerja model yang dilatih di seluruh set .

Dalam kasus pemilihan model Anda, Anda harus melakukan CV penuh untuk setiap set parameter, dan dengan demikian mendapatkan perkiraan kinerja on-full-set untuk setiap setup, jadi sepertinya hal yang Anda inginkan.

Namun, perhatikan bahwa sama sekali tidak dijamin bahwa model dengan akurasi perkiraan terbaik akan menjadi yang terbaik pada kenyataannya - Anda dapat memvalidasi silang prosedur pemilihan seluruh model untuk melihat bahwa ada beberapa rentang dalam ruang parameter yang perbedaannya dalam akurasi model tidak signifikan.


sumber
2
β
@AmV Jika demikian, ok - seperti yang saya tulis, CV sudah menguji skenario set lengkap, Anda tidak dapat mengatakan lebih banyak tanpa data baru. Sekali lagi, paling banyak Anda bisa melakukan CV bersarang untuk melihat apakah tidak ada overfitting yang dipaksakan oleh pemilihan model itu sendiri (jika seleksi memberikan peningkatan yang sangat baik atau data berisik risiko ini cukup besar).