Perkiraan varians dalam validasi silang k-fold

27

K-fold cross-validation dapat digunakan untuk memperkirakan kemampuan generalisasi dari classifier yang diberikan. Bisakah saya (atau harus saya) juga menghitung varians yang dikumpulkan dari semua validasi berjalan untuk mendapatkan estimasi yang lebih baik dari variansnya?

Jika tidak, mengapa?

Saya telah menemukan makalah yang menggunakan deviasi standar gabungan lintas berjalan validasi . Saya juga menemukan makalah yang secara eksplisit menyatakan tidak ada penduga universal untuk varian validasi . Namun, saya juga menemukan makalah yang menunjukkan beberapa penduga varians untuk kesalahan generalisasi (saya masih membaca dan mencoba memahami yang satu ini). Apa yang sebenarnya dilakukan orang (atau dilaporkan) dalam praktik?

EDIT: Ketika CV digunakan untuk mengukur kesalahan klasifikasi mentah (yaitu sampel telah diberi label dengan benar atau belum; misalnya benar atau salah) maka mungkin tidak masuk akal untuk berbicara tentang varian yang dikumpulkan. Namun, saya berbicara tentang kasus di mana statistik yang kami perkirakan memiliki varians yang ditentukan. Jadi, untuk lipatan tertentu, kita bisa mendapatkan nilai statistik dan estimasi varians. Tampaknya tidak benar untuk membuang informasi ini dan hanya mempertimbangkan statistik rata-rata. Dan sementara saya sadar saya dapat membangun estimasi varians menggunakan metode bootstrap, (jika saya tidak salah) melakukan hal itu masih akan mengabaikan varians flip dan hanya mengambil perkiraan statistik menjadi pertimbangan (ditambah membutuhkan daya komputasi yang jauh lebih banyak).

Cesar
sumber
Apakah Anda menghitung varians dengan mempertimbangkan dua cara yang mungkin untuk melihat apakah mereka sangat berbeda satu sama lain?
zeferino
Ya saya lakukan. Dalam beberapa percobaan ada perubahan sekitar urutan besarnya antara varians dan varians dikumpulkan untuk sampel pelatihan. Tidak ada banyak perbedaan untuk sampel validasi. Perubahan yang lebih besar tampaknya dikaitkan dengan model yang kurang akurat.
Cesar
1
@ Cesar: pengamatan bagus: model Anda sangat tidak stabil (varians tinggi di antara iterasi). Dalam klasifikasi (kecuali jika pengklasifikasi lebih buruk daripada menebak), prediksi yang tidak stabil akan menyebabkan prediksi yang salah. Pemikiran ilustratif untuk itu adalah bahwa penyimpangan dari prediksi yang benar akan selalu mengarah ke "salah", tidak ada terlalu tinggi yang akan dibatalkan dengan terlalu rendah.
Cbeleites mendukung Monica
1
@cbeleites: bukankah ini agak diharapkan, karena perubahan varians besar terjadi sebagian besar dengan model yang menunjukkan tingkat kesalahan yang lebih tinggi? Omong-omong, pembaruan yang bagus tentang jawaban Anda. Saya masih harus membacanya dengan lebih hati-hati, tetapi saya sudah sangat berterima kasih. Terima kasih.
Cesar
1
@Cesar: Thx. Tentu saja diharapkan, cara yang kurang ilustratif untuk menyatakan itu adalah rumus varians untuk proporsi (lihat jawaban saya): semakin ekstrim tingkat kesalahan sebenarnya, semakin rendah varians, varians maksimum adalah pada tingkat kesalahan = 50%.
cbeleites mendukung Monica

Jawaban:

13

Pertanyaan yang sangat menarik, saya harus membaca makalah yang Anda berikan ... Tapi mungkin ini akan memulai kita ke arah jawaban:

Saya biasanya menangani masalah ini dengan cara yang sangat pragmatis: Saya mengulangi validasi k-fold dengan split acak baru dan menghitung kinerja seperti biasa untuk setiap iterasi. Sampel uji keseluruhan kemudian sama untuk setiap iterasi, dan perbedaan berasal dari perbedaan data.

Laporan I ini misalnya sebagai persentil ke 5 hingga 95 dari kinerja yang diamati. menukar hingga sampel untuk sampel baru dan membahasnya sebagai ukuran ketidakstabilan model.nk-1

Catatan: Saya tidak dapat menggunakan formula yang membutuhkan ukuran sampel. Karena data saya berkerumun atau struktur hierarkis (banyak pengukuran yang serupa tetapi tidak diulang dari kasus yang sama, biasanya beberapa [ratusan] lokasi berbeda dari spesimen yang sama) Saya tidak tahu ukuran sampel yang efektif.

perbandingan dengan bootstrap:

  • iterasi menggunakan pemisahan acak baru.

  • perbedaan utama adalah resampling dengan (bootstrap) atau tanpa penggantian (cv).

  • biaya komputasi hampir sama, karena saya akan memilih no dari iterasi cv no dari bootstrap iterations / k, yaitu menghitung total no model yang sama.

  • bootstrap memiliki kelebihan dibandingkan cv dalam hal beberapa sifat statistik (benar tanpa gejala, mungkin Anda membutuhkan iterasi yang lebih sedikit untuk mendapatkan perkiraan yang baik)

  • Namun, dengan cv Anda memiliki keuntungan bahwa Anda dijamin akan melakukannya

    • jumlah sampel pelatihan yang berbeda adalah sama untuk semua model (penting jika Anda ingin menghitung kurva belajar)
    • setiap sampel diuji tepat satu kali dalam setiap iterasi
  • beberapa metode klasifikasi akan membuang sampel berulang, sehingga bootstrap tidak masuk akal

Varians untuk kinerja

jawaban singkat: ya masuk akal untuk berbicara tentang varians dalam situasi di mana hanya {0,1} hasil ada.

Lihat distribusi binomial (k = keberhasilan, n = tes, p = probabilitas benar untuk sukses = rata-rata k / n):

σ2(k)=nhal(1-hal)

Varians dari proporsi (seperti tingkat hit, tingkat kesalahan, sensitivitas, TPR, ..., saya akan menggunakan dari sekarang dan p untuk nilai yang diamati dalam uji coba) adalah topik yang mengisi seluruh buku ...halhal^

  • Fleiss: Metode Statistik untuk Tarif dan Proporsi
  • Forthofer dan Lee: Biostatistics memiliki pengantar yang bagus.

Sekarang, p = k dan karenanya:hal^=kn

σ2(hal^)=hal(1-hal)n

Ini berarti bahwa ketidakpastian untuk mengukur kinerja classifier hanya bergantung pada p kinerja sebenarnya dari model yang diuji dan jumlah sampel uji.

Dalam validasi silang Anda anggap

  1. bahwa model "pengganti" memiliki kinerja sebenarnya yang sama dengan model "nyata" yang biasanya Anda buat dari semua sampel. (Rincian asumsi ini adalah bias pesimis yang terkenal).

  2. bahwa model k "pengganti" memiliki kinerja sebenarnya yang sama (setara, memiliki prediksi stabil), sehingga Anda diizinkan untuk mengumpulkan hasil tes k.
    Tentu saja tidak hanya model k "pengganti" dari satu iterasi cv yang dapat digabungkan tetapi model ki dari iterasi k-fold cv.

Mengapa iterate?

Hal utama yang iterasi katakan adalah ketidakstabilan model (prediksi), yaitu varian prediksi model yang berbeda untuk sampel yang sama.

hal^

Dan ya, ini informasi penting.

nbHaiHaitstrSebuahhalknsayater. cvn-1nσ2(hal^)=hal(1-hal)n

halknhal^n

Jika Anda mengamati ketidakstabilan model, rata-rata gabungan adalah perkiraan yang lebih baik dari kinerja sebenarnya. Varians antara iterasi adalah informasi penting, dan Anda bisa membandingkannya dengan varians minimal yang diharapkan untuk serangkaian uji ukuran n dengan kinerja rata-rata kinerja sebenarnya di atas semua iterasi.

Cbeleites mendukung Monica
sumber
Anda beralih dengan pemisahan acak baru, dengan penggantian, seperti di bootstrap? Atau Anda mengulangi k-fold cross-validation beberapa kali? Ini menarik, karena sepertinya bootstrap tidak seperti itu tetapi bisa berfungsi seperti itu. Tetapi berapa banyak replikasi yang Anda lakukan? Ini bisa menjadi sangat mahal dengan mudah.
Cesar
@ Cesar: sangat mirip dengan bootstrap, lihat jawaban yang diperluas.
Cbeleites mendukung Monica
Bagaimana CV meninggalkan "jumlah sampel pelatihan yang berbeda" untuk setiap model, tetapi bootstrap tidak? Saya tidak mengikuti, karena CV "set data ulangan" adalah kombinasi pengamatan yang berbeda - bagaimana mereka bisa memberikan jumlah pengamatan berbeda yang sama? Mungkin Anda berasumsi bahwa setiap catatan berbeda dalam set pelatihan asli?
probabilityislogic
@probabilityislogic: set data replikasi CV lebih kecil dari set data asli. Dengan demikian, berbagai ulangan seperti itu dapat diproduksi bahkan dengan resampling tanpa penggantian. Resampling dengan penggantian Anda dapat menggambar catatan yang sama beberapa kali. Dengan demikian, jumlah rekaman unik dapat bervariasi. Ya, saya menganggap catatan asli berbeda. Untuk menjaga kemandirian statistik yang penting bagi banyak aplikasi, resampling harus dilakukan pada level tertinggi dari hirarki data. (Misalnya saya bekerja dengan data pasien dengan ratusan baris untuk setiap pasien =>
sampel ulang
1
n
1

Ingat, CV hanya merupakan perkiraan dan tidak pernah dapat mewakili kesalahan generalisasi 'nyata'. Bergantung pada ukuran sampel Anda (yang akan memengaruhi jumlah lipatan atau ukuran lipatan Anda), Anda dapat sangat dibatasi dalam kemampuan Anda untuk menghitung estimasi parameter apa pun dari distribusi kesalahan generalisasi. Menurut pendapat saya (dan saya telah melihatnya konon di berbagai buku teks, 'Penemuan Pengetahuan dengan Mesin Vektor Dukungan'-Lutz Hamel) Anda dapat melakukan beberapa varian bootstrap CV untuk memperkirakan distribusi kesalahan generalisasi, tetapi standar 10- 1 (misalnya) sekali dari CV tidak akan memberi Anda cukup data poin untuk membuat kesimpulan tentang kesalahan gen yang sebenarnya. Bootstrap mengharuskan Anda untuk mengambil banyak sampel dengan penggantian dari pelatihan / tes / val Anda secara efektif melakukan banyak (misalnya 1000 atau lebih) 10-1 (atau apa pun) tes CV. Anda kemudian mengambil distribusi sampel rata-rata untuk setiap tes CV sebagai perkiraan distribusi sampling dari rata-rata untuk populasi kesalahan CV dan dari sini Anda dapat memperkirakan parameter distribusi yaitu rata-rata, median, stdim maks. Q1 Q3 dll ... Ini sedikit kerja, dan menurut saya hanya benar-benar diperlukan jika aplikasi Anda cukup penting / berisiko untuk menjamin kerja ekstra. yaitu mungkin dalam lingkungan pemasaran di mana bisnis senang menjadi lebih baik daripada acak maka mungkin tidak diperlukan. TETAPI jika Anda mencoba mengevaluasi reaksi pasien terhadap obat berisiko tinggi atau memprediksi ekspektasi pendapatan untuk investasi besar, Anda mungkin lebih bijaksana untuk melakukannya.

clancy
sumber
Ini adalah perkiraan, tetapi bisa dikatakan hampir semua penggunaan statistik. Namun, ketika setiap lipatan sudah memiliki estimasi varians, tampaknya tidak benar untuk membuang informasi ini. Saya telah memperbarui pertanyaan dengan klarifikasi.
Cesar
Mungkin saya tidak mengerti. Saya tidak benar-benar mengerti mengapa Anda menderita karena perbedaan satu lipatan?
clancy
Menjalankan CV 10 kali lipat tidak murah untuk masalah khusus yang saya coba atasi. Anda benar saya bisa memperkirakan varians dengan mengambil beberapa sampel dengan penggantian seperti pada bootstrap. Tetapi mengambil sejumlah besar CV, bahkan beberapa ratus, bisa sangat tidak praktis dalam kasus saya. Saya mencari cara (jika ada) untuk menggabungkan perkiraan varians lipatan individu sehingga saya setidaknya bisa mengurangi jumlah sampel bootstrap yang dibutuhkan. Dan selain itu, rasa ingin tahu.
Cesar
ah baiklah. Mungkin kemudian varians masing-masing dari 10 lipatan berarti dari dari lipatan rata-rata keseluruhan akan menjadi variabel acak yang dipilih dari distribusi sampel untuk varian ... (yang saya pikir adalah chi sq dist atau F dist)
clancy
@clancy: dengan 10-1 maksud Anda cv cuti-satu-keluar untuk n = 10 sampel? Perhatikan bahwa untuk iterasi cuti satu tidak masuk akal.
Cbeleites mendukung Monica