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.
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.
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.
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.
| Kernel | Dùng khi |
|---|---|
linear | Dữ 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 |
poly | Quan 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.
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.