การพัฒนาโมเดลการเรียนรู้ของเครื่อง (Machine Learning) ไม่ได้หยุดอยู่เพียงแค่การเขียนโค้ดเพื่อสร้างและฝึกโมเดล หากแต่ยังรวมถึงการประเมินประสิทธิภาพความแม่นยำของโมเดลที่ได้สร้างขึ้นด้วย หนึ่งในเทคนิคยอดนิยมที่ถูกนำมาใช้เพื่อประเมินผลโมเดลคือ Cross-Validation ถึงแม้ว่า `Keras` ซึ่งเป็นหนึ่งในไลบรารีที่ได้รับความนิยมสูงสุดในการพัฒนาระบบ Deep Learning จะไม่ได้มีฟังก์ชัน Cross-Validation ในตัว แต่การใช้ร่วมกับ `Scikit-Learn` ทำให้การประเมินโมเดลผ่าน Cross-Validation เป็นไปได้อย่างสะดวกง่ายดาย
Cross-Validation เป็นเทคนิคในการประเมินโมเดลที่มีรูปแบบการแบ่งชุดข้อมูลที่ใช้ในการฝึก (Training Data) และทดสอบ (Testing Data) สลับกันไปมาในหลายครั้ง โดยทั่วไปวิธีที่นิยมคือ K-Fold Cross-Validation ซึ่งชุดข้อมูลทั้งหมดจะถูกแบ่งออกเป็น K ส่วน เช่น หาก K เท่ากับ 5 ข้อมูลจะถูกแบ่งเป็น 5 ส่วน ในการประเมินแต่ละครั้งจะใช้ 4 ส่วนในการฝึกโมเดลและอีก 1 ส่วนในการทดสอบ สลับกันไปจนครบทุกส่วน
การใช้ชุดข้อมูลเดิมซ้ำๆในการทดสอบโมเดลอาจทำให้เกิดการประเมินที่ไม่แม่นยำ เนื่องจากมีโอกาสที่โมเดลจะ Overfitting กับข้อมูลฝึก Cross-Validation ช่วยกระจายความเสี่ยงในการเกิด Overfitting โดยการใช้ฐานข้อมูลหลากหลายในการประเมินประสิทธิภาพ ซึ่งจะช่วยให้ผลลัพธ์มีความเที่ยงตรง และเสถียรมากยิ่งขึ้น
ถึงแม้ว่า Keras จะไม่มีความสามารถในการทำ Cross-Validation ในตัวเอง แต่ก็สามารถเชื่อมต่อกับ Scikit-Learn ที่มีฟังก์ชัน KFold ให้เราใช้ได้อย่างสะดวก โดยเราสามารถใช้ `KerasClassifier` หรือ `KerasRegressor` จาก `Keras` เพื่อนำโมเดลเข้าไปใช้ใน Scikit-Learn ได้
ตัวอย่างโค้ดการใช้งาน Cross-Validation ใน Keras
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score, KFold
from sklearn.datasets import make_classification
# สร้างข้อมูลตัวอย่าง
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
# สร้างโมเดลโดยใช้ Keras
def create_model():
model = Sequential()
model.add(Dense(32, input_dim=20, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
# ห่อโมเดลด้วย KerasClassifier
model = KerasClassifier(build_fn=create_model, epochs=10, batch_size=32, verbose=0)
# ทำ K-Fold Cross Validation
kfold = KFold(n_splits=5, shuffle=True, random_state=42)
results = cross_val_score(model, X, y, cv=kfold)
print(f"Cross-Validation Accuracy: {results.mean():.2f} (+/- {results.std():.2f})")
โค้ดในตัวอย่างนี้แสดงการใช้งาน Keras ในการสร้างโมเดลที่ประกอบไปด้วยเลเยอร์ Dense สองชั้น และใช้ Scikit-Learn เพื่อทำ Cross-Validation โดยใช้ K-Fold ข้อมูลจะถูกแบ่งออกเป็น 5 ส่วน (n_splits=5) และผลลัพธ์จะถูกพิมพ์ออกมาในรูปของค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน
Cross-Validation เป็นเครื่องมือสำคัญในการประเมินโมเดลการเรียนรู้ของเครื่อง ที่ช่วยให้เราสามารถมองเห็นภาพรวมของประสิทธิภาพโมเดลได้แม่นยำมากขึ้น การใช้ Keras ร่วมกับ Scikit-Learn ช่วยให้เราทำ Cross-Validation ได้ง่ายและสะดวกขึ้น ไม่เพียงเพิ่มความสามารถในการประเมิน แต่ยังช่วยให้นักเขียนโปรแกรมพัฒนาโมเดลที่มีประสิทธิภาพสูงได้อีกด้วย หากคุณสนใจที่จะศึกษาเพิ่มเติมเกี่ยวกับการพัฒนาโมเดล Machine Learning และ Deep Learning สามารถพัฒนาทักษะเหล่านี้ได้ที่โรงเรียนสอนเขียนโปรแกรม Expert Programming Tutor (EPT) ที่มีหลักสูตรรองรับทุกระดับของผู้เรียน!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM