Perbedaan antara validasi silang dan bootstrap untuk memperkirakan kesalahan prediksi

103

Saya ingin pemikiran Anda tentang perbedaan antara validasi silang dan bootstrap untuk memperkirakan kesalahan prediksi.

Apakah seseorang bekerja lebih baik untuk ukuran dataset kecil atau dataset besar?

hibah
sumber

Jawaban:

88

Itu datang ke varians dan bias (seperti biasa). CV cenderung kurang bias tetapi K-fold CV memiliki varian yang cukup besar. Di sisi lain, bootstrap cenderung mengurangi varians secara drastis tetapi memberikan hasil yang lebih bias (cenderung pesimistis). Metode bootstrap lain telah disesuaikan untuk menangani bias bootstrap (seperti aturan 632 dan 632+).

Dua pendekatan lain adalah "Monte Carlo CV" alias "CV cuti-keluar" yang melakukan banyak pemisahan data secara acak (semacam pelatihan mini dan uji pemisahan). Varians sangat rendah untuk metode ini dan biasnya tidak terlalu buruk jika persentase data dalam hold-out rendah. Juga, CV berulang melakukan K-fold beberapa kali dan rata-rata hasilnya mirip dengan K-fold biasa. Saya paling tidak menyukai hal ini karena menjaga bias yang rendah dan mengurangi varians.

Sunting

Untuk ukuran sampel yang besar, masalah varians menjadi kurang penting dan bagian komputasi lebih merupakan masalah. Saya masih akan tetap dengan CV berulang untuk ukuran sampel kecil dan besar.

Beberapa penelitian yang relevan di bawah ini (khususnya Kim dan Molinaro).

Referensi

Bengio, Y., & Grandvalet, Y. (2005). Bias dalam memperkirakan varian dari k-fold cross-validation. Pemodelan statistik dan analisis untuk masalah data yang kompleks, 75-95.

Braga-Neto, UM (2004). Apakah validasi silang valid untuk klasifikasi mikroarray sampel kecil Bioinformatika, 20 (3), 374–380. doi: 10.1093 / bioinformatika / btg419

Efron, B. (1983). Memperkirakan tingkat kesalahan aturan prediksi: peningkatan cross-validation. Jurnal Asosiasi Statistik Amerika, 316–331.

Efron, B., & Tibshirani, R. (1997). Peningkatan pada cross-validation: The. 632+ metode bootstrap. Jurnal Asosiasi Statistik Amerika, 548–560.

Furlanello, C., Merler, S., Chemini, C., & Rizzoli, A. (1997). Aplikasi aturan bootstrap 632+ untuk data ekologis. WIRN 97.

Jiang, W., & Simon, R. (2007). Perbandingan metode bootstrap dan pendekatan bootstrap yang disesuaikan untuk memperkirakan kesalahan prediksi dalam klasifikasi microarray. Statistik dalam Kedokteran, 26 (29), 5320-5334.

Jonathan, P., Krzanowski, W., & McCarthy, W. (2000). Tentang penggunaan validasi silang untuk menilai kinerja dalam prediksi multivarian. Statistik dan Komputasi, 10 (3), 209–229.

Kim, J.-H. (2009). Memperkirakan tingkat kesalahan klasifikasi: Validasi silang berulang, hold-out berulang dan bootstrap. Statistik Komputasi dan Analisis Data, 53 (11), 3735-3745. doi: 10.1016 / j.csda.2009.04.009

Kohavi, R. (1995). Studi validasi silang dan bootstrap untuk estimasi akurasi dan pemilihan model. Konferensi Bersama Internasional tentang Kecerdasan Buatan, 14, 1137-1145.

Martin, J., & Hirschberg, D. (1996). Statistik sampel kecil untuk tingkat kesalahan klasifikasi I: Pengukuran tingkat kesalahan.

Molinaro, AM (2005). Estimasi kesalahan prediksi: perbandingan metode resampling. Bioinformatika, 21 (15), 3301-3307. doi: 10.1093 / bioinformatika / bti499

Sauerbrei, W., & Schumacher1, M. (2000). Bootstrap dan Validasi Lintas untuk Menilai Kompleksitas Model Regresi Berbasis Data. Analisis Data Medis, 26–28.

Tibshirani, RJ, & Tibshirani, R. (2009). Koreksi bias untuk tingkat kesalahan minimum dalam validasi silang. Arxiv preprint arXiv: 0908.2904.

topepo
sumber
2
Bias Bootstrap tidak pesimistis, melainkan optimis (Simple Bootstrap tidak .0632). Ini karena Bootstrap menggunakan banyak elemen pelatihan untuk menguji model yang menyebabkan banyak kesalahan pada kesalahan sampel.
D1X
33

@ Frank Harrell telah melakukan banyak hal untuk pertanyaan ini. Saya tidak tahu referensi spesifik.

Tapi saya lebih suka melihat kedua teknik itu untuk tujuan yang berbeda. Validasi silang adalah alat yang baik ketika memutuskan model - ini membantu Anda menghindari membodohi diri sendiri dengan berpikir bahwa Anda memiliki model yang baik padahal sebenarnya Anda overfitting.

Ketika model Anda diperbaiki, kemudian menggunakan bootstrap lebih masuk akal (setidaknya bagi saya).

Ada pengantar konsep-konsep ini (ditambah tes permutasi) menggunakan R di http://www.burns-stat.com/pages/Tutor/bootstrap_resampling.html

Patrick Burns
sumber
2
Apakah masuk akal untuk menggunakan CV terlebih dahulu untuk memilih model, dan setelah itu menggunakan bootstrap pada data yang sama untuk menilai kesalahan estimasi Anda? Secara khusus saya ingin melakukan regresi linier menggunakan ML pada data dengan noise non Gaussian yang tidak diketahui.
sebhofer
9

Pemahaman saya adalah bahwa bootstrap adalah cara untuk mengukur ketidakpastian dalam model Anda sementara validasi silang digunakan untuk pemilihan model dan mengukur akurasi prediksi.

Lembah kecil
sumber
terima kasih banyak atas jawabannya. Saya pikir bootstrap lebih baik ketika Anda memiliki kumpulan data kecil (<30 obs). Tidak?
berikan
Saya akan berpikir begitu. Validasi silang mungkin tidak masuk akal ketika Anda memiliki ukuran sampel yang kecil. Anda dapat mengabaikan satu validasi silang tetapi itu cenderung terlalu optimistis.
Glen
Juga perhatikan melakukan bootstrap dengan sampel kecil akan mengarah pada beberapa perkiraan yang bias, seperti dicatat dalam makalah asli Efron.
Glen
Bukankah mengukur akurasi prediksi merupakan cara untuk mengukur ketidakpastian? Saya mengerti CV lebih umum untuk pemilihan model, tetapi katakanlah saya ingin memperkirakan AUC untuk LASSO, apakah CV atau bootstrap lebih baik?
Max Ghenis
9

Satu perbedaan adalah bahwa validasi silang, seperti jackknife, menggunakan semua titik data Anda, sedangkan bootstrap, yang mengubah sampel data Anda secara acak, mungkin tidak mengenai semua titik.

Anda dapat melakukan bootstrap selama yang Anda inginkan, yang berarti sampel ulang yang lebih besar, yang seharusnya membantu sampel yang lebih kecil.

Validasi silang atau rata-rata jackknife akan sama dengan rata-rata sampel, sedangkan rata-rata bootstrap sangat tidak mungkin sama dengan rata-rata sampel.

Karena cross-validation dan jackknife weight semua sampel menunjukkan hal yang sama, mereka harus memiliki interval kepercayaan yang lebih kecil (meskipun mungkin salah) daripada bootstrap.

Neil McGuigan
sumber
2
Neil, sepertinya setidaknya 2 dari 4 pernyataanmu salah. 1. Meskipun setiap sampel boostrap tertentu mencakup ~ 63% dari titik data asli, jika kita sampel banyak (misalnya 10k) sampel bootstrap seperti yang biasa kita lakukan, kemungkinan bahwa setiap titik akan tercakup dalam setidaknya satu dari mereka pada dasarnya adalah 100%. 2. Saya baru saja melakukan pemeriksaan numerik cepat - rata-rata sampel bootstrap dan out-of-bootstrap sangat dekat dengan rata-rata keseluruhan data. Anda dapat memeriksa diri sendiri
Kochede
Berikut kode (klik "Edit" untuk melihatnya diformat): impor numpy sebagai np, panda sebagai pd n = 1000 B = 1000 y = np.random.randn (n) meansb, meansoob = [], [] untuk b di range (B): ib = np.random.choice (n, n, ganti = True) meanb = y [ib] .mean () meansb.append (meanb) indoob = np.ones (n, dtype = bool) indoob [ib] = False meanoob = y [indoob] .mean () meansoob.append (meanoob) pd.Series (meansb) .hist (histtype = 'step') pd.Series (meansoob) .ist (histtype = 'step' ) cetak np.mean (meanb), np.mean (meansoob), pd.Series (y) .mean ()
Kochede
@Kochede "pada dasarnya 100%" bukan 100%. "Sangat dekat dengan rata-rata" tidak sama persis dengan rata-rata. Anda menggunakan kata-kata musang. Saya tidak salah
Neil McGuigan
Jadi Anda tidak hanya memberikan jawaban yang salah, tetapi Anda juga mendesak mereka dengan demagogi, ok. Cakupan data yang diharapkan oleh sampel bootstrap dengan cepat konvergen hingga 100% dengan meningkatnya jumlah sampel. Dalam percobaan di atas setelah kurang dari 10 sampel bootstrap, semua titik data terkena bootstrap. Demikian pula, harapan rata-rata sampel bootstrap sama dengan rata-rata sampel. Dan dalam percobaan di atas setelah 1000 sampel bootstrap, perbedaannya kurang dari 0,1% (gunakan np.random.rand alih-alih randn, karena untuk randn rata-rata adalah 0)
Kochede
Berikut adalah kode yang diperbarui untuk referensi Anda: import numpy as np, panda as pd; n = 1000; B = 1000; y = np.random.rand (n); meansb = []; tertutup = np.zeros (n, dtype = bool); coverage = []; #begin loop untuk b dalam rentang (B): ib = np.random.choice (n, n, ganti = True); tertutup [ib] = Benar; coverage.append (covered.sum () * 1.0 / n); meanb = y [ib] .mean (); meansb.append (meanb); #end cakupan cetak loop [: 10]; cetak np.mean (meansb), pd.Series (y) .mean (); print (np.mean (meansb) - pd.Series (y) .mean ()) / pd.Series (y) .mean ();
Kochede
2

Ini adalah dua teknik resampling:

Dalam validasi silang, kami membagi data secara acak menjadi kfold dan ini membantu dalam overfitting, tetapi pendekatan ini memiliki kelemahan. Karena menggunakan sampel acak sehingga beberapa sampel menghasilkan kesalahan besar. Untuk meminimalkan CV memiliki teknik tetapi tidak begitu kuat dengan masalah klasifikasi. Bootstrap membantu dalam hal ini, ia memperbaiki kesalahan dari pemeriksaan sampel sendiri .. untuk detail silakan merujuk ..

https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/cv_boot.pdf

Reeves
sumber