การประเมินโมเดลและการตรวจสอบไขว้
ประเมินโมเดลด้วยความแม่นยำ F1 ROC-AUC และ k-fold CV
การประเมินโมเดลและการตรวจสอบไขว้ เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
การแบ่งชุดฝึก/ตรวจสอบ/ทดสอบ
ใช้การแบ่งข้อมูลออกเป็นสามส่วน ได้แก่ ชุดฝึกสำหรับปรับแบบจำลอง ชุดตรวจสอบสำหรับปรับไฮเปอร์พารามิเตอร์ และชุดทดสอบสำหรับรายงานประสิทธิภาพขั้นสุดท้าย ห้ามใช้ชุดทดสอบระหว่างการพัฒนา
from sklearn.model_selection import train_test_split
import numpy as np
X = np.random.rand(1000, 10)
y = (X[:,0] > 0.5).astype(int)
X_tr, X_rest, y_tr, y_rest = train_test_split(X, y, test_size=0.3)
X_val, X_te, y_val, y_te = train_test_split(X_rest, y_rest, test_size=0.5)คะแนนความถูกต้อง
accuracy_score คือสัดส่วนของค่าทำนายที่ถูกต้อง ควรใช้กับคลาสที่มีจำนวนสมดุลกัน ส่วนข้อมูลที่ไม่สมดุลควรเลือกใช้ F1 หรือ AUC
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))ความแม่นยำ ความครอบคลุม และ F1
สำหรับคลาสที่ไม่สมดุล: ความแม่นยำ = TP/(TP+FP), ความครอบคลุม = TP/(TP+FN) และ F1 = ค่าเฉลี่ยฮาร์มอนิกของความแม่นยำกับความครอบคลุม
from sklearn.metrics import precision_score, recall_score, f1_score, classification_report
# Use classification_report for a full summary:
print(classification_report(y_te, model.predict(X_te)))
# shows precision, recall, f1 for each classเมทริกซ์ความสับสน
เมทริกซ์ความสับสนแสดงผลบวกจริง ผลบวกปลอม ผลลบจริง และผลลบปลอม
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
cm = confusion_matrix(y_te, model.predict(X_te))
print(cm)
# [[TN FP]
# [FN TP]]เส้นโค้ง ROC และ AUC
roc_auc_score วัดพื้นที่ใต้เส้นโค้ง ROC ค่า AUC = 1.0 หมายถึงสมบูรณ์แบบ ส่วนค่า 0.5 หมายถึงการทำนายแบบสุ่ม
from sklearn.metrics import roc_auc_score, roc_curve
y_prob = model.predict_proba(X_te)[:,1]
print("AUC:", roc_auc_score(y_te, y_prob))
fpr, tpr, thresholds = roc_curve(y_te, y_prob)
# plot fpr vs tpr for the full ROC curveตัวชี้วัดการถดถอย
ใช้ mean_squared_error (MSE), root_mean_squared_error (RMSE) และ r2_score สำหรับงานการถดถอย
from sklearn.metrics import mean_squared_error, r2_score
y_pred = regression_model.predict(X_te)
mse = mean_squared_error(y_te, y_pred)
print("RMSE:", mse**0.5)
print("R²:", r2_score(y_te, y_pred))การตรวจสอบไขว้แบบ k โฟลด์
cross_val_score แบ่งข้อมูลออกเป็น k โฟลด์ ฝึกด้วยข้อมูล k-1 โฟลด์ ประเมินผลด้วยข้อมูล 1 โฟลด์ แล้วทำซ้ำทั้งหมด k ครั้ง วิธีนี้มีความน่าเชื่อถือกว่าการแบ่งข้อมูลเพียงครั้งเดียว
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
scores = cross_val_score(LogisticRegression(), X, y, cv=10, scoring="accuracy")
print(f"{scores.mean():.3f} ± {scores.std():.3f}")StratifiedKFold
ใช้ StratifiedKFold เพื่อให้แน่ใจว่าแต่ละโฟลด์มีสัดส่วนของคลาสเหมือนกัน ซึ่งสำคัญอย่างยิ่งสำหรับชุดข้อมูลที่ไม่สมดุล
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
X, y = make_classification(weights=[0.9,0.1], random_state=0)
cv = StratifiedKFold(n_splits=5)
scores = cross_val_score(LogisticRegression(), X, y, cv=cv, scoring="f1")
print("Stratified F1:", scores.mean())ความสัมพันธ์ระหว่างอคติกับความแปรปรวน
อคติสูงหมายถึงการปรับเข้ากับข้อมูลน้อยเกินไป เพราะแบบจำลองเรียบง่ายเกินไป ความแปรปรวนสูงหมายถึงการปรับเข้ากับข้อมูลมากเกินไป เพราะแบบจำลองซับซ้อนเกินไป การตรวจสอบไขว้ช่วยเปิดเผยว่าคุณกำลังพบปัญหาใด
# Underfitting: low train score AND low val score
# → increase model complexity, add features
# Overfitting: high train score, low val score
# → regularise, reduce complexity, get more data
from sklearn.model_selection import validation_curve
import numpy as np
train_sc, val_sc = validation_curve(DecisionTreeClassifier(), X, y, param_name="max_depth", param_range=range(1,10))การตรวจสอบไขว้แบบซ้อน
สำหรับการปรับไฮเปอร์พารามิเตอร์ AND การประเมินผลที่ปราศจากอคติ ให้ใช้การตรวจสอบไขว้แบบซ้อน วงรอบด้านในใช้ปรับค่า และวงรอบด้านนอกใช้ประเมินผล
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
X, y = make_classification(random_state=0)
gs = GridSearchCV(SVC(), {"C":[0.1,1,10]}, cv=5)
outer_scores = cross_val_score(gs, X, y, cv=5)
print("Nested CV accuracy:", outer_scores.mean())การปรับเทียบ
ค่าประมาณความน่าจะเป็นของตัวจำแนกอาจปรับเทียบได้ไม่ดี ใช้ CalibratedClassifierCV เพื่อให้ได้ค่าประมาณความน่าจะเป็นที่ดีขึ้น
from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y)
cal = CalibratedClassifierCV(SVC(), cv=5).fit(X_tr, y_tr)
print(cal.predict_proba(X_te[:3]))ตรวจสอบความเข้าใจ
เหตุใดจึงควรใช้การตรวจสอบไขว้แทนการแบ่งข้อมูลฝึก/ทดสอบเพียงครั้งเดียวเพื่อประเมินแบบจำลอง
สรุปทบทวน
ใช้ความถูกต้องกับปัญหาที่สมดุล และใช้ F1/AUC กับปัญหาที่ไม่สมดุล ประเมินผลด้วย cross_val_score แบบ k โฟลด์ ใช้ StratifiedKFold กับข้อมูลที่ไม่สมดุล และใช้การตรวจสอบไขว้แบบซ้อนเมื่อปรับไฮเปอร์พารามิเตอร์เพื่อให้ได้ค่าประมาณขั้นสุดท้ายที่ปราศจากอคติ ห้ามดูชุดทดสอบระหว่างการพัฒนา
คำถามที่พบบ่อย
บทเรียน “การประเมินโมเดลและการตรวจสอบไขว้” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การประเมินโมเดลและการตรวจสอบไขว้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การประเมินโมเดลและการตรวจสอบไขว้”
ประเมินโมเดลด้วยความแม่นยำ F1 ROC-AUC และ k-fold CV คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การประเมินโมเดลและการตรวจสอบไขว้” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- API ของ scikit-learn: fit, transform, predict
- โมเดลเชิงเส้น: การถดถอยและการจำแนกประเภท
- โมเดลที่ใช้ต้นไม้: ต้นไม้ตัดสินใจและป่าสุ่ม
- การประเมินโมเดลและการตรวจสอบไขว้