Limio— Learn your way
🏆 Đấu trường
Đăng nhậpĐăng ký

Thiết kế và phát triển: @Limio team - Khoa Khoa học và Công nghệ Giáo dục, Đại học Bách Khoa Hà Nội

← Fundamental of Machine Learning

Bạn đang xem thử công khai

Đăng nhập để lưu tiến độ, làm bài tập, thảo luận và nhận phản hồi.

Đăng nhập
Module 2: Core Machine Learning Algorithms

Máy vector hỗ trợ (Support Vector Machines)

In / Lưu PDF

Máy vector hỗ trợ (SVM)

Ý tưởng: không phải ranh giới nào cũng tốt như nhau

Giữa hai lớp dữ liệu có thể vẽ vô số đường thẳng phân tách. SVM chọn đường có lề (margin) rộng nhất — tức cách xa điểm gần nhất của cả hai lớp nhất có thể.

Vì sao lề rộng lại tốt? Vì nó tạo vùng đệm an toàn. Một điểm dữ liệu mới lệch đi một chút vẫn nằm đúng phía; với ranh giới sát rìa thì chỉ cần nhiễu nhỏ là phân loại sai.

Support vectors

Chỉ những điểm nằm sát ranh giới mới quyết định vị trí siêu phẳng — đó là các support vector. Xoá một điểm ở xa, ranh giới không đổi; xoá một support vector, ranh giới đổi ngay.

Hệ quả thực tế: SVM chỉ phụ thuộc một phần nhỏ dữ liệu, nên tiết kiệm bộ nhớ khi dự đoán.

Kernel trick

Khi dữ liệu không thể tách bằng một đường thẳng, SVM ánh xạ nó lên không gian nhiều chiều hơn, nơi tồn tại một siêu phẳng tách được. Điều tinh tế: thuật toán không thực sự tính toạ độ ở không gian mới — nó chỉ tính tích vô hướng qua hàm kernel, nên chi phí vẫn chấp nhận được.

KernelDùng khi
linearDữ liệu tách được tuyến tính, nhiều đặc trưng
rbf (mặc định)Ranh giới cong, không biết trước dạng
polyQuan hệ đa thức
from sklearn.svm import SVC
model = SVC(kernel="rbf", C=1.0, gamma="scale")
model.fit(x_train, y_train)

Tham số C kiểm soát đánh đổi: C lớn = phạt nặng lỗi phân loại, lề hẹp, dễ overfit. C nhỏ = chấp nhận vài lỗi để có lề rộng, tổng quát hoá tốt hơn.

Lỗi thường gặp nhất

Quên chuẩn hoá dữ liệu trước khi dùng SVM. SVM dựa trên khoảng cách, nên một đặc trưng có thang đo lớn sẽ áp đảo hoàn toàn các đặc trưng khác. Đây là thuật toán nhạy cảm với thang đo nhất trong các mô hình đã học.