การตรวจสอบความถูกต้องแบบ cross-one-out ใน python (พร้อมตัวอย่าง)
ในการประเมินประสิทธิภาพของแบบจำลองในชุดข้อมูล เราจำเป็นต้องวัดว่าการคาดการณ์ที่ทำโดยแบบจำลองนั้นตรงกับข้อมูลที่สังเกตได้ดีเพียงใด
วิธีการที่ใช้กันทั่วไปในการทำเช่นนี้เรียกว่า Leave-One-Out Cross-Validation (LOOCV) ซึ่งใช้แนวทางต่อไปนี้:
1. แบ่งชุดข้อมูลออกเป็นชุดการฝึกและชุดทดสอบ โดยใช้การสังเกตทั้งหมดยกเว้นชุดเดียวเป็นส่วนหนึ่งของชุดการฝึก
2. สร้างแบบจำลองโดยใช้ข้อมูลจากชุดการฝึกเท่านั้น
3. ใช้แบบจำลองเพื่อทำนายค่าตอบสนองของการสังเกตที่ไม่รวมอยู่ในแบบจำลอง และคำนวณค่าคลาดเคลื่อนกำลังสองเฉลี่ย (MSE)
4. ทำซ้ำขั้นตอนนี้ n ครั้ง คำนวณ MSE การทดสอบเป็นค่าเฉลี่ยของ MSE ทดสอบทั้งหมด
บทช่วยสอนนี้ให้ตัวอย่างทีละขั้นตอนของวิธีเรียกใช้ LOOCV สำหรับโมเดลที่ระบุใน Python
ขั้นตอนที่ 1: โหลดไลบรารีที่จำเป็น
ขั้นแรก เราจะโหลดฟังก์ชันและไลบรารีที่จำเป็นสำหรับตัวอย่างนี้:
from sklearn. model_selection import train_test_split
from sklearn. model_selection import LeaveOneOut
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: ดำเนินการตรวจสอบความถูกต้องแบบ Cross-One-Out
ต่อไป เราจะใส่ โมเดลการถดถอยเชิงเส้นหลายตัว เข้ากับชุดข้อมูล และดำเนินการ LOOCV เพื่อประเมินประสิทธิภาพของโมเดล
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = LeaveOneOut()
#build multiple linear regression model
model = LinearRegression()
#use LOOCV 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.1461548083469726
จากผลการวิจัยพบว่าค่าคลาดเคลื่อนสัมบูรณ์ (MAE) เท่ากับ 3.146 นั่นคือ ข้อผิดพลาดสัมบูรณ์โดยเฉลี่ยระหว่างการทำนายแบบจำลองกับข้อมูลที่สังเกตได้จริงคือ 3.146
โดยทั่วไป ยิ่งค่า MAE ต่ำ แบบจำลองก็ยิ่งสามารถทำนายการสังเกตจริงได้ดีขึ้นเท่านั้น
ตัวชี้วัดที่ใช้กันทั่วไปอีกตัวหนึ่งในการประเมินประสิทธิภาพของโมเดลคือข้อผิดพลาดรูทค่าเฉลี่ยกำลังสอง (RMSE) รหัสต่อไปนี้แสดงวิธีคำนวณหน่วยเมตริกนี้โดยใช้ LOOCV:
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = LeaveOneOut()
#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)))
3.619456476385567
จากผลลัพธ์เราจะเห็นว่าค่า Root Mean Square Error (RMSE) เท่ากับ 3.619 ยิ่ง RMSE ต่ำ โมเดลก็ยิ่งสามารถทำนายการสังเกตจริงได้ดีขึ้น
ในทางปฏิบัติ โดยทั่วไปเราจะติดตั้งโมเดลต่างๆ ไว้หลายรุ่นและเปรียบเทียบ RMSE หรือ MAE ของแต่ละรุ่นเพื่อตัดสินใจว่ารุ่นใดสร้างอัตราข้อผิดพลาดในการทดสอบต่ำที่สุด จึงเป็นรุ่นที่ดีที่สุดที่จะใช้
แหล่งข้อมูลเพิ่มเติม
บทนำโดยย่อเกี่ยวกับการตรวจสอบความถูกต้องแบบ Cross-One-Out (LOOCV)
คู่มือฉบับสมบูรณ์เกี่ยวกับการถดถอยเชิงเส้นใน Python