ฉันจะรู้ได้อย่างไรว่าวิธีการตรวจสอบข้ามที่ดีที่สุด?


36

ฉันกำลังพยายามหาวิธีการตรวจสอบข้ามที่ดีที่สุดสำหรับสถานการณ์ของฉัน

ข้อมูลต่อไปนี้เป็นเพียงตัวอย่างสำหรับการทำงานผ่านปัญหา (ใน R) แต่Xข้อมูลจริงของฉัน( xmat) มีความสัมพันธ์ซึ่งกันและกันและมีความสัมพันธ์กับองศาที่แตกต่างกับyตัวแปร ( ymat) ฉันให้รหัส R แต่คำถามของฉันไม่เกี่ยวกับ R แต่เกี่ยวกับวิธีการ Xmatรวมตัวแปร X V1 ถึง V100 ในขณะที่ymatมีตัวแปร y ตัวเดียว

set.seed(1233)
xmat           <- matrix(sample(-1:1, 20000, replace = TRUE), ncol = 100)
colnames(xmat) <- paste("V", 1:100, sep ="")
rownames(xmat) <- paste("S", 1:200, sep ="")
  # the real y data are correlated with xmat
ymat           <- matrix(rnorm(200, 70,20), ncol = 1)
rownames(ymat) <- paste("S", 1:200, sep="")

ผมอยากจะสร้างแบบจำลองสำหรับการคาดการณ์บนพื้นฐานของตัวแปรทั้งหมดในy ดังนั้นมันจะเป็นรูปแบบการถดถอยเชิงเส้นxmat y ~ V1 + V2 + V3+ ... + V100จากการตรวจสอบฉันสามารถดูวิธีการตรวจสอบข้ามสามวิธีต่อไปนี้:

  1. แบ่งข้อมูลออกเป็นครึ่งหนึ่งและใช้หนึ่งชุดสำหรับการฝึกอบรมและอีกครึ่งสำหรับการทดสอบ (การตรวจสอบความถูกต้อง)

    prop       <- 0.5 # proportion of subset data
    set.seed(1234)
      # training data set 
    training.s <- sample (1:nrow(xmat), round(prop*nrow(xmat),0))
    xmat.train <- xmat[training.s,]
    ymat.train <- ymat[training.s,]
    
      # testing data set 
    testing.s <- setdiff(1:nrow(xmat), training)
    xmat.test <- xmat[testing.s,]
    ymat.test <- ymat[testing.s,]
    
  2. การตรวจสอบความถูกต้องข้าม K-fold - ใช้การตรวจสอบความถูกต้องข้าม 10 เท่า:

    mydata <- data.frame(ymat, xmat)
    fit    <- lm(ymat ~ ., data=mydata)
    library(DAAG)
    cv.lm(df=mydata, fit, m=10) # ten-fold cross validation 
    
  3. การกำบังหนึ่งค่าหรือสองสามค่าต่อครั้ง : ในวิธีนี้เราทำการสุ่มค่าในชุดข้อมูล (y) โดยการแทนที่ด้วย NA และทำนายค่า กระบวนการซ้ำแล้วซ้ำอีกครั้ง

    n = 500 
    predicted.v <- rep(NA, n)
    real.v      <- rep(NA, n)
    
    for (i in 1:n){
      masked.id <- sample (1:nrow(xmat), 1)
      ymat1     <- ymat 
      real.v[i] <- ymat[masked.id,]
      ymat1[masked.id,] <- NA
      mydata            <- data.frame(ymat1, xmat)
      fit               <- lm(ymat1 ~ ., data=mydata)
      predicted.v[i]    <- fit$fitted.values[masked.id]
    }
    

ฉันจะรู้ได้อย่างไรว่าอะไรดีที่สุดสำหรับสถานการณ์ใด ๆ มีวิธีอื่นไหม Bootstrap validationVS CV? ตัวอย่างการทำงานจะได้รับการชื่นชม


คุณสนใจที่จะตรวจสอบความถูกต้องของข้อมูลหรือในการตรวจสอบการประมาณค่าที่คาดการณ์หรือค่าของ b-coefficients
Subhash C. Davar

ฉันสนใจที่จะตรวจสอบค่าประมาณหรือค่าสัมประสิทธิ์ที่คาดการณ์ไว้
rdorlearn

ปัญหาที่ฉันมีด้วยวิธี # 1 คือขนาดตัวอย่างเล็กกว่าที่คุณมีในความเป็นจริง ดังนั้นแถบความเชื่อมั่น / ความแปรปรวนโดยประมาณน่าจะมีขนาดใหญ่ นอกจากนี้ฉันเดาวิธี # 2 และวิธี # 3 จะคล้ายกันในประสิทธิภาพ ถ้าฉันเป็นคุณเริ่มต้นด้วยการตรวจสอบความถูกต้องข้าม K-fold สำหรับ K = 5,6, ... , 14,15 และดูว่าผลลัพธ์ของคุณคล้ายกันหรือไม่
Kian

นอกจากนี้คุณตั้งใจจะเลือกรูปแบบเพื่อลดจำนวนโควาเรียหรือไม่? 100 ดูเหมือนจะค่อนข้างเยอะ
Kian

@ user2432701 ไม่ฉันต้องการใช้งานครบ 100.
rdorlearn

คำตอบ:


34

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

ชื่อจริง:

ก) การตรวจสอบความถูกต้องไขว้เป็นชื่อทั่วไปสำหรับเทคนิคการประมาณ / การวัดทั้งหมดที่ใช้ชุดทดสอบที่แตกต่างจากชุดรถไฟ คำพ้องความหมาย: การประมาณค่านอกตัวอย่างหรือการสุ่มตัวอย่างพิเศษ Antonym: การประมาณค่าในตัวอย่าง

การประมาณในตัวอย่างเป็นเทคนิคที่ใช้ข้อมูลบางอย่างในชุดฝึกอบรมเพื่อประเมินคุณภาพของแบบจำลอง (ไม่จำเป็นต้องมีข้อผิดพลาด) นี่เป็นเรื่องธรรมดามากถ้าโมเดลมีอคติสูง - นั่นคือ - ทำให้มีสมมติฐานที่แข็งแกร่งเกี่ยวกับข้อมูล ในโมเดลเชิงเส้น (โมเดลไบแอสสูง) ตามตัวอย่างของคำถามเราใช้ R-squared, AIC, BIC, deviance เป็นการวัดคุณภาพของแบบจำลองทั้งหมดนี้เป็นตัวประมาณในตัวอย่าง ใน SVM ตัวอย่างเช่นข้อมูลอัตราส่วนในเวกเตอร์สนับสนุนต่อจำนวนข้อมูลเป็นการประมาณค่าในข้อผิดพลาดของแบบจำลอง

มีเทคนิคการตรวจสอบข้ามหลายประการ:

b) การค้างเอาไว้เป็นวิธีที่ # 1 ข้างต้น แบ่งชุดการฝึกอบรมและการทดสอบหนึ่ง มีประวัติการถกเถียงและฝึกฝนอย่างยาวนานเกี่ยวกับขนาดสัมพัทธ์ของชุดการฝึกอบรมและการทดสอบ

c) k -fold - วิธีที่ # 2 ข้างต้น มาตรฐานสวย

d) การลาออกครั้งเดียว - วิธีที่ # 3 ด้านบน

e) bootstrap : หากชุดของคุณมีข้อมูลNให้สุ่มเลือกตัวอย่างN ที่มีการเปลี่ยนจากชุดและใช้เป็นการฝึกอบรม ข้อมูลจากชุดต้นฉบับที่ไม่ได้รับการเก็บตัวอย่างตลอดเวลาจะถูกใช้เป็นชุดทดสอบ มีวิธีที่แตกต่างกันในการคำนวณการประเมินความผิดพลาดขั้นสุดท้ายของแบบจำลองซึ่งใช้ทั้งข้อผิดพลาดสำหรับชุดทดสอบ (ตัวอย่างนอก) และข้อผิดพลาดสำหรับชุดรถไฟ (ในตัวอย่าง) ดูตัวอย่าง bootstrap .632 ฉันคิดว่ายังมีสูตร. 632+ ซึ่งเป็นสูตรที่ประเมินข้อผิดพลาดที่แท้จริงของโมเดลโดยใช้ข้อผิดพลาดทั้งจากตัวอย่างและในตัวอย่าง

ฉ) มุมฉากกับการเลือกวิธีการด้านบนเป็นปัญหาของการทำซ้ำ ยกเว้นการลาออกหนึ่งครั้งวิธีการทั้งหมดข้างต้นสามารถทำซ้ำได้หลายครั้ง ในความเป็นจริงเราสามารถพูดคุยเกี่ยวกับ REPEATED hold-out หรือREPEATED k -fold เพื่อความเป็นธรรมมักใช้วิธีบูตสแตรปในรูปแบบซ้ำ ๆ


คำถามต่อไปคือวิธีไหน"ดีกว่า" ปัญหาคือสิ่งที่ "ดีกว่า" หมายถึง

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

2) ทางเลือกที่สองคือความเร็วหรือวิธีการที่ดีในแต่ละวิธีเหล่านี้มาบรรจบกับข้อผิดพลาดของตัวแบบที่แท้จริง (ถ้าพวกเขาไม่ลำเอียง) ฉันเชื่อว่านี่ยังคงเป็นหัวข้อของการวิจัย ให้ฉันชี้ไปที่เอกสารทั้งสองนี้ (ด้านหลังจ่ายผนัง) แต่นามธรรมทำให้เราเข้าใจว่าพวกเขาพยายามทำอะไร นอกจากนี้สังเกตว่ามันเป็นเรื่องธรรมดามากที่จะเรียกk -fold ว่า "cross-validation" ด้วยตัวเอง

อาจมีเอกสารอื่น ๆ อีกมากมายในหัวข้อเหล่านี้ นี่เป็นเพียงตัวอย่างบางส่วน

3) อีกแง่มุมของ "ดีกว่า" คือ: เนื่องจากการวัดข้อผิดพลาดของโมเดลโดยใช้หนึ่งในเทคนิคข้างต้นคุณจะมั่นใจได้อย่างไรว่าข้อผิดพลาดของโมเดลที่ถูกต้องนั้นอยู่ใกล้

โดยทั่วไปแล้วในกรณีนี้คุณต้องการใช้มาตรการหลายอย่างของข้อผิดพลาดและคำนวณช่วงความเชื่อมั่น (หรือช่วงเวลาที่น่าเชื่อถือหากคุณทำตามวิธีการแบบเบย์) ในกรณีนี้ปัญหาคือเท่าใดคุณสามารถเชื่อถือความแปรปรวนของชุดของการวัดข้อผิดพลาด โปรดสังเกตว่ายกเว้นการลาออกหนึ่งครั้งเทคนิคทั้งหมดข้างต้นจะให้การวัดที่แตกต่างกันมากมาย ( k การวัดสำหรับk - fold , การวัดnสำหรับการระงับn -repeated ที่ผ่านมา) และทำให้คุณสามารถวัดความแปรปรวน (หรือส่วนเบี่ยงเบนมาตรฐาน ) ของชุดนี้และคำนวณช่วงความมั่นใจสำหรับการวัดความผิดพลาด

สิ่งที่นี่ค่อนข้างซับซ้อน จากสิ่งที่ฉันเข้าใจจากกระดาษไม่มีการประมาณค่าความแปรปรวนของk -fold cross-validation (ไม่ใช่ด้านหลัง paywall) ไม่มีใครเชื่อความแปรปรวนที่คุณได้รับจากk- fold - ดังนั้นเราจึงไม่สามารถสร้างช่วงความมั่นใจที่ดีจากk - เท่า นอกจากนี้จากสิ่งที่ฉันเข้าใจจากกระดาษทดสอบทางสถิติโดยประมาณสำหรับการเปรียบเทียบการจำแนกประเภทภายใต้การควบคุมการเรียนรู้ขั้นตอนวิธี (ไม่ได้อยู่เบื้องหลัง paywall) เทคนิคที่ใช้วัดซ้ำ (ซ้ำk- พับซ้ำแล้วซ้ำอีก - ไม่แน่ใจเกี่ยวกับ bootstrap) จะประมาณค่าความแปรปรวนที่แท้จริงของการวัดข้อผิดพลาด (ค่อนข้างง่ายที่จะเห็นว่า - เนื่องจากคุณสุ่มตัวอย่างจากชุด จำกัด หากคุณทำซ้ำการวัดจำนวนมาก ครั้งค่าเดียวกันจะยังคงทำซ้ำซึ่งทำให้ค่าเฉลี่ยเหมือนเดิม แต่ลดความแปรปรวน) ดังนั้นเทคนิคการวัดซ้ำ ๆ จะมองโลกในแง่ดีเกินไปในช่วงความมั่นใจ

บทความล่าสุดนี้แนะนำให้ทำ 5 ซ้ำ 2 เท่า - ซึ่งเรียกว่า CV 5 × 2 - เป็นความสมดุลที่ดีของมาตรการหลายอย่าง (10) แต่ไม่ซ้ำซ้อนมากเกินไป

แก้ไข:

แน่นอนว่ามีคำตอบที่ดีในการตรวจสอบข้ามกับบางคำถามเหล่านี้ (แม้ว่าบางครั้งพวกเขาไม่เห็นด้วยกันเอง) นี่คือบางส่วน:

การข้ามการตรวจสอบความถูกต้องหรือความร่วมมือเพื่อประเมินประสิทธิภาพการจัดหมวดหมู่?

ความแตกต่างระหว่างการตรวจสอบความถูกต้องข้ามและความร่วมมือเพื่อประเมินข้อผิดพลาดในการทำนาย

การข้ามการตรวจสอบความถูกต้องหรือความร่วมมือเพื่อประเมินประสิทธิภาพการจัดหมวดหมู่?

ทำความเข้าใจกับการบูตสแตรปสำหรับการตรวจสอบความถูกต้องและการเลือกรุ่น

โดยทั่วไปการแท็กคือเพื่อนของคุณที่นี่


ทางออกที่ดีที่สุดคืออะไร? ฉันไม่รู้ ฉันใช้ CV 5 × 2 เมื่อฉันต้องเข้มงวดมากเมื่อฉันต้องแน่ใจว่าเทคนิคหนึ่งดีกว่าอีกเทคนิคหนึ่งโดยเฉพาะในสื่อสิ่งพิมพ์ และฉันจะใช้ถือออกมาถ้าผมไม่ได้วางแผนที่จะทำให้ตัวชี้วัดของความแปรปรวนหรือเบี่ยงเบนมาตรฐานใด ๆ หรือถ้ามีข้อ จำกัด ด้านเวลา - มีเพียงการเรียนรู้รูปแบบหนึ่งในการระงับการออก


สำหรับคุณสมบัติความแปรปรวนที่ซับซ้อนของการตรวจสอบข้ามฉันคิดว่าเราต้องระวังสิ่งที่จะวัดความแปรปรวน IIRC, Bengio และคณะ มุ่งเน้นไปที่ความแปรปรวนชุดข้อมูลที่มีขนาดnสำหรับปัญหาที่มือ ซึ่งจะแตกต่างกัน (และมีขนาดใหญ่) จากความไม่แน่นอนของการสุ่มสำหรับการคาดการณ์ของรูปแบบการฝึกอบรมในชุดข้อมูลที่ผมมีอยู่ในมือ ดูอนุกรมวิธานปัญหาในกระดาษ Dietterich ที่ลิงก์ด้านบน
cbeleites รองรับโมนิก้า

7

โปรดดูหน้าวิกิพีเดียสำหรับคำนิยามวิธีการ (พวกเขาทำงานได้ดีกว่าที่ฉันสามารถทำได้ที่นี่)

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

  1. สถานการณ์ใด ๆ : ใช้k-fold cross validationกับจำนวนการทำซ้ำที่เหมาะสม (พูด 5 หรือ 10)

    • การแบ่งข้อมูลออกเป็น 1 ครึ่งการฝึกอบรมในครึ่งแรกและการตรวจสอบความถูกต้องอีกขั้นหนึ่งเป็นขั้นตอนหนึ่งในการตรวจสอบความถูกต้องไขว้แบบสองเท่าอย่างไรก็ตามขั้นตอนอื่น ๆ ที่ทำซ้ำแบบฝึกหัดเดิม ดังนั้นแยกกฎ 'แยกข้อมูลออกเป็นกลยุทธ์ครึ่ง'

    • การเรียนรู้ของเครื่องและเอกสารการทำเหมืองข้อมูลจำนวนมากใช้การตรวจสอบความถูกต้องข้ามของ k-fold (ไม่มีการอ้างอิง) ดังนั้นให้ใช้มันเว้นแต่คุณจะต้องระมัดระวังในขั้นตอนนี้

    • ตอนนี้ปล่อยให้วิธีการหนึ่งออกและวิธีอื่น ๆ เช่น ' ลาออก p ' และ ' สุ่มแยกและทำซ้ำ ' (เป็นหลักbootstrapเช่นกระบวนการที่อธิบายไว้ข้างต้น) เป็น contenders ที่ดี defintely

    • หากขนาดข้อมูลของคุณคือ N การตรวจสอบความถูกต้องแบบข้าม N-fold นั้นจะเหมือนกับการปล่อยทิ้งไว้

    • 'Leave p out' และ 'bootstrap' นั้นแตกต่างจากการตรวจสอบ k fold cross แต่ความแตกต่างสำคัญในการกำหนด folds และจำนวนการทำซ้ำ 'k' ที่เกิดขึ้น

    • ตามที่หน้า wiki กล่าวว่าทั้ง k-fold และ ' ปล่อย p out ' เป็นตัวประมาณที่เหมาะสมของ ' ประสิทธิภาพ / ความคาดหวัง ' ที่เหมาะสม (แม้ว่าการเดิมพันจะปิดลงโดยขึ้นอยู่กับความแปรปรวนของตัวประมาณค่าเหล่านี้)

  2. สถานการณ์ของคุณ:คุณมีขนาดตัวอย่าง 200 เท่านั้นเมื่อเทียบกับจำนวนสถานที่ (100) ฉันคิดว่ามีโอกาสสูงมากที่มีโมเดลเชิงเส้นหลายเส้นที่ให้ประสิทธิภาพเดียวกัน ผมขอแนะนำให้ใช้ K-พับการตรวจสอบข้ามกับ> 10 ซ้ำ เลือกค่า ak ของ 3 หรือ 5

    • เหตุผลของค่า k: ตัวเลือกทั่วไป

    • เหตุผลสำหรับมูลค่าการทำซ้ำ: ค่าที่สูงพอสมควรสำหรับการทำซ้ำอาจมีความสำคัญที่นี่เนื่องจากผลลัพธ์ของการคำนวณการตรวจสอบความถูกต้องข้ามแบบ k-fold เดี่ยวอาจมีความอ่อนไหวต่อความแตกต่าง / การสุ่มที่เราแนะนำ

ความคิดเพิ่มเติม:

  • บางทีฉันอาจจะใช้วิธีการ ' ออก p ออก ' และ ' bootstrap เช่นการแบ่งแบบสุ่มซ้ำ ' (นอกเหนือจากการตรวจสอบความถูกต้องข้าม k-fold) สำหรับการวัดประสิทธิภาพ / พอดีเดียวกันเพื่อตรวจสอบว่าผลลัพธ์ของวิธีการตรวจสอบความถูกต้องของ k-fold

  • แม้ว่าคุณต้องการที่จะใช้คุณสมบัติทั้งหมด 100 อย่างตามที่มีคนแนะนำให้ใส่ใจกับความหลากหลายของความสัมพันธ์ / ความสัมพันธ์และอาจลดจำนวนของคุณสมบัติ


ลองดูคำตอบนี้: stats.stackexchange.com/questions/69291/…
Theja

ฉันจะตัดผ่านสิ่งเหล่านี้จำนวนมากและไปที่ bootstrap การมองโลกในแง่ดีของ Efron-Gong ตามการนำไปใช้ในrmsแพ็คเกจR validateและcalibrateฟังก์ชั่น
Frank Harrell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.