Validasi silang bersarang untuk pemilihan model

91

Bagaimana cara menggunakan validasi silang bersarang untuk pemilihan model ?

Dari apa yang saya baca online, CV bersarang berfungsi sebagai berikut:

  • Ada loop CV dalam, di mana kami dapat melakukan pencarian grid (misalnya menjalankan K-fold untuk setiap model yang tersedia, misalnya kombinasi hyperparameter / fitur)
  • Ada lingkaran CV luar, di mana kita mengukur kinerja model yang menang di lipatan dalam, pada lipatan eksternal yang terpisah.

Pada akhir proses ini kami berakhir dengan model ( menjadi jumlah lipatan di lingkaran luar). Model-model ini adalah yang menang dalam pencarian kisi-kisi dalam CV batin, dan mereka kemungkinan berbeda (misalnya SVM dengan kernel yang berbeda, dilatih dengan fitur yang mungkin berbeda, tergantung pada pencarian kisi).KK

Bagaimana saya memilih model dari output ini? Tampak bagi saya bahwa memilih model terbaik dari model- model pemenang tidak akan menjadi perbandingan yang adil karena masing-masing model dilatih dan diuji pada berbagai bagian dataset.K

Jadi bagaimana saya bisa menggunakan CV bersarang untuk pemilihan model?

Saya juga telah membaca utas yang membahas bagaimana pemilihan model bersarang berguna untuk menganalisis prosedur pembelajaran. Apa jenis analisis / pemeriksaan yang dapat saya lakukan dengan skor yang saya dapatkan dari lipatan K luar?

Amelio Vazquez-Reina
sumber

Jawaban:

76

Bagaimana cara memilih model dari output [validasi silang luar] ini?

Jawaban singkat: Anda tidak.

Perlakukan validasi palang dalam sebagai bagian dari prosedur pemasangan model. Itu berarti bahwa pemasangan termasuk pemasangan parameter-hiper (di sinilah validasi silang dalam bersembunyi) sama seperti rutinitas model esitmasi lainnya.
Validasi silang luar memperkirakan kinerja pendekatan pemasangan model ini. Untuk itu Anda menggunakan asumsi yang biasa

  • yang model pengganti luar yang setara dengan model "nyata" yang dibangun oleh dengan semua data.kmodel.fitting.procedure
  • Atau, dalam kasus 1. rusak (bias pesimis dari resampling validasi), setidaknya model pengganti sama dengan satu sama lain. Ini memungkinkan Anda untuk mengumpulkan (rata-rata) hasil tes. Ini juga berarti bahwa Anda tidak perlu memilih di antara mereka karena Anda menganggap bahwa mereka pada dasarnya sama. Pemecahan asumsi yang kedua dan lebih lemah ini adalah ketidakstabilan model.k

Jangan tidak memilih yang terbaik yang tampaknya dari model pengganti - yang biasanya akan hanya "panen" pengujian ketidakpastian dan mengarah ke bias optimis.k

Jadi bagaimana saya bisa menggunakan CV bersarang untuk pemilihan model?

The inner CV tidak seleksi.

Tampak bagi saya bahwa memilih model terbaik dari model-model pemenang K tidak akan menjadi perbandingan yang adil karena masing-masing model dilatih dan diuji pada berbagai bagian dataset.

Anda benar karena itu bukan ide yang baik untuk memilih salah satu model pengganti . Tapi Anda salah tentang alasannya. Alasan sebenarnya: lihat di atas. Fakta bahwa mereka tidak dilatih dan diuji pada data yang sama tidak "sakit" di sini.k

  • Tidak memiliki data pengujian yang sama: seperti yang Anda ingin klaim setelah itu bahwa hasil pengujian digeneralisasikan ke data yang tidak pernah dilihat, ini tidak dapat membuat perbedaan.
  • Tidak memiliki data pelatihan yang sama:
    • jika model stabil, ini tidak membuat perbedaan: Stabil di sini berarti bahwa model tidak berubah (banyak) jika data pelatihan "terganggu" dengan mengganti beberapa kasus dengan kasus lain.
    • jika model tidak stabil, tiga pertimbangan penting:
      1. Anda benar-benar dapat mengukur apakah dan sejauh mana hal ini terjadi, dengan menggunakan iterated / repeated fold cross validation. Itu memungkinkan Anda untuk membandingkan hasil validasi silang untuk kasus yang sama yang diprediksi oleh model berbeda yang dibangun di atas data pelatihan yang sedikit berbeda.k
      2. Jika model tidak stabil, varians yang diamati pada hasil pengujian validasi silang meningkat: Anda tidak hanya memiliki varians karena fakta bahwa hanya sejumlah kasus yang diuji secara total, tetapi memiliki varian tambahan karena ketidakstabilan model (varians dalam kemampuan prediksi).k
      3. Jika ketidakstabilan adalah masalah nyata, Anda tidak dapat memperkirakan dengan baik kinerja untuk model "nyata".

Yang membawa saya ke pertanyaan terakhir Anda:

Apa jenis analisis / pemeriksaan yang dapat saya lakukan dengan skor yang saya dapatkan dari lipatan K luar?

  • periksa stabilitas prediksi (gunakan iterated / repeat-validasi silang)
  • periksa stabilitas / variasi parameter hiper yang dioptimalkan.
    Untuk satu hal, parameter hiper sebar yang liar mungkin mengindikasikan bahwa pengoptimalan internal tidak berfungsi. Untuk hal lain, ini memungkinkan Anda untuk memutuskan hyperparameters tanpa langkah optimasi yang mahal dalam situasi serupa di masa depan. Dengan mahal saya tidak merujuk pada sumber daya komputasi tetapi pada kenyataan bahwa informasi "biaya" ini yang mungkin lebih baik digunakan untuk memperkirakan parameter model "normal".

  • periksa perbedaan antara perkiraan dalam dan luar dari model yang dipilih. Jika ada perbedaan besar (bagian dalam menjadi sangat optimis), ada risiko bahwa optimisasi bagian dalam tidak berfungsi dengan baik karena overfitting.


update @ user99889's pertanyaan: Apa yang harus dilakukan jika CV luar menemukan ketidakstabilan?

Pertama-tama, mendeteksi dalam loop CV luar bahwa model tidak menghasilkan prediksi yang stabil dalam hal itu tidak benar-benar berbeda dari mendeteksi bahwa kesalahan prediktif terlalu tinggi untuk aplikasi. Ini adalah salah satu kemungkinan hasil validasi model (atau verifikasi) yang menyiratkan bahwa model yang kita miliki tidak sesuai dengan tujuannya.

Dalam komentar yang menjawab @davips, saya berpikir untuk mengatasi ketidakstabilan di CV dalam - yaitu sebagai bagian dari proses optimisasi model.

Tetapi Anda tentu saja benar: jika kita mengubah model kami berdasarkan temuan-temuan dari CV luar, diperlukan lagi pengujian independen terhadap model yang diubah.
Namun, ketidakstabilan dalam CV luar juga akan menjadi tanda bahwa optimasi tidak diatur dengan baik - jadi menemukan ketidakstabilan dalam CV luar menyiratkan bahwa CV dalam tidak menghukum ketidakstabilan dengan cara yang diperlukan - ini akan menjadi poin utama saya kritik dalam situasi seperti itu. Dengan kata lain, mengapa optimasi memungkinkan / mengarah ke model pakaian berlebihan?

Namun, ada satu kekhasan di sini bahwa IMHO dapat memaafkan perubahan lebih lanjut dari model "final" setelah pertimbangan yang cermat dari keadaan yang tepat : Ketika kami mendeteksi overfitting, setiap perubahan yang diajukan (lebih sedikit df / lebih ketat atau agregasi) ke model akan berada di arah yang kurang overfitting (atau setidaknya hyperparameters yang kurang rentan terhadap overfitting). Tujuan dari pengujian independen adalah untuk mendeteksi overfitting - underfitting dapat dideteksi oleh data yang sudah digunakan dalam proses pelatihan.

Jadi jika kita berbicara, katakanlah, tentang lebih lanjut mengurangi jumlah variabel laten dalam model PLS yang akan jinak (jika perubahan yang diusulkan akan menjadi jenis model yang sama sekali berbeda, katakanlah PLS, bukan SVM, semua taruhan akan dimatikan. ), dan saya akan lebih santai tentang hal itu jika saya tahu bahwa kita masih dalam tahap pemodelan menengah - setelah semua, jika model yang dioptimalkan masih tidak stabil, tidak ada pertanyaan bahwa lebih banyak kasus diperlukan. Selain itu, dalam banyak situasi, Anda pada akhirnya harus melakukan studi yang dirancang untuk menguji berbagai aspek kinerja dengan benar (misalnya generalisasi untuk data yang diperoleh di masa mendatang). Namun, saya bersikeras bahwa proses pemodelan penuh perlu dilaporkan, dan bahwa implikasi dari perubahan akhir ini perlu dibahas dengan cermat.

Selain itu, agregasi termasuk dan out-of-bag analog estimasi kinerja CV akan mungkin dari hasil yang sudah tersedia - yang merupakan jenis lain "post-processing" dari model yang saya bersedia mempertimbangkan jinak di sini. Namun sekali lagi, akan lebih baik jika penelitian ini dirancang dari awal untuk memeriksa bahwa agregasi tidak memberikan keuntungan dibandingkan predisi individu (yang merupakan cara lain untuk mengatakan bahwa masing-masing model stabil).


Pembaruan (2019): semakin saya memikirkan situasi ini, semakin saya mendukung pendekatan "validasi salib bersarang tampaknya tanpa bersarang" .

cbeleites
sumber
Pemilihan model Wrt, jika pengklasifikasi tidak stabil, haruskah kita memilih yang memiliki kinerja median di antara yang terbaik? Pilihan ini akan analog dengan saran Anda untuk membandingkan kinerja dalam dengan kinerja luar.
viyps
2
@davips: Jika model tidak stabil, optimasi tidak akan berfungsi (ketidakstabilan menyebabkan varians tambahan). Memilih satu model dengan kinerja median (atau rata-rata) tidak akan membantu. Sebaliknya, jika model tidak stabil saya akan merekomendasikan untuk pergi untuk model yang lebih ketat (misalnya regularisasi kuat) atau untuk membangun ansambel model (yang secara fundamental berbeda dari memilih satu model).
cbeleites
1
@ user99889: silakan lihat jawaban yang diperbarui.
cbeleites
1
@ user99889: ya - tapi jangan berharap keajaiban ada Jika stabilitas adalah masalah ketika pelatihan dengan 80% kasus (k = 5) kemungkinan akan menjadi masalah masih dengan k = 10 yaitu 90% dari n = tambahan 12,5% dibandingkan dengan 80% / k = 5 model pengganti.
cbeleites
1
@cbeleites: hipotesis terkait. Misalkan saya memutuskan untuk mencari ruang parameter c: [1,2,3]. Saya melakukan CV bersarang pada seluruh dataset saya dan menemukan kinerjanya tidak terlalu bagus. Karena itu saya memperluas ruang pencarian saya ke c: [0,5,1,1,5,2,2,5,3,3,5,4]. Sudahkah saya melakukan sesuatu yang sangat buruk? Tampaknya pada dasarnya saya telah mengubah ruang parameter saya (yang merupakan bagian dari proses pemodelan) berdasarkan pengetahuan yang didapat dari data pengujian, dan oleh karena itu perlu mengevaluasi pada dataset eksternal ke dataset saya saat ini? Senang membuat ini pertanyaan terpisah jika Anda pikir itu yang terbaik.
user0
27

Selain jawaban sempurna cebeleites (+1), gagasan dasarnya adalah bahwa validasi silang digunakan untuk menilai kinerja suatu metode untuk pemasangan suatu model, bukan dari model itu sendiri. Jika Anda perlu melakukan pemilihan model, maka Anda perlu melakukan itu secara independen di setiap lipatan prosedur validasi silang, karena itu merupakan bagian integral dari prosedur pemasangan model. Jika Anda menggunakan prosedur pemilihan model berbasis validasi silang, ini berarti Anda berakhir dengan validasi silang bersarang. Sangat membantu untuk mempertimbangkan tujuan dari setiap validasi silang - satu untuk pemilihan model, yang lain untuk estimasi kinerja.

Saya akan membuat model akhir saya dengan mencocokkan model (termasuk pemilihan model) ke seluruh dataset, setelah menggunakan validasi silang bersarang untuk mendapatkan gambaran tentang kinerja yang bisa saya harapkan dari model itu.

Dikran Marsupial
sumber
1
Mengapa Anda harus melakukannya get an idea of the performance?
viyps
1
@davips Umumnya jika metode statistik akan digunakan untuk beberapa tujuan praktis, maka pengguna akan sering ingin memiliki beberapa gagasan tentang seberapa baik kerjanya (misalnya tes skrining medis). Juga jika Anda sedang mengembangkan algoritma pembelajaran mesin, maka berguna untuk memiliki perkiraan yang tidak memihak tentang seberapa baik kinerjanya dibandingkan dengan metode yang bersaing. Ini juga merupakan cara yang berguna untuk memvalidasi apakah metode ini benar-benar berfungsi (yang tidak valid jika validasi silang digunakan baik untuk memilih parameter dan memperkirakan kinerja).
Dikran Marsupial
5
Jadi untuk benar-benar memutuskan parameter apa yang akan digunakan dalam model akhir Anda akan melakukan loop dalam sekali? Jadi jika loop dalam adalah 10 kali lipat validasi, Anda akan bertahan 1/10 dari kereta data masing-masing model ulangi ini 10 kali dan kemudian memilih nilai parameter dengan kesalahan rata-rata terkecil? Kemudian latih kembali model dengan nilai parameter pada seluruh kumpulan data?
emschorsch
2
Ya itu benar. r
Dikran Marsupial
1
@FedericoTedeschi Validasi silang perlu disarangkan, bukan hanya pemisahan yang berbeda untuk mendapatkan penduga kinerja yang tidak bias (lihat bagian 5.3 dari makalah saya jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdf ) . Secara umum saya hanya menggunakan LOOCV untuk pemilihan model untuk model yang dapat dihitung secara efisien dan akan menggunakan bootstrap / bagging untuk model dataset kecil (dengan kesalahan OOB menggantikan validasi silang luar).
Dikran Marsupial
7

Saya tidak berpikir ada orang yang benar-benar menjawab pertanyaan pertama. Dengan "Nested cross-validation", saya pikir maksudnya menggabungkannya dengan GridSearch. Biasanya GridSearch memiliki CV bawaan dan mengambil parameter pada berapa banyak lipatan yang ingin kami uji. Menggabungkan kedua hal itu menurut saya merupakan praktik yang baik tetapi model dari GridSearch dan CrossValidation bukanlah model akhir Anda. Anda harus memilih parameter terbaik dan melatih model baru dengan semua data Anda pada akhirnya, atau bahkan melakukan CrossValidation di sini juga pada data yang tidak terlihat dan kemudian jika modelnya benar-benar baik Anda melatihnya pada semua data Anda. Itu adalah model terakhir Anda.

anselal
sumber
3
untuk memperjelas, dalam python scikit-learn, GridSearchCV(refit=True)benar-benar mereparasi model pada data LENGKAP menggunakan parameter terbaik, sehingga langkah tambahan tidak diperlukan. Lihat dokumen
Paulus
Anda benar tentang opsi reparasi. Saya hanya menyatakan bahwa sudah jelas !!
anselal
"model dari GridSearch bukan model akhir Anda". Tapi poin saya adalah bahwa model pencarian kotak dengan refit = True adalah model terakhir. Apakah maksud Anda Anda dan saya berada di halaman yang sama? Tapi saya masih belum melihat di mana persarangan terjadi di pencarian Grid dengan CV. Sepertinya satu lapisan CV bagi saya (misalnya, CV 5 kali lipat dalam pencarian kisi adalah satu lapisan CV).
Paul
Kami berada di halaman yang sama tentang reparasi. Tetapi dengan CV bersarang, kami maksudkan bahwa Anda membuat loop CV lain di luar GridSearch Anda, meninggalkan beberapa data dari pelatihan dan menguji model final-final Anda untuk melihat apakah generalisasi (membuat prediksi yang baik pada data yang tidak diketahui)
anselal