เหตุใดจึงต้องใช้การตรวจสอบข้ามแบบแบ่งชั้น ทำไมสิ่งนี้จึงไม่ได้สร้างความเสียหายแปรปรวนที่เกี่ยวข้องกับผลประโยชน์?


28

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

ตรรกะของฉันมีข้อบกพร่องหรือไม่

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

กระดาษแอปเปิ้ลต่อแอปเปิ้ลในการศึกษาการตรวจสอบข้าม: ข้อผิดพลาดในการวัดประสิทธิภาพลักษณนามส่งต่อกรณีสำหรับการแบ่งชั้นเป็นอย่างดี แต่ข้อโต้แย้งทั้งหมดดูเหมือนจะเป็นจำนวน 'การแบ่งชั้นเป็น ข้อมูล.

คือคำตอบง่ายๆ"เราใช้มันโดยไม่จำเป็นเพราะเราไม่ค่อยมีข้อมูลเพียงพอ" ?

คำตอบ:


18

ความพยายามขุดเพื่อจำลองผลกระทบของการวาดตัวอย่างใหม่จากประชากรและไม่พยายามที่จะตรวจสอบชุดการทดสอบที่แตกต่างกัน (ตกค้างหลังจากการสุ่มตัวอย่าง N จากการแทนที่ด้วย N)

การตรวจสอบความถูกต้องแบบครอสของ RxK ช่วยให้มั่นใจได้ว่าการทดสอบแบบพับได้ K จะแตกต่างกัน แต่จากนั้นจะมีการทำซ้ำครั้ง R สำหรับการแบ่งส่วนแบบสุ่มที่แตกต่างกันเพื่อให้สมมติฐานอิสระสำหรับ K-CV

Stratified Cross-validation ละเมิดหลักการที่ว่าฉลากทดสอบไม่ควรได้รับการพิจารณาก่อนที่จะมีการคำนวณสถิติ แต่โดยทั่วไปมักจะคิดว่าไม่มีอันตรายเพราะผลกระทบเพียงอย่างเดียวคือการรักษาสมดุลของรอยพับ แต่มันนำไปสู่การสูญเสียความหลากหลาย การสูญเสียความแปรปรวนที่ไม่พึงประสงค์) มันเคลื่อนที่ได้ไกลกว่าจากแนวคิด Boostrap ในการสร้างตัวอย่างที่คล้ายกับสิ่งที่คุณวาดตามธรรมชาติจากประชากรทั้งหมด เหตุผลที่สำคัญคือการแบ่งชั้นเหตุผลสำคัญคือการระบุข้อบกพร่องในอัลกอริธึมการจำแนกเนื่องจากพวกมันมีความเอนเอียงง่ายเกินกว่าที่จะเป็นตัวแทนของคลาสหรือต่ำกว่า อัลกอริทึมที่ใช้เทคนิคการปรับสมดุล (ไม่ว่าจะโดยการเลือกหรือการถ่วงน้ำหนัก) หรือปรับการวัดโอกาสที่เหมาะสม (Kappa หรือ Informedness เด่นกว่า) จะได้รับผลกระทบน้อยกว่าแม้ว่าจะอัลกอริทึมดังกล่าวสามารถ '

การบังคับให้แต่ละโฟลด์มีอินสแตนซ์อย่างน้อย m ของแต่ละคลาสสำหรับบางเอ็มเล็ก ๆ เป็นทางเลือกในการแบ่งชั้นที่ใช้งานได้ทั้ง Bootstrapping และ CV มันมีอคติที่ราบรื่นทำให้การพับมีแนวโน้มที่จะมีความสมดุลมากกว่าที่คาดไว้

Re ตระการตาและความหลากหลาย: หากตัวแยกประเภทที่เรียนรู้ในการฝึกอบรมถูกนำมาใช้เพื่อการหลอมไม่ใช่แค่การประเมินข้อผิดพลาดทั่วไปความแข็งแกร่งที่เพิ่มขึ้นของ CV, Bootstrap แบ่งชั้นและ CV แบ่งชั้นทำให้สูญเสียความหลากหลายและอาจยืดหยุ่นเมื่อเทียบกับ Bootstrap, Bootstrap บังคับ และบังคับ CV


เป็นไปได้ไหมที่จะให้เอกสารอ้างอิงเกี่ยวกับวิธีการแบ่งชั้น bootstrap "ล้มเหลว" โดยที่ bootstrap บังคับ "ดีกว่า"?
usεr11852พูดว่า Reinstate Monic

16

บางทีคุณอาจคิดแบบนี้ สมมติว่าคุณมีชุดข้อมูลที่มี 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' อย่างไรก็ตามไม่มีการสูญเสียการคำนวณและไม่มีเหตุผลที่แท้จริงที่จะละทิ้งการแบ่งชั้นถ้าตัวอย่างของคุณไม่สมดุลไม่ว่าคุณจะมีข้อมูลมากแค่ไหนในความเห็นส่วนตัวของฉัน


ใช่มันสมเหตุสมผลแล้ว อย่างไรก็ตามนี่เป็นกรณีที่เฉพาะเจาะจงมากและคุณกำลังทำเพื่อบัญชีเนื่องจากขาดข้อมูล ถ้าคุณมี 10,000 ตัวอย่างคุณจะทำไหม คำถามของฉันคือความคิดที่ดีและให้ข้อมูลที่เพียงพอมันเป็นความคิดที่ดีหรือไม่?
James Owers

1
@ kungfujam มันขึ้นอยู่กับความไม่สมดุลของข้อมูลของคุณ แม้จะมีข้อมูลจำนวนมหาศาล แต่คุณก็สามารถจบลงด้วยคลาสอื่น ๆ น้อยมาก (แบบสุ่ม) มีงานวิจัยเกี่ยวกับเรื่องนี้ แม้ว่าจะน้อยลงวันที่Kohavistratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validationรายงานว่า ไม่มีรูปแบบการสุ่มตัวอย่างที่สมบูรณ์แบบ แต่ในการแบ่งชั้นการออกแบบที่ไม่สมดุลเป็นวิธีการที่ดี
cdeterman

ขอบคุณสำหรับสิ่งนี้. ฉันเพิ่งพบกระดาษโคฮาวี เก่า แต่มีคุณค่า. ฉันสามารถเห็นได้ว่าในชั้นเรียนทั่วไปไม่สมดุลอย่างสมบูรณ์และข้อมูลมี จำกัด => การแบ่งชั้นโดยทั่วไปดีกว่า ... แต่ได้รับความสมดุลที่สมเหตุสมผลฉันรู้สึกราวกับว่าเป็นการละเมิด!
James Owers

@kungfujam คุณคิดว่าส่วนไหนของการละเมิด? k-folds ถูกสุ่มยกเว้นพวกมันต้องการสัดส่วนเฉพาะของกลุ่มที่แตกต่างกัน คุณอาจคิดว่ามันเป็นการสร้างรอยพับของคุณจากแต่ละกลุ่มและรวมเข้าด้วยกันเป็นหนึ่งภาพรวมเพื่อคงการสุ่มที่คุณเป็นห่วง ได้รับความสมดุลที่เหมาะสม (เช่น 60% -40%) มีโอกาสที่รอยพับของคุณจะมีสัดส่วนที่คล้ายกันอยู่แล้วทั้งที่มีหรือไม่มีการแบ่งชั้น (แน่นอนบางรูปแบบ)
cdeterman

1
ฉันรู้สึกเหมือนเอาชนะจุดนี้ได้ ตัวอย่างดั้งเดิมของคุณคือ 'สุ่ม' ด้วยเหตุนี้ฉันจึงคิดว่า CV ควรจะลองทำสิ่งนี้ทำให้เกิด resamples ที่แตกต่างกันและนำคุณไปสู่การสร้างแบบจำลองที่มีความแข็งแกร่งมากขึ้นไปสู่ความแปรปรวนโดยการลงโทษแบบจำลองที่เปลี่ยนแปลงตามข้อมูลอินพุตที่เปลี่ยนแปลง หากคุณ จำกัด การพับของคุณให้ตรงกับสัดส่วนของตัวอย่างต้นฉบับฉันรู้สึกว่าคุณไม่สามารถทำได้ คุณอาจสร้างแบบจำลองที่มีอคติต่ำกว่าได้ แต่ฉันคิดว่ามันจะมีความแปรปรวนสูงกว่า
James Owers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.