Mengapa menggunakan validasi silang bertingkat? Mengapa ini tidak merusak manfaat terkait varians?


29

Saya telah diberitahu bahwa bermanfaat untuk menggunakan validasi lintas bertingkat terutama ketika kelas respons tidak seimbang. Jika salah satu tujuan validasi silang adalah untuk membantu menjelaskan keacakan sampel data pelatihan asli kami, tentu membuat setiap lipatan memiliki distribusi kelas yang sama akan bekerja melawan hal ini kecuali Anda yakin set pelatihan asli Anda memiliki distribusi kelas yang representatif.

Apakah logika saya cacat?

EDIT Saya tertarik pada apakah metode ini merusak kebaikan CV. Saya dapat melihat mengapa perlu jika Anda memiliki sampel kecil / kelas yang sangat tidak seimbang / keduanya untuk menghindari tidak memiliki perwakilan tunggal dari kelas minor dalam satu lipatan.

Makalah Apel-ke-Apel dalam Studi Validasi Lintas: Perangkap dalam Pengukuran Kinerja Klasifikasi mengedepankan kasus untuk stratifikasi dengan baik, tetapi semua argumen tampaknya berjumlah 'Stratifikasi memberikan pengamanan dan lebih konsistensi' tetapi tidak ada pengamanan yang diperlukan diberikan cukup data.

Apakah jawabannya hanya "Kami menggunakannya karena kebutuhan karena kami jarang memiliki data yang cukup." ?

Jawaban:


18

Bootstrapping berupaya mensimulasikan efek pengambilan sampel baru dari populasi, dan tidak berupaya memastikan set uji yang berbeda (residu setelah N dari N pengambilan sampel dengan penggantian).

RxK-fold Cross-validation memastikan K test fold yang berbeda tetapi kemudian diulangi R kali untuk partisi acak yang berbeda untuk memungkinkan asumsi independensi untuk K-CV, tetapi ini hilang dengan pengulangan.

Stratified Cross-validation melanggar prinsip bahwa label tes seharusnya tidak pernah dilihat sebelum statistik dihitung, tetapi ini umumnya dianggap tidak berbahaya karena satu-satunya efek adalah menyeimbangkan lipatan, tetapi hal itu menyebabkan hilangnya keragaman ( hilangnya varian yang tidak diinginkan). Itu bahkan bergerak lebih jauh dari ide Boostrap untuk membangun sampel yang mirip dengan apa yang Anda gambar secara alami dari seluruh populasi. Arguably alasan utama stratifikasi penting adalah untuk mengatasi cacat dalam algoritma klasifikasi, karena mereka terlalu mudah bias oleh representasi kelas yang terlalu banyak atau kurang. Algoritme yang menggunakan teknik penyeimbangan (baik melalui pemilihan atau pembobotan) atau mengoptimalkan ukuran peluang-benar (Kappa atau lebih disukai Informedness) kurang terpengaruh oleh ini, meskipun bahkan algoritma semacam itu bisa '

Memaksa setiap lipatan untuk memiliki setidaknya m instance dari setiap kelas, untuk beberapa m kecil, merupakan alternatif untuk stratifikasi yang berfungsi baik untuk Bootstrapping dan CV. Itu memang memiliki bias smoothing, membuat lipatan cenderung lebih seimbang daripada yang seharusnya.

Ansambel dan keragaman: Jika pengklasifikasi yang dipelajari pada lipatan pelatihan digunakan untuk fusi bukan hanya estimasi kesalahan generalisasi, meningkatnya kekakuan CV, stratified Bootstrap dan stratified CV menyebabkan hilangnya keragaman, dan berpotensi ketahanan, dibandingkan dengan Bootstrap, Bootstrap paksa dan memaksa CV.


Apakah mungkin untuk menyediakan beberapa makalah referensi tentang bagaimana stratified bootstrap "gagal" di mana force bootstrap "lebih baik"?
usεr11852 mengatakan Reinstate Monic

16

Mungkin Anda bisa memikirkannya dengan cara ini. Katakanlah Anda memiliki dataset di mana terdapat 100 sampel, 90 di kelas 'A' dan 10 di kelas 'B'. Dalam desain yang sangat tidak seimbang ini jika Anda melakukan grup acak yang normal, Anda dapat membuat model dengan sangat sedikit (atau BAHKAN TIDAK ADA!) Dari kelas 'B'. Jika Anda sedang membangun model yang dilatih pada data di mana ada sangat sedikit, atau bahkan tidak ada, dari kelas lain bagaimana Anda bisa mengharapkannya untuk memprediksi kelompok yang lebih jarang secara efektif? Validasi silang bertingkat memungkinkan untuk pengacakan tetapi juga memastikan dataset tidak seimbang ini memiliki beberapa dari kedua kelas.

Untuk menenangkan kekhawatiran tentang penggunaan CV bertingkat dengan dataset yang lebih 'seimbang', mari kita lihat contoh menggunakan kode R.

require(mlbench)
require(caret)
require(cvTools)

# using the Sonar dataset (208 samples)
data(Sonar)

# see the distribution of classes are very well balanced
prop.table(table(Sonar$Class))

> prop.table(table(Sonar$Class))

M         R 
0.5336538 0.4663462 

# stratified
# set seed for consistency
# caret::createFolds does stratified folds by default
set.seed(123)
strat <- createFolds(Sonar$Class, k=10)

# non-stratified using cvTools
set.seed(123)
folds <- cvFolds(nrow(Sonar), K=10, type="random")
df <- data.frame(fold = folds$which, index = folds$subsets)
non_strat <- lapply(split(df, df$fold), FUN=function(x) x$index)

# calculate the average class distribution of the folds
strat_dist <- colMeans(do.call("rbind", lapply(strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
    non_strat_dist <- colMeans(do.call("rbind", lapply(non_strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
strat_dist
> strat_dist
M         R 
0.5338312 0.4661688 
non_strat_dist
> non_strat_dist
M         R 
0.5328571 0.4671429 

Seperti yang Anda lihat, dalam dataset yang seimbang lipatan akan memiliki distribusi yang sama secara kebetulan. Oleh karena itu, stratifikasi CV hanyalah ukuran jaminan dalam keadaan ini. Namun, untuk mengatasi perbedaan Anda perlu melihat distribusi setiap lipatan. Dalam beberapa keadaan (bahkan mulai dari 50-50) Anda dapat memiliki lipatan yang memiliki 30-70 secara acak (Anda dapat menjalankan kode di atas dan melihat ini benar-benar membahagiakan!). Ini dapat mengarah pada model yang berkinerja lebih buruk karena tidak memiliki cukup satu kelas untuk memprediksi secara akurat sehingga meningkatkan varian CV keseluruhan. Ini jelas lebih penting ketika Anda memiliki sampel 'terbatas' di mana Anda lebih cenderung memiliki perbedaan distribusi yang sangat ekstrem.

Sekarang dengan kumpulan data yang sangat besar, stratifikasi mungkin tidak diperlukan karena lipatannya akan cukup besar untuk kemungkinan mengandung setidaknya sebagian besar kelas 'jarang'. Namun, sebenarnya tidak ada kerugian komputasi dan tidak ada alasan nyata untuk melupakan stratifikasi jika sampel Anda tidak seimbang, tidak peduli berapa banyak data yang Anda miliki dalam pendapat pribadi saya.


Ya, ini masuk akal. Namun, ini adalah kasus yang sangat spesifik dan Anda melakukannya untuk memperhitungkan kurangnya data. Jika Anda memiliki 10.000 sampel, apakah Anda akan melakukannya? Pertanyaan saya adalah, idealnya dan diberikan data yang cukup, apakah itu ide yang bagus?
James Owers

1
@ Kungfujam, itu tergantung pada seberapa tidak seimbangnya data Anda. Bahkan dengan jumlah data yang sangat besar, Anda bisa berakhir dengan sangat sedikit kelas lain (secara acak). Ada beberapa penelitian tentang ini. Meski sedikit berkencan, Kohavi melaporkan hal itu stratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validation. Tidak ada skema pengambilan sampel yang sempurna tetapi dalam desain yang tidak seimbang stratifikasi adalah pendekatan yang baik.
cdeterman

Terima kasih untuk ini. Saya baru saja menemukan kertas Kohavi. Tua tapi emas. Saya bisa melihat bahwa di kelas umum tidak seimbang sempurna dan datanya terbatas => stratifikasi umumnya lebih baik ... tetapi dengan keseimbangan yang masuk akal saya merasa seolah-olah itu adalah pelanggaran!
James Owers

@ kungfujam, bagian mana yang Anda anggap sebagai pelanggaran? K-fold secara acak kecuali mereka secara khusus memerlukan proporsi tertentu dari kelompok yang berbeda. Anda dapat menganggapnya sebagai membuat lipatan secara acak dari setiap kelompok dan menggabungkannya menjadi satu lipatan agregat sehingga mempertahankan pengacakan yang Anda khawatirkan. Dengan keseimbangan yang masuk akal (misalnya 60% -40%), kemungkinan lipatan Anda akan tetap memiliki proporsi yang sama dengan atau tanpa stratifikasi (beberapa variasi tentu saja).
cdeterman

1
Saya merasa seperti itu mengalahkan intinya. Sampel asli Anda 'acak'. Karena itu, saya berpikir bahwa CV seharusnya mencoba dan menjelaskan hal ini, menghasilkan beragam contoh, dan mengarahkan Anda untuk menghasilkan model yang lebih kuat untuk variasi dengan menghukum model yang bervariasi ketika input data berubah. Jika Anda membatasi lipatan Anda agar sesuai dengan proporsi sampel asli, saya merasa Anda menghentikannya. Anda mungkin menghasilkan model dengan bias yang lebih rendah, tetapi saya rasa itu akan memiliki varian yang lebih tinggi.
James Owers
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.