การ 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 มีขั้นตอนดังนี้

  1. สร้างโมเดล (Model) โดยใช้ Algorithm หรือวิธีการใด ๆ ที่เหมาะสมกับปัญหา และระบุพารามิเตอร์ที่เหมาะสมต่อการ Train
  2. สร้างชุดข้อมูลสำหรับ Train โมเดล โดยแบ่งข้อมูลออกเป็นสองส่วนคือ Training Set และ Validation Set
  3. นำ Training Set มา Train โมเดลโดยใช้ Algorithm หรือวิธีการที่เลือกไว้ และปรับพารามิเตอร์ต่าง ๆ ให้เหมาะสมกับข้อมูล
  4. ใช้ Validation Set มาวัดประสิทธิภาพของโมเดลที่ Train โดยประเมินผลของโมเดลที่ Train ด้วย Metrics ที่เลือกไว้ เช่น Accuracy, F1 Score, Precision, Recall หรืออื่น ๆ
  5. ปรับแก้ไขโมเดลหรือพารามิเตอร์ต่าง ๆ ตามผลการประเมินจาก Validation Set จนกว่าโมเดลจะมีประสิทธิภาพดีที่สุด
  6. นำโมเดลที่ Train ด้วย Training Set และ Validation Set ที่ปรับแก้ไขแล้ว มาทดสอบกับ Test Set โดยวัดผลด้วย Metrics ที่เลือกไว้ เพื่อประเมินประสิทธิภาพของโมเดลโดยทั่วไป

การ Train ใน Machine Learning นั้นเป็นขั้นตอนที่สำคัญ เนื่องจากมีผลต่อประสิทธิภาพของโมเดล และการเลือก Algorithm หรือวิธีการให้เหมาะสมกับปัญหาที่ต้องการแก้ไขก็เป็นสิ่งสำคัญที่จะมีผลต่อประสิทธิภาพของโมเดลด้วย

การ Test ใน Machine Learning

การทดสอบ (Testing) ใน Machine Learning เป็นกระบวนการที่ใช้ข้อมูลทดสอบ (test data) เพื่อประเมินประสิทธิภาพ (performance) ของโมเดลที่ได้ทำการสร้างขึ้นจากข้อมูลฝึก (training data) โดยทั่วไปแล้ว ข้อมูลทดสอบจะไม่ถูกใช้ในกระบวนการฝึกโมเดล

การทดสอบช่วยให้เราทราบว่าโมเดลของเราสามารถทำงานกับข้อมูลที่ไม่เคยเห็นมาก่อนได้ดีหรือไม่ โดยทั่วไปแล้ว เราจะทำการทดสอบโมเดลด้วยข้อมูลทดสอบเพียงครั้งเดียว แล้วใช้ผลการทดสอบเหล่านั้นเพื่อปรับปรุงโมเดลให้ดีขึ้น หรือเพื่อเปรียบเทียบประสิทธิภาพของโมเดลหลายๆ โมเดล

ในการทดสอบโมเดล มักจะใช้ฟังก์ชัน predict การทดสอบโมเดลทั่วไปมีขั้นตอนดังนี้

  1. โหลดข้อมูลทดสอบ (test data) โดยแยก feature และ label ออกจากกัน

  2. นำโมเดลที่ได้ทำการฝึกจากข้อมูลฝึก (training data) มาใช้กับข้อมูลทดสอบ เพื่อทำนายผลลัพธ์

  3. ประเมินประสิทธิภาพของโมเดลด้วย metrics ต่างๆ เช่น accuracy, precision, recall, F1-score, AUC, หรือ ROC curve

  4. ปรับปรุงโมเดลให้ดีขึ้นหากมีความจำเป็น

  5. ทดสอบใหม่หลายครั้งจนกว่าประสิทธิภาพของโมเดลจะถูกต้องตามที่ต้องการ

การ Train ใน Machine Learning ด้วย Python มีขั้นตอนดังนี้

  1. เตรียมข้อมูล: ต้องเตรียมข้อมูลให้เหมาะสมกับโมเดลที่จะ Train โดยทั่วไปจะมีการแบ่งข้อมูลเป็น train set และ test set เพื่อใช้ในการ Train และ Test โมเดล

  2. กำหนดโมเดล: ใช้ Library ของ Machine Learning ใน Python เช่น Scikit-learn (sklearn) หรือ TensorFlow เพื่อกำหนดโมเดลที่ต้องการ Train โดยกำหนดค่าพารามิเตอร์ และอื่นๆ ที่เกี่ยวข้อง

  3. Train โมเดล: นำ train set มา Train โดยใช้โมเดลที่กำหนดไว้ และปรับค่าพารามิเตอร์ตามข้อมูลที่ได้รับ

  4. Test โมเดล: นำ test set มาใช้ Test โมเดลที่ได้ Train ด้วยการนับความแม่นยำ หรือใช้ตัววัดประสิทธิภาพอื่นๆ เช่น Accuracy, Precision, Recall, F1 Score เป็นต้น

  5. ปรับปรุงโมเดล: หากโมเดลที่ได้ Train มีประสิทธิภาพไม่ดีพอ จะต้องนำข้อมูลไปปรับปรุงโมเดลให้ดีขึ้นโดยเปลี่ยนค่าพารามิเตอร์ หรือใช้โมเดลอื่นที่ดีกว่า

การ Test ด้วย Python มักจะทำผ่านขั้นตอนดังนี้

  1. แบ่งข้อมูลเป็น Train set และ Test set
  2. Train model ด้วย Train set
  3. Test model ด้วย Test set
  4. วัดประสิทธิภาพของ 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