การ Train และ Test ใน Machine Learning ด้วย Python
การ Train และ Test ใน Machine Learning เป็นกระบวนการที่สำคัญในการสร้างแบบจำลอง (model) และประเมินประสิทธิภาพของแบบจำลองที่ได้สร้างขึ้นมา โดยการ Train แบบจำลอง จะเป็นการสร้างแบบจำลองจากชุดข้อมูล (dataset) ที่มีคำตอบ (label) ที่เป็นจริง โดยการ Train แบบจำลองจะใช้ชุดข้อมูลที่มีคำตอบเพื่อเรียนรู้ความสัมพันธ์ระหว่างตัวแปร (features) และคำตอบ ซึ่งแบบจำลองจะนำไปใช้ในการทำนายคำตอบของข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน
หลังจาก Train แบบจำลองแล้ว จะทำการประเมินประสิทธิภาพของแบบจำลองด้วยการใช้ชุดข้อมูลที่ไม่มีคำตอบเพื่อทำนายคำตอบ ซึ่งเรียกว่าการ Test แบบจำลอง โดยการ Test แบบจำลองจะทำการนำชุดข้อมูลที่ไม่มีคำตอบมาใช้ทำนายคำตอบ แล้วเปรียบเทียบคำตอบจริงกับคำตอบที่แบบจำลองทำนายได้ เพื่อวัดประสิทธิภาพของแบบจำลองว่าทำนายได้ถูกต้องแค่ไหน
การ Train และ Test ใน Machine Learning สามารถทำได้หลายวิธี โดยวิธีที่นิยมใช้กันคือการแบ่งชุดข้อมูลเป็นสองส่วน ซึ่งส่วนหนึ่งจะใช้สำหรับ Train แบบจำลอง และส่วนที่เหลือจะใช้สำหรับ Test แบบจำลอง วิธีนี้เรียกว่า Holdout Validation
การ Train ใน Machine Learning มีขั้นตอนดังนี้
- สร้างโมเดล (Model) โดยใช้ Algorithm หรือวิธีการใด ๆ ที่เหมาะสมกับปัญหา และระบุพารามิเตอร์ที่เหมาะสมต่อการ Train
- สร้างชุดข้อมูลสำหรับ Train โมเดล โดยแบ่งข้อมูลออกเป็นสองส่วนคือ Training Set และ Validation Set
- นำ Training Set มา Train โมเดลโดยใช้ Algorithm หรือวิธีการที่เลือกไว้ และปรับพารามิเตอร์ต่าง ๆ ให้เหมาะสมกับข้อมูล
- ใช้ Validation Set มาวัดประสิทธิภาพของโมเดลที่ Train โดยประเมินผลของโมเดลที่ Train ด้วย Metrics ที่เลือกไว้ เช่น Accuracy, F1 Score, Precision, Recall หรืออื่น ๆ
- ปรับแก้ไขโมเดลหรือพารามิเตอร์ต่าง ๆ ตามผลการประเมินจาก Validation Set จนกว่าโมเดลจะมีประสิทธิภาพดีที่สุด
- นำโมเดลที่ Train ด้วย Training Set และ Validation Set ที่ปรับแก้ไขแล้ว มาทดสอบกับ Test Set โดยวัดผลด้วย Metrics ที่เลือกไว้ เพื่อประเมินประสิทธิภาพของโมเดลโดยทั่วไป
การ Train ใน Machine Learning นั้นเป็นขั้นตอนที่สำคัญ เนื่องจากมีผลต่อประสิทธิภาพของโมเดล และการเลือก Algorithm หรือวิธีการให้เหมาะสมกับปัญหาที่ต้องการแก้ไขก็เป็นสิ่งสำคัญที่จะมีผลต่อประสิทธิภาพของโมเดลด้วย
การ Test ใน Machine Learning
การทดสอบ (Testing) ใน Machine Learning เป็นกระบวนการที่ใช้ข้อมูลทดสอบ (test data) เพื่อประเมินประสิทธิภาพ (performance) ของโมเดลที่ได้ทำการสร้างขึ้นจากข้อมูลฝึก (training data) โดยทั่วไปแล้ว ข้อมูลทดสอบจะไม่ถูกใช้ในกระบวนการฝึกโมเดล
การทดสอบช่วยให้เราทราบว่าโมเดลของเราสามารถทำงานกับข้อมูลที่ไม่เคยเห็นมาก่อนได้ดีหรือไม่ โดยทั่วไปแล้ว เราจะทำการทดสอบโมเดลด้วยข้อมูลทดสอบเพียงครั้งเดียว แล้วใช้ผลการทดสอบเหล่านั้นเพื่อปรับปรุงโมเดลให้ดีขึ้น หรือเพื่อเปรียบเทียบประสิทธิภาพของโมเดลหลายๆ โมเดล
ในการทดสอบโมเดล มักจะใช้ฟังก์ชัน predict การทดสอบโมเดลทั่วไปมีขั้นตอนดังนี้
-
โหลดข้อมูลทดสอบ (test data) โดยแยก feature และ label ออกจากกัน
-
นำโมเดลที่ได้ทำการฝึกจากข้อมูลฝึก (training data) มาใช้กับข้อมูลทดสอบ เพื่อทำนายผลลัพธ์
-
ประเมินประสิทธิภาพของโมเดลด้วย metrics ต่างๆ เช่น accuracy, precision, recall, F1-score, AUC, หรือ ROC curve
-
ปรับปรุงโมเดลให้ดีขึ้นหากมีความจำเป็น
-
ทดสอบใหม่หลายครั้งจนกว่าประสิทธิภาพของโมเดลจะถูกต้องตามที่ต้องการ
การ Train ใน Machine Learning ด้วย Python มีขั้นตอนดังนี้
-
เตรียมข้อมูล: ต้องเตรียมข้อมูลให้เหมาะสมกับโมเดลที่จะ Train โดยทั่วไปจะมีการแบ่งข้อมูลเป็น train set และ test set เพื่อใช้ในการ Train และ Test โมเดล
-
กำหนดโมเดล: ใช้ Library ของ Machine Learning ใน Python เช่น Scikit-learn (sklearn) หรือ TensorFlow เพื่อกำหนดโมเดลที่ต้องการ Train โดยกำหนดค่าพารามิเตอร์ และอื่นๆ ที่เกี่ยวข้อง
-
Train โมเดล: นำ train set มา Train โดยใช้โมเดลที่กำหนดไว้ และปรับค่าพารามิเตอร์ตามข้อมูลที่ได้รับ
-
Test โมเดล: นำ test set มาใช้ Test โมเดลที่ได้ Train ด้วยการนับความแม่นยำ หรือใช้ตัววัดประสิทธิภาพอื่นๆ เช่น Accuracy, Precision, Recall, F1 Score เป็นต้น
-
ปรับปรุงโมเดล: หากโมเดลที่ได้ Train มีประสิทธิภาพไม่ดีพอ จะต้องนำข้อมูลไปปรับปรุงโมเดลให้ดีขึ้นโดยเปลี่ยนค่าพารามิเตอร์ หรือใช้โมเดลอื่นที่ดีกว่า
การ Test ด้วย Python มักจะทำผ่านขั้นตอนดังนี้
- แบ่งข้อมูลเป็น Train set และ Test set
- Train model ด้วย Train set
- Test model ด้วย Test set
- วัดประสิทธิภาพของ model โดยใช้ metric เช่น accuracy, precision, recall, F1-score หรืออื่นๆ
โดยใน Python มี library หลายอย่างที่สามารถใช้ในการ Test model ได้ เช่น scikit-learn, TensorFlow, Keras, PyTorch และอื่นๆ
ตัวอย่าง
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# โหลดข้อมูลและเตรียมข้อมูล
X, y = load_data()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# กำหนดโมเดล
model = LinearRegression()
# Train โมเดล
model.fit(X_train, y_train)
# Test โมเดล
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
# แสดงผลลัพธ์
print("Predicted values:", y_pred)
print("True values:", y_test)
print("Mean Squared Error:", mse)
# แสดงกราฟ
plt.scatter(X_test, y_test, color='black')
plt.plot(X_test, y_pred, color='blue', linewidth=3)
plt.xlabel('Actual')
plt.ylabel('Predicted')
plt.title('Linear Regression')
plt.show()
ตัวอย่าง การ Train และ Test ใน Machine Learning ด้วย Python โดยใช้ข้อมูล iris dataset ด้วยวิธีการแบ่งข้อมูลเป็น train/test sets และใช้ Decision Tree Classifier เป็นโมเดล
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# Load iris dataset
iris = load_iris()
# Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)
# Define the model
clf = DecisionTreeClassifier()
# Train the model on the training set
clf.fit(X_train, y_train)
# Predict the labels of the test set
y_pred = clf.predict(X_test)
# Compute the accuracy of the model
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
ผลลัพธ์ที่ได้ คือ
Accuracy: 0.9555555555555556
ในกรณีนี้ โมเดล Decision Tree Classifier ได้ความแม่นยำที่ประมาณ 95.56% ในการทำนายคลาสของข้อมูล iris ในชุดข้อมูลทดสอบ (test set) ที่แบ่งออกจากชุดข้อมูลด้วยวิธีการสุ่มเลือก (random split) โดยใช้ test_size=0.3 หรือแบ่งข้อมูลส่วนที่ใช้ทดสอบออกเป็น 30% ของข้อมูลทั้งหมด
ตัวอย่าง การ Train โมเดล Linear Regression ด้วยค่าของ Feature ต่างๆ ใน Boston Housing Dataset และทดสอบโมเดลด้วยการแบ่งข้อมูลเป็น Train set และ Test set ในอัตราส่วน 80:20 ตามลำดับ และจะแสดงผลเป็นกราฟ scatter plot แสดงความสัมพันธ์ระหว่างค่าจริง (y_test) และค่าที่โมเดลทำนายได้ (y_pred)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# โหลดข้อมูล Boston Housing Dataset
boston_dataset = load_boston()
# แบ่งข้อมูลเป็น Features (X) และ Target (y)
X = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
y = boston_dataset.target
# แบ่งข้อมูลเป็น Train set และ Test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# Train โมเดล Linear Regression
model = LinearRegression()
model.fit(X_train, y_train)
# Test โมเดล
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
# แสดงผลลัพธ์
print("Mean Squared Error:", mse)
# แสดงกราฟ
plt.scatter(y_test, y_pred)
plt.xlabel('Actual')
plt.ylabel('Predicted')
plt.title('Linear Regression')
plt.show()
ผลลัพธ์ที่ได้ คือ
Mean Squared Error: 33.44897999767641