0Pricing
Learn AI with Python · บทเรียน

กลยุทธ์การตรวจสอบไขว้

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. กลยุทธ์การตรวจสอบไขว้
  2. เจาะลึกเมตริกการจำแนกประเภท
  3. การค้นหาแบบกริดและการค้นหาแบบสุ่ม
  4. การหาค่าเหมาะที่สุดแบบเบย์ด้วย Optuna
← กลับไปที่ Learn AI with Python