0. ทบทวนก่อนเรียน
ก่อนเข้าสู่ SVM ควรเข้าใจภาพรวมของการเรียนรู้ของเครื่อง โดยเฉพาะ Supervised Learning ซึ่งเป็นการฝึกโมเดลจากข้อมูลที่มีป้ายกำกับ เช่น ข้อมูลผู้ป่วยที่มีคำตอบว่าเป็นโรคหรือไม่เป็นโรค ข้อมูลอีเมลที่มีคำตอบว่าเป็นสแปมหรือไม่เป็นสแปม และข้อมูลภาพตัวเลขที่มีป้ายกำกับเป็นตัวเลข 0–9
Learning Objectives
บทนี้ช่วยให้ผู้เรียนเข้าใจ SVM ทั้งเชิงแนวคิดและเชิงปฏิบัติ ตั้งแต่การแบ่งข้อมูลด้วย Maximum Margin ไปจนถึงการสร้างโมเดลด้วย scikit-learn
Supervised Learning
โมเดลเรียนรู้จากข้อมูลที่มีคำตอบ เช่น Classification และ Regression
Unsupervised Learning
โมเดลค้นหารูปแบบจากข้อมูลที่ไม่มีป้ายกำกับ เช่น Clustering
Features และ Labels
Features คือคุณลักษณะนำเข้า ส่วน Labels คือคำตอบหรือคลาสที่ต้องการทำนาย
Train/Test Split
แบ่งข้อมูลเป็นชุดฝึกสอนและชุดทดสอบ เช่น 70/30, 80/20 หรือ 90/10
ภาพรวมงาน Supervised Classification
โมเดล 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
เส้นกลางคือ Hyperplane ส่วนเส้นประคือขอบของ Margin จุดที่มีวงแหวนคือ Support Vectors ซึ่งเป็นจุดสำคัญที่กำหนดตำแหน่งของเส้นแบ่ง
Hyperplane ในหลายมิติ
ในข้อมูล 2 มิติ Hyperplane อาจเป็นเส้นตรง เช่น เส้นแบ่งข้อมูลบนแกน x-y แต่ในข้อมูล 3 มิติ Hyperplane จะเป็นระนาบ และในข้อมูลที่มีจำนวนฟีเจอร์มากกว่า 3 มิติ Hyperplane จะเป็นพื้นผิวในมิติสูง ซึ่งมองเห็นได้ยาก แต่หลักการยังเหมือนเดิม คือแบ่งข้อมูลให้มี Margin กว้างที่สุด
Kernel Trick และพารามิเตอร์สำคัญ
ในบางกรณีข้อมูลไม่สามารถแบ่งด้วยเส้นตรงในพื้นที่เดิมได้ SVM จึงใช้เทคนิคที่เรียกว่า Kernel Trick เพื่อแปลงข้อมูลไปยังพื้นที่ใหม่ที่มีมิติสูงขึ้น ทำให้ข้อมูลสามารถแบ่งแยกได้ง่ายขึ้นโดยไม่จำเป็นต้องคำนวณพิกัดในมิติสูงโดยตรง
Kernel Trick: แปลงพื้นที่ให้แยกข้อมูลได้ง่ายขึ้น
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
ขั้นตอนที่มักผิดพลาดบ่อยคือข้าม 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
ข้อมูลฟีเจอร์เชิงตัวเลขถูกปรับสเกลก่อนส่งเข้า 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 ฝึกโมเดล และประเมินผล
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()ปรับสเกลของข้อมูลให้เหมาะกับ SVMSVC(kernel="linear")สร้างโมเดล SVM แบบ Linear Kernelclassification_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
ภาพตัวเลขถูกแปลงเป็นเวกเตอร์ฟีเจอร์ ก่อนเข้าสู่ SVM เพื่อทำนายคลาสตัวเลข 0–9
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: ทำนายค่าต่อเนื่องด้วยเส้นโค้งและขอบเขตความคลาดเคลื่อน
SVR ใช้แนวคิดคล้าย SVM แต่เป้าหมายคือหาเส้นหรือพื้นผิวสำหรับทำนายค่าต่อเนื่อง พร้อมขอบเขตความคลาดเคลื่อนที่ยอมรับได้
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
| ประเด็น | SVM | Decision Tree | Random 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 เพื่อให้โมเดลมีความแม่นยำและสามารถใช้งานกับข้อมูลใหม่ได้ดี
แบบฝึกหัดท้ายบท
- อธิบายความหมายของ Hyperplane, Margin และ Support Vectors ด้วยภาษาของตนเอง
- เปรียบเทียบ Linear Kernel, Polynomial Kernel และ RBF Kernel ว่าเหมาะกับข้อมูลลักษณะใด
- ทำไม SVM จึงควรทำ Feature Scaling ก่อนฝึกโมเดล?
- ทดลองเปลี่ยนค่า C และ Gamma ในตัวอย่าง Digits/MNIST แล้วบันทึกผล Accuracy
- เลือกชุดข้อมูลจาก Kaggle หรือ UCI 1 ชุด แล้วสร้างโมเดล SVM พร้อมรายงาน Accuracy, Precision, Recall และ F1-score
- เปรียบเทียบผลลัพธ์ระหว่าง SVM, Decision Tree และ Random Forest บนชุดข้อมูลเดียวกัน
- ทดลองสร้าง SVR อย่างง่าย แล้วรายงานค่า MAE และ RMSE
เชื่อมโยงกับบทอื่น
บทที่ 8 เป็นการต่อยอดจากบทที่ 6 Decision Tree และบทที่ 7 Random Forest โดยยังอยู่ในกลุ่มเทคนิค Classification แต่ SVM มีแนวคิดต่างออกไป คือการหาขอบเขตการแบ่งข้อมูลที่ดีที่สุดตามหลัก Maximum Margin และเชื่อมไปสู่บทที่ 9 ANN ซึ่งเป็นโมเดลที่เรียนรู้รูปแบบซับซ้อนด้วยโครงข่ายหลายชั้น