ปรึกษา SVM
Data Mining 4124305 • Chapter 08

บทที่ 8 ซัพพอร์ตเวกเตอร์แมชชีน (SVM)

เรียนรู้ Support Vector Machine ตั้งแต่ Hyperplane, Margin, Support Vectors, Kernel Trick, Feature Scaling, C และ Gamma ไปจนถึงตัวอย่าง Python สำหรับ SVC, Digits/MNIST และ SVR

Hyperplane Margin Support Vectors Kernel Trick C / Gamma SVR

ผลลัพธ์การเรียนรู้

  • อธิบาย Hyperplane, Margin และ Support Vectors ได้
  • เข้าใจ Kernel Trick และเลือก Kernel เบื้องต้นได้
  • ทำ Feature Scaling และปรับ C/Gamma ได้เหมาะสม
  • สร้าง SVC และ SVR ด้วย Python ได้
ต่อเนื่องจาก Random Forest
อธิบาย Hyperplane ชัดเจน
มีตัวอย่าง Python
มี SVC และ SVR

0. ทบทวนก่อนเรียน

ก่อนเข้าสู่ SVM ควรเข้าใจภาพรวมของการเรียนรู้ของเครื่อง โดยเฉพาะ Supervised Learning ซึ่งเป็นการฝึกโมเดลจากข้อมูลที่มีป้ายกำกับ เช่น ข้อมูลผู้ป่วยที่มีคำตอบว่าเป็นโรคหรือไม่เป็นโรค ข้อมูลอีเมลที่มีคำตอบว่าเป็นสแปมหรือไม่เป็นสแปม และข้อมูลภาพตัวเลขที่มีป้ายกำกับเป็นตัวเลข 0–9

Learning Objectives

บทนี้ช่วยให้ผู้เรียนเข้าใจ SVM ทั้งเชิงแนวคิดและเชิงปฏิบัติ ตั้งแต่การแบ่งข้อมูลด้วย Maximum Margin ไปจนถึงการสร้างโมเดลด้วย scikit-learn

อธิบาย Hyperplane, Margin, Maximum Margin และ Support Vectors ได้
เลือกใช้ Linear, Polynomial หรือ RBF Kernel ตามลักษณะข้อมูลได้เบื้องต้น
ใช้ StandardScaler ร่วมกับ SVC เพื่อสร้างโมเดล Classification ได้
ประเมินผล SVM และทดลองปรับ C, Gamma, Kernel รวมถึงทำ SVR ได้

Supervised Learning

โมเดลเรียนรู้จากข้อมูลที่มีคำตอบ เช่น Classification และ Regression

Unsupervised Learning

โมเดลค้นหารูปแบบจากข้อมูลที่ไม่มีป้ายกำกับ เช่น Clustering

Features และ Labels

Features คือคุณลักษณะนำเข้า ส่วน Labels คือคำตอบหรือคลาสที่ต้องการทำนาย

Train/Test Split

แบ่งข้อมูลเป็นชุดฝึกสอนและชุดทดสอบ เช่น 70/30, 80/20 หรือ 90/10

ภาพรวมงาน Supervised Classification

Dataset Features + Labels Train SVM หา Hyperplane Predict Class A / Class B Evaluate: Accuracy • Precision • Recall • F1-score • Confusion Matrix

โมเดล SVM เรียนรู้จากข้อมูลที่มีคำตอบ แล้วสร้างขอบเขตการแบ่งคลาสเพื่อนำไปทำนายข้อมูลใหม่

Training Set, Test Set และ K-Fold Cross-Validation

Training Set คือข้อมูลที่ใช้ให้โมเดลเรียนรู้รูปแบบและความสัมพันธ์ระหว่าง Features กับ Labels ส่วน Test Set คือข้อมูลที่โมเดลไม่เคยเห็นมาก่อน ใช้ประเมินว่าโมเดลสามารถทำงานกับข้อมูลใหม่ได้ดีเพียงใด การแบ่งข้อมูลช่วยลดปัญหา Overfitting และเพิ่มความน่าเชื่อถือของผลลัพธ์

K-Fold Cross-Validation เป็นเทคนิคประเมินโมเดลโดยแบ่งข้อมูลเป็น K ส่วน ในแต่ละรอบจะใช้หนึ่งส่วนเป็นชุดทดสอบ และใช้ส่วนที่เหลือเป็นชุดฝึก ทำซ้ำจนครบทุกส่วน จากนั้นนำผลลัพธ์มาเฉลี่ย ทำให้การประเมินมีความเสถียรมากขึ้น โดยค่าที่ใช้บ่อยคือ K = 5 หรือ K = 10

ข้อควรระวัง

SVM ไวต่อสเกลของข้อมูลมาก ดังนั้นก่อนสร้างโมเดลมักต้องทำ Feature Scaling เช่น StandardScaler เพื่อให้ฟีเจอร์ต่าง ๆ อยู่ในช่วงค่าที่เหมาะสม

8.1 ความหมายของ Support Vector Machine (SVM)

Support Vector Machine (SVM) เป็นอัลกอริทึมการเรียนรู้ของเครื่องแบบมีผู้สอน ใช้ได้ทั้งงาน Classification และ Regression โดยมีชื่อเสียงมากในงานจำแนกข้อมูลแบบสองกลุ่ม หรือ Binary Classification เช่น แยกข้อมูลเป็น “ผ่าน/ไม่ผ่าน”, “สแปม/ไม่สแปม”, “เป็นโรค/ไม่เป็นโรค”

แนวคิดหลักของ SVM คือการหาขอบเขตสำหรับแบ่งข้อมูลออกเป็นกลุ่มต่าง ๆ ให้เหมาะสมที่สุด ขอบเขตนี้เรียกว่า Hyperplane โดย SVM จะพยายามเลือก Hyperplane ที่ทำให้ระยะห่างระหว่างข้อมูลทั้งสองกลุ่มกว้างที่สุด หรือที่เรียกว่า Maximum Margin

อธิบายแบบง่าย

ลองจินตนาการว่ามีจุดสีน้ำเงินและจุดสีเขียวบนกระดาษ SVM จะพยายามลากเส้นแบ่งจุดทั้งสองสีออกจากกัน โดยเลือกเส้นที่อยู่ห่างจากจุดของทั้งสองฝั่งมากที่สุด เพื่อให้การจำแนกข้อมูลใหม่มีโอกาสผิดพลาดน้อยลง

8.2 หลักการพื้นฐานของซัพพอร์ตเวกเตอร์แมชชีน

SVM ทำงานโดยหาขอบเขตการตัดสินใจที่ดีที่สุด ในข้อมูล 2 มิติ Hyperplane จะเป็นเส้นตรง แต่เมื่อข้อมูลมีหลายมิติ Hyperplane จะกลายเป็นระนาบหรือพื้นผิวที่ใช้แบ่งข้อมูลออกจากกัน

Hyperplane

เส้นหรือพื้นผิวที่ใช้แบ่งข้อมูลออกเป็นคลาส เช่น เส้นแบ่งกลุ่ม A และกลุ่ม B

Margin

ระยะห่างระหว่าง Hyperplane กับข้อมูลที่อยู่ใกล้ที่สุดของแต่ละกลุ่ม

Support Vectors

ข้อมูลที่อยู่ใกล้ Hyperplane มากที่สุด และมีผลต่อการกำหนดเส้นแบ่งอย่างมาก

Maximum Margin

เป้าหมายของ SVM คือเลือก Hyperplane ที่ให้ Margin กว้างที่สุด

ภาพประกอบ: Hyperplane, Margin และ Support Vectors

Maximum Margin Classifier

Feature 1 Feature 2 Hyperplane Margin boundary Margin boundary Support vectors คือจุดใกล้เส้นแบ่งที่สุด

เส้นกลางคือ Hyperplane ส่วนเส้นประคือขอบของ Margin จุดที่มีวงแหวนคือ Support Vectors ซึ่งเป็นจุดสำคัญที่กำหนดตำแหน่งของเส้นแบ่ง

Hyperplane ในหลายมิติ

ในข้อมูล 2 มิติ Hyperplane อาจเป็นเส้นตรง เช่น เส้นแบ่งข้อมูลบนแกน x-y แต่ในข้อมูล 3 มิติ Hyperplane จะเป็นระนาบ และในข้อมูลที่มีจำนวนฟีเจอร์มากกว่า 3 มิติ Hyperplane จะเป็นพื้นผิวในมิติสูง ซึ่งมองเห็นได้ยาก แต่หลักการยังเหมือนเดิม คือแบ่งข้อมูลให้มี Margin กว้างที่สุด

แนวคิดสำคัญ: SVM ไม่ได้มองหาเพียงเส้นที่แบ่งข้อมูลได้ แต่ต้องการเส้นที่แบ่งข้อมูลได้ “ดีที่สุด” โดยพิจารณาจาก Margin และ Support Vectors

Kernel Trick และพารามิเตอร์สำคัญ

ในบางกรณีข้อมูลไม่สามารถแบ่งด้วยเส้นตรงในพื้นที่เดิมได้ SVM จึงใช้เทคนิคที่เรียกว่า Kernel Trick เพื่อแปลงข้อมูลไปยังพื้นที่ใหม่ที่มีมิติสูงขึ้น ทำให้ข้อมูลสามารถแบ่งแยกได้ง่ายขึ้นโดยไม่จำเป็นต้องคำนวณพิกัดในมิติสูงโดยตรง

Kernel Trick: แปลงพื้นที่ให้แยกข้อมูลได้ง่ายขึ้น

Original Space แบ่งด้วยเส้นตรงได้ยาก Kernel Higher-dimensional Space แยกด้วย Hyperplane ได้ง่ายขึ้น

Kernel Trick ช่วยให้ SVM สร้างขอบเขตการตัดสินใจที่ไม่เป็นเส้นตรงได้ เช่น ขอบเขตแบบวงกลมหรือโค้ง โดยยังคำนวณได้อย่างมีประสิทธิภาพ

Kernelลักษณะการใช้งานเหมาะกับข้อมูลแบบใด
Linear Kernelแบ่งข้อมูลด้วยเส้นตรงหรือระนาบเชิงเส้นข้อมูลที่แยกกลุ่มได้ค่อนข้างชัดเจน และมีฟีเจอร์จำนวนมาก
Polynomial Kernelขยายข้อมูลเป็นหลายมิติโดยใช้พหุนามข้อมูลมีความสัมพันธ์เชิงโค้งระดับหนึ่ง
RBF Kernelสร้างขอบเขตที่ยืดหยุ่นและไม่เป็นเส้นตรงข้อมูลซับซ้อน แบ่งด้วยเส้นตรงไม่ได้ นิยมใช้เป็นค่าเริ่มต้นในการทดลอง
Sigmoid Kernelให้พฤติกรรมคล้ายโครงข่ายประสาทบางรูปแบบใช้เฉพาะบางโจทย์ ต้องทดลองและปรับค่าอย่างระมัดระวัง

พารามิเตอร์ C และ Gamma

  • C: ควบคุมการยอมให้เกิดข้อผิดพลาดในข้อมูลฝึก ค่า C ต่ำทำให้โมเดลยอมผิดพลาดบ้างและอาจ Generalize ได้ดีขึ้น ส่วนค่า C สูงพยายามจำแนกข้อมูลฝึกให้ถูกมากที่สุด แต่อาจเสี่ยง Overfitting
  • Gamma: ใช้กับ Kernel เช่น RBF เพื่อกำหนดอิทธิพลของจุดข้อมูลแต่ละจุด ค่า Gamma สูงทำให้ขอบเขตซับซ้อนและโค้งมากขึ้น ส่วนค่า Gamma ต่ำทำให้ขอบเขตเรียบขึ้น
  • Kernel: เลือกรูปแบบการแปลงข้อมูล เช่น linear, poly หรือ rbf

8.3 ขั้นตอนการจำแนกข้อมูลด้วย SVM

การสร้างโมเดล SVM ควรทำเป็นลำดับ เพื่อให้ได้โมเดลที่มีความถูกต้องและใช้งานได้จริง

Workflow การสร้างโมเดล SVM

Data Collect Clean Prepare Split Train/Test Scale Standardize Train SVM C / Gamma Evaluate Improve

ขั้นตอนที่มักผิดพลาดบ่อยคือข้าม Feature Scaling หรือปรับพารามิเตอร์จาก Test Set โดยตรง ควรใช้ Validation หรือ Cross-Validation เพื่อปรับค่าอย่างถูกต้อง

การเตรียมข้อมูล

รวบรวมข้อมูล ทำความสะอาดข้อมูล จัดการ Missing Value และแปลงข้อมูลให้อยู่ในรูปแบบที่โมเดลเรียนรู้ได้

การแบ่งข้อมูล

แบ่งเป็น Training Set และ Test Set เช่น 70/30 หรือ 80/20 เพื่อประเมินโมเดลกับข้อมูลที่ไม่เคยเห็นมาก่อน

Feature Scaling

ใช้ Standardization หรือ Normalization เพราะ SVM ไวต่อขนาดของฟีเจอร์

เลือกและฝึกโมเดล

เลือก Kernel เช่น linear หรือ rbf แล้วฝึกโมเดลด้วยชุดข้อมูลฝึก

ทดสอบโมเดล

ทำนายข้อมูลชุดทดสอบและประเมินด้วย Accuracy, Precision, Recall และ F1-score

ปรับปรุงโมเดล

ปรับ C, Gamma, Kernel และใช้ Cross-Validation เพื่อลด Overfitting

นำโมเดลไปใช้งาน

เมื่อตรวจสอบว่าโมเดลมีประสิทธิภาพเพียงพอแล้ว จึงนำไปทำนายข้อมูลใหม่หรือใช้งานในระบบจริง

8.4 ตัวอย่างการจำแนกข้อมูล Breast Cancer Dataset

Breast Cancer Dataset จาก scikit-learn เป็นชุดข้อมูลยอดนิยมสำหรับการจำแนกประเภท โดยใช้ฟีเจอร์เชิงตัวเลขของเซลล์มะเร็งเต้านม เพื่อจำแนกว่าเป็นชนิดร้ายแรงหรือไม่ร้ายแรง ชุดข้อมูลนี้มี 569 ตัวอย่าง และมีฟีเจอร์เชิงตัวเลข 30 ฟีเจอร์ เช่น mean radius, mean texture, mean perimeter, mean area และ mean smoothness

Breast Cancer Dataset → SVM Classification

30 Features radius • texture perimeter • area smoothness ... Scale StandardScaler SVC linear / rbf Benign Malignant

ข้อมูลฟีเจอร์เชิงตัวเลขถูกปรับสเกลก่อนส่งเข้า SVM เพื่อจำแนกว่าเป็นกลุ่ม Benign หรือ Malignant

คอลัมน์ความหมาย
mean radiusรัศมีเฉลี่ยของเซลล์
mean textureลักษณะพื้นผิวหรือความแปรผันของระดับสี
mean perimeterเส้นรอบวงเฉลี่ยของเซลล์
mean areaพื้นที่เฉลี่ยของเซลล์
worst radiusค่ารัศมีในกรณีที่รุนแรงที่สุดของตัวอย่างนั้น
targetป้ายกำกับสำหรับจำแนกชนิดของเซลล์

ตัวอย่าง Python: SVM Classification ด้วย Breast Cancer Dataset

ตัวอย่างนี้ใช้ SVC จาก scikit-learn โดยมีขั้นตอนสำคัญคือ โหลดข้อมูล แบ่งข้อมูล ทำ Feature Scaling ฝึกโมเดล และประเมินผล

SVC with Breast Cancer Dataset
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score, confusion_matrix

# โหลดข้อมูล Breast Cancer Dataset
data = datasets.load_breast_cancer()
X = data.data
y = data.target

# แบ่งข้อมูลเป็นชุดฝึกและชุดทดสอบ
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# ทำ Feature Scaling
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# สร้างและฝึกโมเดล SVM
model = SVC(kernel="linear", C=1.0)
model.fit(X_train_scaled, y_train)

# ทำนายผลและประเมินโมเดล
y_pred = model.predict(X_test_scaled)

print("Accuracy:", accuracy_score(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
print("Classification Report:\n", classification_report(y_test, y_pred))

อธิบายโค้ด

  • datasets.load_breast_cancer() ใช้โหลดชุดข้อมูลตัวอย่าง
  • train_test_split(..., stratify=y) แบ่งข้อมูลโดยรักษาสัดส่วนคลาสให้ใกล้เคียงกัน
  • StandardScaler() ปรับสเกลของข้อมูลให้เหมาะกับ SVM
  • SVC(kernel="linear") สร้างโมเดล SVM แบบ Linear Kernel
  • classification_report() แสดง Precision, Recall, F1-score และ Support

ต้องการนำ SVM ไปใช้กับข้อมูลจริง?

Siam2Dev ช่วยออกแบบชุดข้อมูล ทำ Feature Scaling สร้างโมเดล SVC/SVR เปรียบเทียบกับ Decision Tree และ Random Forest พร้อมทำ Dashboard และรายงานผลสำหรับงานวิจัยหรือธุรกิจ

8.5 การประยุกต์ใช้ซัพพอร์ตเวกเตอร์แมชชีน

SVM ถูกใช้ในงานหลากหลาย เพราะสามารถจำแนกข้อมูลที่ซับซ้อนได้ดี โดยเฉพาะในกรณีที่จำนวนฟีเจอร์มีมาก และข้อมูลสามารถแยกได้ด้วยขอบเขตที่เหมาะสม

การจดจำลายมือ

จำแนกตัวเลขหรือตัวอักษรที่เขียนด้วยมือ เช่น Digits หรือ MNIST

การจำแนกอีเมล

แยกอีเมลเป็นสแปมหรือไม่เป็นสแปม

การตรวจจับวัตถุ

ใช้ในงานภาพเพื่อแยกวัตถุออกจากฉากหลังหรือแยกคลาสภาพ

การวิเคราะห์ทางการแพทย์

จำแนกประเภทของเซลล์หรือประเมินความเสี่ยงจากข้อมูลสุขภาพ

ตัวอย่าง SVM สำหรับจดจำตัวเลขเขียนมือ

ตัวอย่างนี้ใช้ชุดข้อมูล digits จาก scikit-learn ซึ่งเป็นภาพตัวเลข 0–9 ขนาด 8x8 พิกเซล โดยแปลงภาพเป็นฟีเจอร์ 64 ค่า แล้วใช้ SVM แบบ RBF Kernel เพื่อจำแนกตัวเลข

ภาพตัวเลข 8×8 → Vector 64 ค่า → SVM

8×8 image Flatten 64 features SVM RBF Kernel Predict: 0–9

ภาพตัวเลขถูกแปลงเป็นเวกเตอร์ฟีเจอร์ ก่อนเข้าสู่ SVM เพื่อทำนายคลาสตัวเลข 0–9

SVM with Digits Dataset
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_score
import matplotlib.pyplot as plt

# โหลดข้อมูลตัวเลขเขียนมือ
digits = datasets.load_digits()

X = digits.data      # ภาพ 8x8 ถูกแปลงเป็น 64 ฟีเจอร์
y = digits.target    # ป้ายกำกับ 0-9

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# แม้ข้อมูลภาพเป็น 0-16 อยู่แล้ว แต่ scaling ช่วยให้ SVM เสถียรขึ้น
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

svm_model = SVC(kernel="rbf", gamma=0.001, C=10)
svm_model.fit(X_train_scaled, y_train)

y_pred = svm_model.predict(X_test_scaled)
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

plt.matshow(X_test[0].reshape(8, 8), cmap="gray")
plt.title(f"Predicted: {y_pred[0]}, True: {y_test[0]}")
plt.show()

ตัวอย่าง Support Vector Regression (SVR)

นอกจาก SVM สำหรับจำแนกข้อมูลแล้ว ยังมี Support Vector Regression (SVR) สำหรับทำนายค่าตัวเลขต่อเนื่อง เช่น ราคาทองคำ อุณหภูมิ หรือค่าผลผลิต โดย SVR สามารถใช้ Kernel Trick เช่น RBF เพื่อรับมือกับข้อมูลที่ไม่เป็นเส้นตรงได้

SVR: ทำนายค่าต่อเนื่องด้วยเส้นโค้งและขอบเขตความคลาดเคลื่อน

Day Price SVR prediction curve epsilon tube

SVR ใช้แนวคิดคล้าย SVM แต่เป้าหมายคือหาเส้นหรือพื้นผิวสำหรับทำนายค่าต่อเนื่อง พร้อมขอบเขตความคลาดเคลื่อนที่ยอมรับได้

SVR Example
import numpy as np
import pandas as pd
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_absolute_error, mean_squared_error

# ตัวอย่างข้อมูลราคาทองคำรายวัน
data = {
    "Day": np.arange(1, 11),
    "Price": [1800, 1812, 1795, 1805, 1820, 1830, 1815, 1840, 1855, 1860]
}
df = pd.DataFrame(data)

X = df[["Day"]].values
y = df["Price"].values

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

scaler_x = StandardScaler()
scaler_y = StandardScaler()

X_train_scaled = scaler_x.fit_transform(X_train)
y_train_scaled = scaler_y.fit_transform(y_train.reshape(-1, 1)).ravel()

svr = SVR(kernel="rbf", C=100, gamma=0.1, epsilon=0.1)
svr.fit(X_train_scaled, y_train_scaled)

X_test_scaled = scaler_x.transform(X_test)
y_pred_scaled = svr.predict(X_test_scaled)
y_pred = scaler_y.inverse_transform(y_pred_scaled.reshape(-1, 1)).ravel()

mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))

print("MAE:", mae)
print("RMSE:", rmse)

# ทำนายวันที่ 11, 12, 13
unknown_days = np.array([[11], [12], [13]])
unknown_days_scaled = scaler_x.transform(unknown_days)
unknown_pred_scaled = svr.predict(unknown_days_scaled)
unknown_pred = scaler_y.inverse_transform(unknown_pred_scaled.reshape(-1, 1)).ravel()
print("Forecast:", unknown_pred)

เปรียบเทียบ SVM กับ Decision Tree และ Random Forest

ประเด็นSVMDecision TreeRandom Forest
แนวคิดหลักหา Hyperplane ที่มี Margin ดีที่สุดแตกกิ่งด้วยเงื่อนไขรวมต้นไม้หลายต้น
การตีความปานกลางถึงยากง่ายมากปานกลาง
ข้อมูลหลายมิติทำได้ดีทำได้ แต่เสี่ยง overfitทำได้ดี
ต้อง Scalingจำเป็นมากไม่จำเป็นไม่จำเป็นเสมอไป
ข้อมูลขนาดใหญ่อาจช้าเร็วค่อนข้างเร็วแต่ใช้ทรัพยากร

ข้อดีและข้อจำกัดของ SVM

ข้อดี

  • ทำงานได้ดีในข้อมูลที่มีหลายฟีเจอร์
  • เหมาะกับ Binary Classification
  • ใช้ Kernel Trick กับข้อมูลไม่เป็นเส้นตรงได้
  • ให้แนวคิดการแบ่งข้อมูลที่ชัดเจนด้วย Margin
  • ใช้ได้ทั้ง Classification และ Regression

ข้อจำกัด

  • ใช้เวลาคำนวณมากเมื่อข้อมูลมีขนาดใหญ่
  • ต้องปรับพารามิเตอร์ C, Gamma และ Kernel อย่างเหมาะสม
  • ไวต่อสเกลของข้อมูล จึงต้องทำ Feature Scaling
  • ตีความผลลัพธ์ยากกว่า Decision Tree
  • ไม่เหมาะนักเมื่อข้อมูลมี noise จำนวนมากโดยไม่ปรับค่า C

8.6 สรุปบทเรียน

Support Vector Machine เป็นเทคนิคการเรียนรู้ของเครื่องที่มีประสิทธิภาพสูงสำหรับการจำแนกข้อมูล โดยเน้นการหา Hyperplane ที่แบ่งข้อมูลได้ดีที่สุดและมี Margin กว้างที่สุด จุดข้อมูลที่สำคัญที่สุดในการกำหนดเส้นแบ่งคือ Support Vectors หากข้อมูลไม่สามารถแบ่งด้วยเส้นตรง SVM สามารถใช้ Kernel Trick เช่น RBF เพื่อแปลงข้อมูลไปยังพื้นที่ใหม่และสร้างขอบเขตการตัดสินใจที่ยืดหยุ่นขึ้น

ในการใช้งานจริง ผู้เรียนควรให้ความสำคัญกับการเตรียมข้อมูล การทำ Feature Scaling การเลือก Kernel การปรับ C และ Gamma รวมถึงการประเมินผลด้วย Train/Test Split หรือ K-Fold Cross-Validation เพื่อให้โมเดลมีความแม่นยำและสามารถใช้งานกับข้อมูลใหม่ได้ดี

แบบฝึกหัดท้ายบท

  1. อธิบายความหมายของ Hyperplane, Margin และ Support Vectors ด้วยภาษาของตนเอง
  2. เปรียบเทียบ Linear Kernel, Polynomial Kernel และ RBF Kernel ว่าเหมาะกับข้อมูลลักษณะใด
  3. ทำไม SVM จึงควรทำ Feature Scaling ก่อนฝึกโมเดล?
  4. ทดลองเปลี่ยนค่า C และ Gamma ในตัวอย่าง Digits/MNIST แล้วบันทึกผล Accuracy
  5. เลือกชุดข้อมูลจาก Kaggle หรือ UCI 1 ชุด แล้วสร้างโมเดล SVM พร้อมรายงาน Accuracy, Precision, Recall และ F1-score
  6. เปรียบเทียบผลลัพธ์ระหว่าง SVM, Decision Tree และ Random Forest บนชุดข้อมูลเดียวกัน
  7. ทดลองสร้าง SVR อย่างง่าย แล้วรายงานค่า MAE และ RMSE

เชื่อมโยงกับบทอื่น

บทที่ 8 เป็นการต่อยอดจากบทที่ 6 Decision Tree และบทที่ 7 Random Forest โดยยังอยู่ในกลุ่มเทคนิค Classification แต่ SVM มีแนวคิดต่างออกไป คือการหาขอบเขตการแบ่งข้อมูลที่ดีที่สุดตามหลัก Maximum Margin และเชื่อมไปสู่บทที่ 9 ANN ซึ่งเป็นโมเดลที่เรียนรู้รูปแบบซับซ้อนด้วยโครงข่ายหลายชั้น

คำถามที่พบบ่อยเกี่ยวกับ SVM

SVM เหมาะกับงาน Classification ที่มีฟีเจอร์หลายตัว โดยเฉพาะข้อมูลที่สามารถแยกกลุ่มได้ด้วยเส้นแบ่งหรือขอบเขตที่เหมาะสม และใช้ Kernel Trick เมื่อต้องการขอบเขตที่ไม่เป็นเส้นตรง

เพราะ SVM อาศัยระยะห่างระหว่างจุดข้อมูล หากฟีเจอร์แต่ละตัวมีสเกลต่างกันมาก ฟีเจอร์ที่มีค่ามากจะครอบงำการคำนวณ ทำให้โมเดลทำงานผิดพลาดได้ง่าย

Linear Kernel เหมาะกับข้อมูลที่แยกได้ด้วยเส้นตรงหรือข้อมูลมิติสูงที่ค่อนข้างแยกชัด ส่วน RBF Kernel เหมาะกับข้อมูลที่มีความสัมพันธ์ซับซ้อนและต้องการขอบเขตการตัดสินใจแบบโค้ง

SVR หรือ Support Vector Regression คือการนำแนวคิดของ SVM ไปใช้กับงานทำนายค่าตัวเลขต่อเนื่อง เช่น ราคา อุณหภูมิ หรือยอดขาย โดยใช้เส้นหรือพื้นผิวทำนายที่ยอมรับความคลาดเคลื่อนบางช่วงได้
อ่านต่อ

ลำดับบทเรียนเหมืองข้อมูล

เรียนต่อเนื่องตั้งแต่พื้นฐานจนถึงเทคนิคการจำแนกข้อมูลด้วย Machine Learning