Bagaimana memilih model prediktif setelah validasi silang k-fold?


149

Saya bertanya-tanya bagaimana cara memilih model prediktif setelah melakukan validasi silang K-fold.

Ini mungkin ungkapan yang aneh, jadi izinkan saya menjelaskan lebih detail: setiap kali saya menjalankan validasi silang K-fold, saya menggunakan subset K dari data pelatihan, dan berakhir dengan K model yang berbeda.

Saya ingin tahu cara memilih salah satu model K, sehingga saya dapat menyajikannya kepada seseorang dan berkata "ini adalah model terbaik yang dapat kami hasilkan."

Apakah boleh memilih salah satu dari model K? Atau apakah ada semacam praktik terbaik yang terlibat, seperti memilih model yang mencapai kesalahan tes median?


2
Anda mungkin menemukan jawaban dalam pertanyaan berikut bermanfaat: stats.stackexchange.com/questions/2306/…
BGreene

Anda perlu mengulang 5 kali lipat CV 100 kali dan rata-rata hasilnya untuk mendapatkan presisi yang cukup. Dan jawaban dari @bogdanovist tepat. Anda bisa mendapatkan ketepatan perkiraan akurasi yang sama dari bootstrap dengan lebih sedikit model yang cocok.
Frank Harrell

@ Frank Harrell, mengapa Anda mengatakan 100 pengulangan diperlukan (saya biasanya menggunakan 10 repetisi pada 10 kali lipat), apakah ini aturan praktis karena OP tidak memberikan spesifik?
BGreene

2
50

Duplikat yang hampir pasti: stats.stackexchange.com/questions/11602 dengan banyak jawaban yang layak. Mungkin utas ini harus digabung tetapi saya tidak yakin ke arah mana. Keduanya menerima jawaban yang sangat baik. Tetapi yang lain lebih tua dan memiliki lebih banyak view / upvotes sehingga masuk akal untuk menggabungkan yang satu ini menjadi yang itu.
amoeba

Jawaban:


201

Saya pikir Anda kehilangan sesuatu yang masih dalam pemahaman Anda tentang tujuan validasi silang.

Mari kita luruskan beberapa terminologi, umumnya ketika kita mengatakan 'model' kita merujuk pada metode tertentu untuk menggambarkan bagaimana beberapa data input berhubungan dengan apa yang kita coba prediksi. Kami biasanya tidak menyebut contoh tertentu dari metode itu sebagai model yang berbeda. Jadi, Anda mungkin mengatakan 'Saya memiliki model regresi linier' tetapi Anda tidak akan menyebut dua set berbeda dari koefisien yang terlatih, model yang berbeda. Setidaknya tidak dalam konteks pemilihan model.

Jadi, ketika Anda melakukan validasi silang K-fold, Anda menguji seberapa baik model Anda bisa dilatih oleh beberapa data dan kemudian memprediksi data yang belum terlihat. Kami menggunakan validasi silang untuk ini karena jika Anda berlatih menggunakan semua data yang Anda miliki, tidak ada lagi yang tersisa untuk pengujian. Anda dapat melakukan ini satu kali, katakanlah dengan menggunakan 80% data untuk berlatih dan 20% untuk menguji, tetapi bagaimana jika 20% yang Anda pilih untuk diuji ternyata mengandung banyak poin yang sangat mudah (atau sangat sulit) untuk memprediksi? Kami tidak akan menghasilkan estimasi terbaik dari kemampuan model untuk belajar dan memprediksi.

Kami ingin menggunakan semua data. Jadi untuk melanjutkan contoh perpecahan 80/20 di atas, kami akan melakukan validasi silang 5 kali lipat dengan melatih model 5 kali pada 80% data dan pengujian pada 20%. Kami memastikan bahwa setiap titik data berakhir pada set tes 20% tepat satu kali. Karena itu kami telah menggunakan setiap titik data yang kami miliki untuk berkontribusi pada pemahaman tentang seberapa baik model kami melakukan tugas belajar dari beberapa data dan memprediksi beberapa data baru.

Tetapi tujuan validasi silang bukanlah untuk menghasilkan model akhir kami. Kami tidak menggunakan 5 contoh model terlatih ini untuk melakukan prediksi nyata. Untuk itu kami ingin menggunakan semua data kami harus datang dengan model terbaik. Tujuan validasi silang adalah pengecekan model, bukan pembangunan model.

Sekarang, katakanlah kita memiliki dua model, katakanlah model regresi linier dan jaringan saraf. Bagaimana kita bisa mengatakan model mana yang lebih baik? Kita dapat melakukan validasi silang K-fold dan melihat mana yang terbukti lebih baik dalam memprediksi poin set tes. Tetapi begitu kami telah menggunakan validasi silang untuk memilih model yang berkinerja lebih baik, kami melatih model itu (apakah itu regresi linier atau jaringan saraf) pada semua data. Kami tidak menggunakan contoh model aktual yang kami latih selama validasi silang untuk model prediksi akhir kami.

Perhatikan bahwa ada teknik yang disebut agregasi bootstrap (biasanya disingkat menjadi 'bagging') yang tidak dengan cara menggunakan contoh model yang diproduksi dengan cara yang mirip dengan validasi silang untuk membangun model ensembel, tetapi itu adalah teknik canggih di luar cakupan dari pertanyaan Anda di sini.


8
Saya setuju dengan hal ini sepenuhnya dan berpikir untuk menggunakan semua data. Yang mengatakan, jika kita melatih model akhir kita menggunakan seluruh kumpulan data maka tidakkah ini menghasilkan overfitting dan dengan demikian menyabot prediksi masa depan?
Berk U.

19
Tidak! Overfitting berkaitan dengan kompleksitas model, ini tidak ada hubungannya dengan jumlah data yang digunakan untuk melatih model. Kompleksitas model berkaitan dengan metode yang digunakan model, bukan nilai yang diambil parameternya. Misalnya apakah akan memasukkan koefisien x ^ 2 serta koefisien x dalam model regresi.
Bogdanovist

17
@ Bogdanovist: Saya lebih suka mengatakan bahwa overfitting ada hubungannya dengan terlalu sedikit kasus pelatihan untuk model yang terlalu kompleks. Jadi itu (juga) ada hubungannya dengan jumlah kasus pelatihan. Tetapi memiliki lebih banyak kasus pelatihan akan mengurangi risiko overfitting (untuk kompleksitas model konstan).
cbeleites

3
@Bogdanovist For that we want to use all the data we have to come up with the best model possible.- Saat melakukan pencarian grid dengan validasi silang K-fold, apakah ini berarti Anda akan menggunakan params terbaik yang ditemukan oleh pencarian grid dan cocok dengan model pada seluruh data pelatihan, dan kemudian mengevaluasi kinerja generalisasi menggunakan set tes?
arun

4
@arun, jika Anda telah menggunakan validasi silang k-fold dan memilih model terbaik dengan parameter & parameter-hiper terbaik, maka setelah memasang model akhir pada set pelatihan, Anda tidak perlu lagi memeriksa kinerja menggunakan set tes. Ini karena Anda telah memeriksa bagaimana model dengan parameter yang ditentukan berperilaku pada data yang tidak terlihat.
Sandeep S. Sandhu

29

Biarkan saya memberikan beberapa poin selain jawaban Bogdanovist

k

Sekarang, ada beberapa asumsi dalam proses ini.


  • k

  • k
    Nk1kkk

  • Jumlah terbatas kasus berarti pengukuran kinerja akan dikenakan kesalahan acak (varians) karena jumlah terbatas kasus uji. Sumber varians ini berbeda dari (dan dengan demikian menambah) model variabl instablilty.

Perbedaan dalam kinerja yang diamati adalah karena dua sumber varians ini.

"Pilihan" yang Anda pikirkan adalah pemilihan kumpulan data: memilih salah satu model pengganti berarti memilih subset sampel pelatihan dan mengklaim bahwa subset sampel pelatihan ini mengarah ke model superior. Meskipun ini mungkin benar, biasanya "keunggulan" itu palsu. Bagaimanapun, karena memilih "yang terbaik" dari model pengganti adalah optimasi berbasis data, Anda harus memvalidasi (mengukur kinerja) model yang dipilih ini dengan data baru yang tidak diketahui. Set tes dalam validasi silang ini tidak independen karena digunakan untuk memilih model pengganti.

Anda mungkin ingin melihat makalah kami, ini tentang klasifikasi di mana hal-hal biasanya lebih buruk daripada untuk regresi. Namun, ini menunjukkan bagaimana sumber-sumber varian dan bias bertambah.
Beleites, C. dan Neugebauer, U. dan Bocklitz, T. dan Krafft, C. dan Popp, J .: Perencanaan ukuran sampel untuk model klasifikasi. Anal Chim Acta, 2013, 760, 25-33.
DOI: 10.1016 / j.aca.2012.11.007
naskah diterima di arXiv: 1211.1323


Anda dan Bogdanovist tidak setuju ketika Anda mengatakan picking "the best" of the surrogate models is a data-driven optimization, you'd need to validate (measure performance) this picked model with new unknown data. The test set within this cross validation is not independent as it was used to select the surrogate model.dan dia berkata But once we have used cross-validation to select the better performing model, we train that model (whether it be the linear regression or the neural network) on all the data.Ini cukup umum dan sangat penting bahwa pendekatan standar ditentukan
jpcgandre

Khusus untuk dataset kecil di mana mungkin meninggalkan data dari CV tidak layak tetapi risiko overfitting model Anda juga tinggi! Referensi diperlukan untuk mengklarifikasi masalah ini.
jpcgandre

5
@ jpcgandre: Saya tidak melihat perbedaan pendapat. Bogdanovist menjelaskan bagaimana sebenarnya menghitung model pilihan dari hiperparameter yang dipilih melalui validasi silang, dan saya menambahkan bahwa setelah seleksi semacam itu, model perlu menjalani tingkat validasi independen (luar) yang lain. Dengan kata lain, misalnya desain validasi tersarang: loop validasi dalam untuk pemilihan hiperparameter, loop luar untuk menguji model yang dipilih (jika Anda memiliki cukup kasus, Anda juga bisa menggunakan set tes independen).
cbeleites

5
Pengaturan validasi dalam / luar adalah untuk validasi silang yang dikenal sebagai validasi silang ganda atau bersarang, saya telah melihatnya juga bernama validasi model silang ( dx.doi.org/10.1016/j.chemolab.2006.04.021 ). Dengan set tes independen, ini sesuai dengan pemisahan dalam tiga set: train / (optimisasi) validasi / tes (= validasi akhir). Jika Anda memiliki begitu sedikit kasus sehingga Anda tidak dapat meninggalkan data untuk CV tingkat kedua, saya berpendapat bahwa Anda harus memperbaiki hyperparameter Anda dengan cara lain alih-alih mencoba mengoptimalkan dengan memilih salah satu set hyperparameter.
cbeleites

@cbeleites Saya punya pertanyaan. Kemudian untuk mendapatkan parameter model akhir, apakah Anda akan mengambil rata-rata dari hiperparameter dari setiap lipatan eksternal, dan melatih ulang seluruh dataset menggunakan hiperparameter rata-rata itu? Atau akan melakukan pencarian hyperparameter di CV reguler, kemudian mengkonfirmasi stabilitas metode ini menggunakan CV bersarang berulang juga bekerja?
Michelle

11

Saya menemukan artikel yang sangat bagus ini. Bagaimana Melatih Model Pembelajaran Mesin Akhir sangat membantu dalam membersihkan semua kebingungan yang saya miliki mengenai penggunaan CV dalam pembelajaran mesin.

Pada dasarnya kami menggunakan CV (mis. Split 80/20, k-fold, dll) untuk memperkirakan seberapa baik seluruh prosedur Anda (termasuk rekayasa data, pilihan model (yaitu algoritma) dan hiper-parameter, dll.) Akan tampil di masa depan yang tidak terlihat data. Dan begitu Anda telah memilih "prosedur" yang menang, model yang dipasang dari CV telah memenuhi tujuan mereka dan sekarang dapat dibuang. Anda kemudian menggunakan "prosedur" kemenangan yang sama dan melatih model akhir Anda menggunakan seluruh kumpulan data.


1

Itu pertanyaan yang sangat menarik. Untuk memperjelasnya, kita harus memahami perbedaan model dan evaluasi model. Kami menggunakan set pelatihan penuh untuk membangun model, dan kami berharap model ini akhirnya akan digunakan.

Evaluasi silang K lipat akan membangun model K tetapi semua akan dijatuhkan. Model K hanya digunakan untuk evaluasi. dan Ini hanya menghasilkan metrik untuk memberi tahu Anda seberapa baik model ini cocok dengan data Anda.

Misalnya, Anda memilih LinearRegression algo dan melakukan dua operasi pada set pelatihan yang sama: satu dengan validasi silang 10 kali lipat, dan yang lainnya dengan 20 kali lipat. model regresi (atau pengklasifikasi) harus sama, tetapi koefisien korelasi dan kesalahan kuadrat relatif Root berbeda.

Di bawah ini adalah dua proses untuk 10 kali lipat dan 20 kali lipat validasi silang dengan weka

Run pertama dengan 10 kali lipat

=== Run information ===
Test mode:    10-fold cross-validation
...
=== Classifier model (full training set) ===


Linear Regression Model  <---- This model is the same

Date = 844769960.1903 * passenger_numbers -711510446549.7296

Time taken to build model: 0 seconds

=== Cross-validation ===  <---- Hereafter produced different metrics
=== Summary ===

Correlation coefficient                  0.9206
Mean absolute error                35151281151.9807
Root mean squared error            42707499176.2097
Relative absolute error                 37.0147 %
Root relative squared error             38.9596 %
Total Number of Instances              144     

Run kedua dengan 20 kali lipat

=== Run information ===
...
Test mode:    20-fold cross-validation

=== Classifier model (full training set) ===


Linear Regression Model   <---- This model is the same

Date = 844769960.1903 * passenger_numbers -711510446549.7296

Time taken to build model: 0 seconds

=== Cross-validation ===  <---- Hereafter produced different metrics
=== Summary ===

Correlation coefficient                  0.9203
Mean absolute error                35093728104.8746
Root mean squared error            42790545071.8199
Relative absolute error                 36.9394 %
Root relative squared error             39.0096 %
Total Number of Instances              144     

0

Saya tidak yakin diskusi di atas sepenuhnya benar. Dalam validasi silang, kami dapat membagi data menjadi Pelatihan dan Pengujian untuk setiap proses. Dengan menggunakan data pelatihan saja, kita perlu menyesuaikan model dan memilih parameter tuning di setiap kelas model yang dipertimbangkan. Sebagai contoh, di Neural Nets parameter tuning adalah jumlah neuron dan pilihan untuk fungsi aktivasi. Untuk melakukan ini, satu memvalidasi silang dalam data pelatihan saja .

Setelah model terbaik di setiap kelas ditemukan, model paling cocok dievaluasi menggunakan data uji. Lingkaran validasi silang "luar" dapat digunakan untuk memberikan perkiraan kinerja data pengujian yang lebih baik serta perkiraan variabilitas. Diskusi kemudian dapat membandingkan kinerja tes untuk kelas yang berbeda, katakanlah Neural Nets vs. SVM. Satu kelas model dipilih, dengan ukuran model tetap, dan sekarang seluruh data digunakan untuk mempelajari model terbaik.

Sekarang, jika sebagai bagian dari algoritma pembelajaran mesin Anda ingin selalu memilih kelas model terbaik (katakan setiap minggu), maka bahkan pilihan ini perlu dievaluasi dalam data pelatihan! Pengukuran data uji tidak dapat digunakan untuk menilai pilihan kelas model jika itu adalah opsi dinamis.


0

Mengapa kami menggunakan validasi k-fold cross?

Validasi silang adalah metode untuk memperkirakan keterampilan metode pada data yang tidak terlihat. Seperti menggunakan split tes kereta.

Validasi silang secara sistematis membuat dan mengevaluasi beberapa model pada beberapa himpunan bagian dari dataset. Ini, pada gilirannya, memberikan populasi ukuran kinerja .

  • Kita dapat menghitung rata-rata dari langkah-langkah ini untuk mendapatkan gambaran tentang seberapa baik kinerja prosedur rata-rata.
  • Kita dapat menghitung standar deviasi dari langkah-langkah ini untuk mendapatkan gambaran tentang seberapa banyak keterampilan prosedur diharapkan bervariasi dalam praktiknya.

Ini juga membantu untuk memberikan perbandingan yang lebih bernuansa dari satu prosedur ke prosedur lainnya ketika Anda mencoba untuk memilih algoritma dan prosedur persiapan data mana yang akan digunakan.

Juga, informasi ini sangat berharga karena Anda dapat menggunakan mean dan spread untuk memberikan interval kepercayaan pada kinerja yang diharapkan pada prosedur pembelajaran mesin dalam praktiknya.

referensi

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.