การตรวจสอบข้าม k-fold ใน python (ทีละขั้นตอน)
ในการประเมินประสิทธิภาพของแบบจำลองในชุดข้อมูล เราจำเป็นต้องวัดว่าการคาดการณ์ที่ทำโดยแบบจำลองนั้นตรงกับข้อมูลที่สังเกตได้ดีเพียงใด
วิธีการที่ใช้กันทั่วไปในการทำเช่นนี้เรียกว่า การตรวจสอบข้าม k-fold ซึ่งใช้แนวทางต่อไปนี้:
1. สุ่มแบ่งชุดข้อมูลออกเป็น k กลุ่ม หรือ “พับ” โดยมีขนาดเท่ากันโดยประมาณ
2. เลือกพับใดพับหนึ่งเป็นชุดอุปกรณ์ยึดเหนี่ยว ปรับเทมเพลตเป็นพับ k-1 ที่เหลือ คำนวณการทดสอบ MSE จากการสังเกตในชั้นที่ถูกดึง
3. ทำซ้ำขั้นตอนนี้ k ครั้ง ในแต่ละครั้งโดยใช้ชุดอื่นเป็นชุดแยก
4. คำนวณการทดสอบ MSE โดยรวมเป็นค่าเฉลี่ยของการทดสอบ k MSE
บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีดำเนินการตรวจสอบข้าม k-fold สำหรับโมเดลที่กำหนดใน Python
ขั้นตอนที่ 1: โหลดไลบรารีที่จำเป็น
ขั้นแรก เราจะโหลดฟังก์ชันและไลบรารีที่จำเป็นสำหรับตัวอย่างนี้:
from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd
ขั้นตอนที่ 2: สร้างข้อมูล
ต่อไป เราจะสร้าง DataFrame แพนด้าที่มีตัวแปรทำนายสองตัว x1 และ x2 และตัวแปรตอบสนอง y ตัวเดียว
df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})
ขั้นตอนที่ 3: ดำเนินการตรวจสอบข้าม K-Fold
ต่อไป เราจะใส่ โมเดลการถดถอยเชิงเส้นหลายตัว เข้ากับชุดข้อมูล และดำเนินการ LOOCV เพื่อประเมินประสิทธิภาพของโมเดล
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use k-fold CV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
cv=cv, n_jobs=-1)
#view mean absolute error
mean(absolute(scores))
3.6141267491803646
จากผลการวิจัยพบว่าค่าคลาดเคลื่อนสัมบูรณ์ (MAE) เท่ากับ 3.614 นั่นคือ ข้อผิดพลาดสัมบูรณ์โดยเฉลี่ยระหว่างการทำนายแบบจำลองกับข้อมูลที่สังเกตได้จริงคือ 3.614
โดยทั่วไป ยิ่งค่า MAE ต่ำ แบบจำลองก็ยิ่งสามารถทำนายการสังเกตจริงได้ดีขึ้นเท่านั้น
ตัวชี้วัดที่ใช้กันทั่วไปอีกตัวหนึ่งในการประเมินประสิทธิภาพของโมเดลคือข้อผิดพลาดรูทค่าเฉลี่ยกำลังสอง (RMSE) รหัสต่อไปนี้แสดงวิธีคำนวณหน่วยเมตริกนี้โดยใช้ LOOCV:
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
cv=cv, n_jobs=-1)
#view RMSE
sqrt(mean(absolute(scores)))
4.284373111711816
จากผลลัพธ์เราจะเห็นว่าค่าความผิดพลาดรากกำลังสองเฉลี่ย (RMSE) เท่ากับ 4.284
ยิ่ง RMSE ต่ำ โมเดลก็ยิ่งสามารถทำนายการสังเกตจริงได้ดีขึ้น
ในทางปฏิบัติ โดยทั่วไปเราจะติดตั้งโมเดลต่างๆ ไว้หลายรุ่นและเปรียบเทียบ RMSE หรือ MAE ของแต่ละรุ่นเพื่อตัดสินใจว่ารุ่นใดสร้างอัตราข้อผิดพลาดในการทดสอบต่ำที่สุด จึงเป็นรุ่นที่ดีที่สุดที่จะใช้
โปรดทราบว่าในตัวอย่างนี้ เราเลือกใช้การพับ k=5 แต่คุณสามารถเลือกจำนวนการพับเท่าใดก็ได้ที่คุณต้องการ
ในทางปฏิบัติ เรามักเลือกระหว่าง 5 ถึง 10 ชั้น เนื่องจากนี่เป็นจำนวนที่เหมาะสมที่สุดที่สร้างอัตราความผิดพลาดในการทดสอบที่เชื่อถือได้
คุณสามารถดูเอกสารฉบับเต็มเกี่ยวกับฟังก์ชัน KFold() ของ sklearn ได้ที่นี่
แหล่งข้อมูลเพิ่มเติม
ข้อมูลเบื้องต้นเกี่ยวกับการตรวจสอบข้าม K-Fold
คู่มือฉบับสมบูรณ์เกี่ยวกับการถดถอยเชิงเส้นใน Python
การตรวจสอบความถูกต้องแบบ Cross-One-Out ใน Python