บางทีคุณอาจคิดแบบนี้ สมมติว่าคุณมีชุดข้อมูลที่มี 100 ตัวอย่าง 90 ในคลาส 'A' และ 10 ในคลาส 'B' ในการออกแบบที่ไม่สมดุลมากถ้าคุณทำกลุ่มแบบสุ่มปกติคุณสามารถสร้างแบบจำลองในจำนวนน้อยมาก (หรือแม้กระทั่งไม่มี!) จากคลาส 'B' หากคุณกำลังสร้างแบบจำลองที่ได้รับการฝึกอบรมเกี่ยวกับข้อมูลที่มีอยู่น้อยมากหรือไม่มีเลยในชั้นเรียนอื่น ๆ คุณจะคาดหวังให้กลุ่มทำนายหากลุ่มที่มีประสิทธิภาพได้อย่างไร การตรวจสอบความถูกต้องข้ามโครงสร้างแบบแบ่งชั้นช่วยให้สามารถทำการสุ่ม แต่ยังทำให้แน่ใจว่าชุดข้อมูลที่ไม่สมดุลเหล่านี้มีบางคลาสทั้งสอง
หากต้องการแก้ไขข้อกังวลเกี่ยวกับการใช้ CV แบบแบ่งชั้นด้วยชุดข้อมูลที่ 'สมดุล' มากขึ้นให้ดูตัวอย่างโดยใช้รหัส 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
อย่างที่คุณเห็นในชุดข้อมูลที่มีความสมดุลเท่า ๆ กันจะมีการแจกแจงแบบเดียวกันโดยบังเอิญ ดังนั้น CV แบบแบ่งชั้นจึงเป็นเพียงมาตรการประกันในสถานการณ์เหล่านี้ อย่างไรก็ตามเพื่อแก้ไขความแปรปรวนที่คุณจะต้องดูการกระจายของแต่ละเท่า ในบางสถานการณ์ (แม้จะเริ่มจาก 50-50) คุณอาจมีรอยพับที่มีการแยก 30-70 โดยบังเอิญแบบสุ่ม (คุณสามารถเรียกใช้โค้ดด้านบนและดูการเกิดขึ้นจริงนี้! นี่อาจนำไปสู่รูปแบบการแสดงที่แย่ลงเพราะมันมีคลาสไม่เพียงพอที่จะทำนายได้อย่างแม่นยำซึ่งจะเป็นการเพิ่มความแปรปรวน CV โดยรวม เห็นได้ชัดว่าสิ่งนี้สำคัญกว่าเมื่อคุณมีตัวอย่าง 'จำกัด ' ที่คุณมีแนวโน้มที่จะมีความแตกต่างอย่างมากในการกระจาย
ขณะนี้มีชุดข้อมูลที่มีขนาดใหญ่มากการแบ่งชั้นอาจไม่จำเป็นเนื่องจากการพับจะมีขนาดใหญ่พอที่จะยังคงมีอย่างน้อยก็เป็นสัดส่วนที่ดีของคลาส 'rarer' อย่างไรก็ตามไม่มีการสูญเสียการคำนวณและไม่มีเหตุผลที่แท้จริงที่จะละทิ้งการแบ่งชั้นถ้าตัวอย่างของคุณไม่สมดุลไม่ว่าคุณจะมีข้อมูลมากแค่ไหนในความเห็นส่วนตัวของฉัน