การตรวจสอบข้าม k-fold ใน r (ทีละขั้นตอน)


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

วิธีการที่ใช้กันทั่วไปในการทำเช่นนี้เรียกว่า การตรวจสอบข้าม k-fold ซึ่งใช้แนวทางต่อไปนี้:

1. สุ่มแบ่งชุดข้อมูลออกเป็น k กลุ่ม หรือ “พับ” โดยมีขนาดเท่ากันโดยประมาณ

2. เลือกพับใดพับหนึ่งเป็นชุดอุปกรณ์ยึดเหนี่ยว ปรับเทมเพลตเป็นพับ k-1 ที่เหลือ คำนวณการทดสอบ MSE จากการสังเกตในชั้นที่ถูกดึง

3. ทำซ้ำขั้นตอนนี้ k ครั้ง ในแต่ละครั้งโดยใช้ชุดอื่นเป็นชุดแยก

4. คำนวณการทดสอบ MSE โดยรวมเป็นค่าเฉลี่ยของการทดสอบ k MSE

วิธีที่ง่ายที่สุดในการดำเนินการตรวจสอบข้าม k-fold ใน R คือการใช้ฟังก์ชัน trainControl() จาก ไลบรารี คาเร็ตใน R

บทช่วยสอนนี้ให้ตัวอย่างโดยย่อของวิธีใช้ฟังก์ชันนี้เพื่อทำการตรวจสอบข้าม k-fold สำหรับโมเดลที่กำหนดใน R

ตัวอย่าง: K-Fold Cross-Validation ใน R

สมมติว่าเรามีชุดข้อมูลต่อไปนี้ใน R:

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

รหัสต่อไปนี้แสดงวิธีปรับ โมเดลการถดถอยเชิงเส้นหลายตัวให้ พอดีกับชุดข้อมูลนี้ใน R และดำเนินการตรวจสอบข้าม k-fold ด้วย k = 5 ครั้งเพื่อประเมินประสิทธิภาพของโมเดล:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5)

#fit a regression model and use k-fold CV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of k-fold CV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.018979 1 2.882348

Tuning parameter 'intercept' was held constant at a value of TRUE

ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:

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

การวัดทั้งสามค่าที่ให้ไว้ในผลลัพธ์ (RMSE, R-squared และ MAE) ช่วยให้เราเห็นแนวคิดเกี่ยวกับประสิทธิภาพของแบบจำลองกับข้อมูลที่ยังไม่ได้เผยแพร่

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

เราสามารถใช้โค้ดต่อไปนี้เพื่อตรวจสอบความพอดีของโมเดลขั้นสุดท้าย:

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

โมเดลสุดท้ายกลายเป็น:

y = 21.2672 + 0.7803*(x 1 ) – 1.12538(x 2 )

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

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

โปรดทราบว่าในตัวอย่างนี้ เราเลือกใช้การพับ k=5 แต่คุณสามารถเลือกจำนวนการพับเท่าใดก็ได้ที่คุณต้องการ ในทางปฏิบัติ เรามักเลือกระหว่าง 5 ถึง 10 ชั้น เนื่องจากนี่เป็นจำนวนที่เหมาะสมที่สุดที่สร้างอัตราความผิดพลาดในการทดสอบที่เชื่อถือได้

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *