Validasi Silang dalam set data kecil
Saya memiliki kumpulan data yang sangat kecil (124 sampel) dan saya ingin mencoba jika saya mendapatkan hasil yang menarik dengan beberapa algoritme pembelajaran mesin di R.
Apa yang telah saya lakukan: Saya membagi kumpulan data saya menjadi 75% pelatihan dan 25% pengujian, dan melatih enam model yang berbeda dengan struktur yang serupa sebagai berikut:
fitControl <- trainControl(## 10-fold CV
method = "repeatedcv",
number = 10,
## repeated five times
repeats = 5,
savePredictions = TRUE,
classProbs = TRUE,
summaryFunction = twoClassSummary)
model_SVM_P <- train(Group ~ ., data = training_set,
method = "svmPoly",
trControl = fitControl,
metric = "Accuracy",
verbose = FALSE,
tuneLength = 10)
Namun, saya baru mulai belajar tentang pembelajaran mesin dan pembelajaran mendalam dan bagian validasi silang masih sulit untuk dipahami.
Pertanyaannya adalah: Dalam kode hanya ada langkah validasi silang dalam, apakah perlu melakukan loop luar untuk cv? Jika ya, bagaimana cara mengkodekannya?
EDIT:
Hanya pembaruan yang dapat membantu jika seseorang lewat dengan masalah yang sama:
Saya melakukan ini dan bekerja dengan baik:
folds <- createFolds(training_set$Group,4) split_up <- lapply(folds, function(ind, dat) dat[ind,], dat = training_set) parms_list_SVM_P <- list() model_list_SVM_P <- list() for (i in 1:4) {model_SVM_P <- train(Group ~ ., data = split_up[[i]], method = "svmPoly", trControl = fitControl, metric = "Accuracy", verbose = FALSE, tuneLength = 10) model_list_SVM_P[[i]] <- model_SVM_P parms_list_SVM_P[[i]] <- model_SVM_P$bestTune}
Sekarang saya melanjutkan ke analisis lebih lanjut.
Jika seseorang dengan keahlian yang lebih tinggi menemukan kesalahan, beri tahu saya.
Tautan ini sangat membantu saya: https://stackoverflow.com/questions/62183291/statistical-test-with-test-data/62193116#62193116
Jawaban
Ada 2 hal yang perlu diperhatikan:
Anda memerlukan langkah validasi luar setiap kali Anda menggunakan hasil validasi dalam untuk menyesuaikan model Anda.
Alasannya adalah bahwa penyetelan dengan estimasi performa yang berisik menyebabkan estimasi tersebut menjadi bias secara optimis sebagai estimasi performa.Perkiraan kinerja Anda berisik karena jumlah kasus pengujian yang sedikit (cari interval kepercayaan binomial dan pengukuran proporsi). Sebagai contoh, jika Anda mengamati 3 kesalahan klasifikasi dari 31 kasus yang diuji, ini adalah akurasi 90% dengan interval kepercayaan 95% 77 - 97%.
Dengan kata lain, kecuali kinerja yang diamati untuk jaringan penyetelan Anda memiliki perbedaan mencolok antara model terbaik dan terburuk, Anda tidak dapat memilih secara andal berdasarkan pada begitu sedikit kasus yang diuji.
Apa yang harus dilakukan?
(berulang) validasi silang dalam validasi (pengoptimalan) bagian dalam memberi Anda perkiraan kinerja yang lebih andal. (Namun, jangan mengharapkan keajaiban.)
Akurasi (atau proporsi lain) tunduk pada ketidakpastian varian yang sangat besar - mereka memerlukan ukuran sampel uji yang sangat besar untuk memastikannya. Mereka memiliki karakteristik lebih lanjut yang membuatnya tidak terlalu cocok sebagai fungsional target untuk pengoptimalan. Lihat apakah Anda dapat menggunakan aturan penilaian yang (benar-benar) tepat .
Dalam kumpulan data kecil, seperti kasus Anda, sangat disarankan karena pemisahan kereta / pengujian dapat menimbulkan gangguan. Perkiraan kinerja Anda akan jauh lebih kuat jika Anda mengerjakan CV luar. Sejauh yang saya tahu, Anda perlu membuat kode CV luar sendiri dan menggunakan kode Anda di dalam loop sebagaimana adanya. Ini mungkin membantu.