กลยุทธ์การตรวจสอบไขว้
k-fold, stratified k-fold, leave-one-out และการแบ่งอนุกรมเวลา — ควรใช้แต่ละแบบเมื่อใด
กลยุทธ์การตรวจสอบไขว้ เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องตรวจสอบไขว้
การแบ่งข้อมูลฝึก/ทดสอบเพียงครั้งเดียวอาจให้ผลดีหรือแย่โดยบังเอิญ การตรวจสอบไขว้ประเมินซ้ำด้วยการแบ่งข้อมูลหลายรูปแบบแล้วหาค่าเฉลี่ยคะแนน ทำให้ได้ค่าประมาณประสิทธิภาพที่น่าเชื่อถือยิ่งขึ้น
การตรวจสอบไขว้แบบ K โฟลด์
KFold แบ่งข้อมูลออกเป็น K ส่วนเท่า ๆ กัน แต่ละโฟลด์จะถูกใช้เป็นชุดทดสอบหนึ่งครั้ง ส่วนที่เหลือใช้ฝึกแบบจำลอง จากนั้นจะได้คะแนน K ค่าเพื่อนำมาหาค่าเฉลี่ย
from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in kf.split(X):
Xtr, Xte = X[train_idx], X[test_idx]
ytr, yte = y[train_idx], y[test_idx]
# train and evaluate hereการตรวจสอบไขว้แบบแบ่งชั้นสำหรับการจำแนกประเภท
ในการจำแนกประเภท การแบ่งแบบ K โฟลด์ทั่วไปอาจสร้างโฟลด์ที่มีสัดส่วนของกลุ่มไม่สมดุล StratifiedKFold จะรักษาสัดส่วนของแต่ละกลุ่มไว้ในทุกโฟลด์
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in skf.split(X, y):
# each fold keeps the same class balance as the full set
passทางลัดของ cross_val_score
cross_val_score ดำเนินการวนซ้ำทั้งหมดให้คุณและส่งคืนอาร์เรย์ของคะแนนแต่ละโฟลด์ โดยจะใช้ StratifiedKFold โดยอัตโนมัติสำหรับตัวจำแนกประเภท
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy")
print(scores)
print("Mean:", scores.mean(), "Std:", scores.std())การเลือกจำนวนโฟลด์
จำนวนโฟลด์ที่มากขึ้น (เช่น 10) ให้ค่าประมาณที่มีอคติน้อยลง แต่ใช้การคำนวณมากขึ้น การตรวจสอบแบบ 5 โฟลด์เป็นจุดสมดุลที่ใช้กันทั่วไป สำหรับชุดข้อมูลขนาดเล็กมาก การเว้นไว้ทีละหนึ่งตัวอย่างจะใช้ N โฟลด์ โดยชุดทดสอบแต่ละชุดมีตัวอย่างหนึ่งรายการ
from sklearn.model_selection import LeaveOneOut, cross_val_score
loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
print("Mean:", scores.mean())TimeSeriesSplit สำหรับข้อมูลตามเวลา
สำหรับอนุกรมเวลา คุณต้องไม่ฝึกแบบจำลองด้วยข้อมูลจากอนาคต TimeSeriesSplit จะใช้ข้อมูลในอดีตฝึกแบบจำลองและใช้ช่วงข้อมูลถัดไปทดสอบเสมอ โดยขยายช่วงข้อมูลฝึกไปเรื่อย ๆ ในแต่ละโฟลด์
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
# train_idx always precedes test_idx in time
print(len(train_idx), len(test_idx))เหตุใดลำดับจึงสำคัญในอนุกรมเวลา
การสลับลำดับข้อมูลตามเวลาจะทำให้ข้อมูลจากอนาคตรั่วไหลเข้าสู่การฝึกและทำให้คะแนนสูงเกินจริง TimeSeriesSplit รักษาลำดับตามเวลาไว้ จึงทำให้การประเมินใกล้เคียงกับเงื่อนไขการพยากรณ์จริง
cross_validate สำหรับตัวชี้วัดหลายรายการ
cross_validate คล้ายกับ cross_val_score แต่ส่งคืนตัวชี้วัดหลายรายการพร้อมกัน และสามารถรวมคะแนนชุดฝึกกับเวลาในการปรับแบบจำลองได้
from sklearn.model_selection import cross_validate
results = cross_validate(
clf, X, y, cv=5,
scoring=["accuracy", "f1_macro", "roc_auc_ovr"],
return_train_score=True,
)
print(results["test_accuracy"])
print(results["test_f1_macro"])การอ่านผลลัพธ์ของ cross_validate
ผลลัพธ์เป็นพจนานุกรมที่มีคีย์ เช่น test_<metric>, train_<metric>, fit_time และ score_time การเปรียบเทียบคะแนนชุดฝึกกับชุดทดสอบช่วยวินิจฉัยการเรียนรู้เกินจริงได้
import numpy as np
gap = results["train_accuracy"].mean() - results["test_accuracy"].mean()
print("Overfit gap:", gap)
print("Avg fit time:", np.mean(results["fit_time"]))การตรวจสอบไขว้กับการรั่วไหลของข้อมูล
ปรับกระบวนการล่วงหน้า (การปรับสเกล การเข้ารหัส) ภายในวงจรการตรวจสอบไขว้เสมอ ไม่ใช่ก่อนเริ่มวงจร ใช้ Pipeline เพื่อให้แต่ละโฟลด์ปรับสเกลโดยใช้เฉพาะข้อมูลฝึกของตนเอง ซึ่งจะป้องกันการรั่วไหล
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5)การเลือกกลยุทธ์ที่เหมาะสม
ใช้ StratifiedKFold สำหรับการจำแนกประเภท ใช้ KFold ทั่วไปสำหรับการถดถอย และใช้ TimeSeriesSplit สำหรับข้อมูลตามเวลา ใส่การประมวลผลล่วงหน้าไว้ในไปป์ไลน์ และรายงานค่า mean พร้อมค่าเบี่ยงเบนมาตรฐานข้ามทุกโฟลด์
ตรวจสอบความรู้อย่างรวดเร็ว
ทดสอบความรู้เกี่ยวกับการตรวจสอบไขว้ของคุณ
สรุปบทเรียน
สรุปบทเรียน: การตรวจสอบไขว้หาค่าเฉลี่ยประสิทธิภาพจากการแบ่งข้อมูลหลายรูปแบบ ใช้ KFold สำหรับการถดถอย ใช้ StratifiedKFold สำหรับการจำแนกประเภทที่สมดุล และใช้ TimeSeriesSplit สำหรับข้อมูลตามเวลา cross_val_score ให้ตัวชี้วัดหนึ่งรายการ ส่วน cross_validate ให้หลายรายการพร้อมเวลา ควรประมวลผลล่วงหน้าภายใน Pipeline เสมอเพื่อป้องกันการรั่วไหล
คำถามที่พบบ่อย
บทเรียน “กลยุทธ์การตรวจสอบไขว้” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กลยุทธ์การตรวจสอบไขว้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กลยุทธ์การตรวจสอบไขว้”
k-fold, stratified k-fold, leave-one-out และการแบ่งอนุกรมเวลา — ควรใช้แต่ละแบบเมื่อใด คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “กลยุทธ์การตรวจสอบไขว้” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กลยุทธ์การตรวจสอบไขว้
- เจาะลึกเมตริกการจำแนกประเภท
- การค้นหาแบบกริดและการค้นหาแบบสุ่ม
- การหาค่าเหมาะที่สุดแบบเบย์ด้วย Optuna