Trong bài học ngày hôm nay chúng ta sẽ tìm hiểu về một ML model giám sát (supervised) có thể giải quyết cả bài toán phân loại (classification) và hồi quy (regression) nhưng thường được sử dụng trong bài toán phân loại (classification) hơn đó là máy vector hỗ trợ - Support vector machine (SVM). SVM bản chất là một ML model tuyến tính (linear), tuy nhiên chúng ta có thể áp dụng phương pháp biến đổi để sử dụng SVM cho các bài toán phi tuyến tính (non-linear).
Định nghĩa về SVM
Nhắc lại bài toán phân loại (classification) dữ liệu chúng ta đã đề cập trong bài số 3 - Logistic Regression. Tương tự như Logistic Regression, chúng ta cần SVM tạo ra một đường phân định (decision boundary) trên không gian 2 chiều hoặc một cách tổng quát hơn đó là siêu phẳng (hyperplane) trên các không gian nhiều chiều nhằm phân loại dữ liệu. Hình vẽ dưới đây mô tả một siêu phẳng (hyperplane) giúp phân loại (classification) 2 nhóm (class) dữ liệu xanh và đỏ.
Tuy nhiên chúng ta có thể thấy ngoài siêu phẳng (hyperplane) như trên chúng ta cũng có thể vẽ ra được rất nhiều siêu phẳng (hyperplane) khác cũng có thể phân loại được dữ liệu như hình vẽ dưới đây.
Vậy siêu phẳng (hyperplane) nào là tối ưu nhất ?
Để trả lời cho câu hỏi này SVM sử dụng các vector hỗ trợ (support vector). Vector hỗ trợ (support vector) là các cá thể (instance) gần với siêu phẳng (hyperplane) nhất. Theo SVM lề (margin) giữa 2 vector hỗ trợ (support vector) ở 2 nhóm (class) sẽ là yếu tố quyết định độ tối ưu của một siêu phẳng (hyperplane). Một cách trực quan siêu phẳng (hyperplane) nào có lề (margin) lớn nhất thì sẽ là siêu phẳng (hyperplane) tối ưu nhất. Do đó SVM còn có một tên gọi khác là Maximum Margin Classification. Cần lưu ý rằng SVM chỉ quan tâm đến các vector hỗ trợ (support vector) các cá thể khác (instance) đều có thể bỏ qua trong quá trình xây dựng siêu phẳng (hyperplane). Hình dưới đây mô tả lề (margin) của một siêu phẳng (hyperplane).
Trong mặt phẳng 2 chiều chúng ta có công thức tính khoảng cách từ một điểm $N(x_{0}, y_{0})$ đến một đường thẳng $ax+by+c= 0$ là như sau:
$d = \frac{|ax_{0}+by_{0}+c|}{\sqrt{a^{2}+b^{2}+c^{2}}}$
Quay trở lại với SVM, siêu phẳng (hyperplane) của chúng ta được viết gọn thành $w^{T}x + b$ do đó khoảng cách từ một cá thể bất kỳ đến siêu phẳng (hyperplane) sẽ như sau:
$d = \frac{|w^{T}x + b|}{\left \| w \right \|_{2}}$
Trong đó $\left \| w \right \|_{2}$ được gọi là norm 2
Xét trong bài toán có 2 nhóm (class) là 1 và -1, khi đó khoảng cách từ vector hỗ trợ (support vector) đến siêu phẳng (hyperplane) sẽ là:
$d = \frac{1}{\left \| w \right \|_{2}}$
Do đó margin của chúng ta sẽ là $\frac{2}{\left \| w \right \|_{2}}$
Bài toán tìm lề (margin) lớn nhất của chúng ta lúc này chính là là bài toàn tìm $\left \| w \right \|_{2}$ nhỏ nhất.
Lề mềm - Soft margin
Trong thực tế dữ liệu thường không phân tách nhau một cách rõ rệt, nếu chúng ta ép SVM phải tạo ra siêu phẳng (hyperplane) một cách chặt chẽ không được phép sai lệch một cách cứng nhắc (hard margin) như trên sẽ cho ra một siêu phẳng (hyperplane) hẹp vô hình chung làm cho model của chúng ta thiếu đi tính tổng quát, quá vừa vặn (overfit) với dữ liệu của tập huấn luyện (training set). Vì lý do đó, chúng ta có thể nới lỏng bẳng cách làm rộng lề (margin) hơn một chút, chấp nhận những cá thể (instance) bị phân loại sai. Hình dưới cho chúng ta cái nhìn rõ ràng hơn về tính hiệu quả khi sử dụng lề mềm (soft margin), hình bên trái là siêu phẳng (hyperplane) được tạo ra khi sử dụng lề mềm (soft margin), hình bên phải là siêu phẳng (hyperplane) được tạo ra khi sử dụng lề cứng (hard margin).
Để kiểm soát sai xót của lề mềm (soft margin) trong mức cho phép, SVM model sử dụng đại lượng $C$ biểu thị mức độ phạt khi model dự đoán sai. Khi $C$ càng lớn, SVM model sẽ bị phạt nặng hơn khi dự đoán sai và kết quả sẽ cho ra một lề (margin) hẹp. Ở chiều ngược lại khi $C$ càng nhỏ, SVM sẽ càng dễ dãi hơn và kết quả sẽ cho ra một lề (margin) rộng. Hình dưới sẽ cho chúng ta thấy sự khác biệt khi thay đổi $C$.
Kernel trick
Với đặc tính siêu phẳng, SVM model sẽ gặp khó khăn trong bài toán phi tuyến tính (non-linear). Để giải quyết được vấn đề này, một mẹo (trick) được áp dụng bằng cách sử dụng hàm kernel (kernel function) để biến đổi dữ liệu sang một chiều (dimension) cao hơn từ đó có thể phân tách một cách tuyến tính (linear) dễ dàng. Hai hàm kernel thường được sử dụng đó là Polynomial kernel và Radial Basis Function (RBF) kernel. Hình dưới đây sẽ minh họa về sự tiện lợi trong việc tìm kiếm siêu phẳng (hyperplane) khi chuyển đổi dữ liệu từ 2 chiều (dimension) sang 3 chiều (dimension) sử dụng Polynomial kernel.
Kết
Như vậy qua bài học này chúng ta đã tìm hiểu về SVM, một ML có khá nhiều thông số vận hành (hyperparameter) có thể lựa chọn để cho ra một model tối ưu, trong bài tới chúng ta sẽ cùng thực hành triển khai xây dựng một SVM model bằng Python để xem hiệu năng của model này khi giải quyết bài toán phân loại sẽ ra sao nhé 💪
-
Previous
[Thực Hành] Bài 12 Cây quyết định - Decision Tree -
Next
[Thực Hành] Bài 14 Máy vector hỗ trợ - Support Vector Machine