Cross Validation ในชุดข้อมูลขนาดเล็ก

Aug 20 2020

ฉันมีชุดข้อมูลขนาดเล็กมาก (124 ตัวอย่าง) และฉันต้องการลองดูว่าฉันได้ผลลัพธ์ที่น่าสนใจกับอัลกอริทึมการเรียนรู้ของเครื่องใน R หรือไม่

สิ่งที่ฉันทำ: ฉันแบ่งชุดข้อมูลของฉันออกเป็นการฝึกอบรม 75% และการทดสอบ 25% และฝึกฝนโมเดลที่แตกต่างกัน 6 แบบโดยมีโครงสร้างคล้ายกันดังนี้:

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)

อย่างไรก็ตามฉันเพิ่งเริ่มศึกษาเกี่ยวกับการเรียนรู้ของเครื่องและการเรียนรู้เชิงลึกและส่วนของการตรวจสอบความถูกต้องข้ามนั้นยากที่จะเข้าใจ

คำถามคือในโค้ดมีเพียงขั้นตอนการตรวจสอบความถูกต้องไขว้ภายในจำเป็นต้องทำห่วงนอกสำหรับ cv หรือไม่? ถ้าใช่ฉันจะเขียนโค้ดได้อย่างไร?

แก้ไข:

เพียงแค่การอัปเดตที่อาจเป็นประโยชน์หากมีผู้ประสบปัญหาเดียวกัน:

ฉันทำสิ่งนี้และทำงานได้ดี:

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}

ตอนนี้ฉันกำลังดำเนินการวิเคราะห์เพิ่มเติม

หากมีผู้ที่มีความเชี่ยวชาญมากกว่าพบข้อผิดพลาดโปรดแจ้งให้เราทราบ

ลิงค์นี้ช่วยฉันได้มาก: https://stackoverflow.com/questions/62183291/statistical-test-with-test-data/62193116#62193116

คำตอบ

2 cbeleitesunhappywithSX Aug 21 2020 at 06:56

มี 2 ​​ประเด็นที่ต้องพิจารณา:

  • คุณต้องมีขั้นตอนการตรวจสอบภายนอกเมื่อใดก็ตามที่คุณใช้ผลลัพธ์ของการตรวจสอบความถูกต้องภายในเพื่อปรับแต่งโมเดลของคุณ
    เหตุผลก็คือการปรับแต่งโดยการประมาณประสิทธิภาพที่มีเสียงดังทำให้ประมาณการว่ามีความเอนเอียงในแง่ดีเป็นการประมาณการประสิทธิภาพ

  • การประมาณประสิทธิภาพของคุณมีเสียงดังเนื่องจากกรณีทดสอบจำนวนน้อย (ค้นหาช่วงความเชื่อมั่นทวินามและสัดส่วนการวัด) ตัวอย่างเช่นหากคุณสังเกตเห็นการจำแนกประเภทผิด 3 ครั้งจาก 31 กรณีที่ทดสอบความแม่นยำ 90% โดยมีช่วงความเชื่อมั่น 95% 77 - 97%

    กล่าวอีกนัยหนึ่งคือเว้นแต่ว่าประสิทธิภาพที่สังเกตได้สำหรับกริดการปรับแต่งของคุณจะมีความแตกต่างอย่างสิ้นเชิงระหว่างรุ่นที่ดีที่สุดและแย่ที่สุดคุณจะไม่สามารถเลือกได้อย่างน่าเชื่อถือตามกรณีที่ทดสอบเพียงไม่กี่กรณี

จะทำอย่างไร?

  • (ซ้ำ) การตรวจสอบความถูกต้องข้ามในการตรวจสอบความถูกต้องภายใน (การเพิ่มประสิทธิภาพ) ช่วยให้คุณได้ค่าประมาณประสิทธิภาพที่เชื่อถือได้มากขึ้น (อย่าคาดหวังปาฏิหาริย์)

  • ความแม่นยำ (หรือสัดส่วนอื่น ๆ ) ขึ้นอยู่กับความไม่แน่นอนของผลต่างที่มีขนาดใหญ่มากพวกเขาต้องการขนาดตัวอย่างทดสอบที่ใหญ่มากเพื่อให้แน่ใจ พวกเขามีคุณสมบัติเพิ่มเติมที่ทำให้พวกเขาไม่เหมาะอย่างยิ่งกับการทำงานของเป้าหมายสำหรับการเพิ่มประสิทธิภาพ ดูว่าคุณสามารถใช้กฎการให้คะแนนที่เหมาะสม (เคร่งครัด)แทนได้หรือไม่

2 gunes Aug 20 2020 at 14:50

ในชุดข้อมูลขนาดเล็กเช่นกรณีของคุณขอแนะนำอย่างยิ่งเนื่องจากการแยกรถไฟ / การทดสอบอาจมีเสียงดัง ค่าประมาณประสิทธิภาพของคุณจะมีประสิทธิภาพมากขึ้นหากคุณทำ CV ภายนอก เท่าที่ฉันรู้คุณต้องเขียนรหัส CV ภายนอกด้วยตัวเองและใช้รหัสของคุณภายในลูปตามที่เป็นอยู่ สิ่งนี้อาจช่วยได้