Menu
CoddyTech

Máy vector hỗ trợ (SVM)

Bài học 18 trên 19 trong khóa học Giới thiệu về học máy của Coddy.

Máy hỗ trợ vectơ (SVM) là một thuật toán học máy có giám sát mạnh mẽ và linh hoạt, dùng cho cả các bài toán phân loại và hồi quy. Tuy nhiên, thuật toán này thường được dùng hơn trong các bài toán phân loại. SVM có độ chính xác cao và hoạt động tốt với không gian đặc trưng có nhiều chiều, nên phù hợp với các ứng dụng từ nhận dạng hình ảnh đến tin sinh học.

Nguồn: wikipedia

Mục tiêu chính của thuật toán SVM là tìm siêu phẳng tối ưu (trong không gian hai chiều, đó là một đường thẳng) phân tách các lớp trong không gian đặc trưng tốt nhất. Mô hình SVM biểu diễn các ví dụ dưới dạng các điểm trong không gian, được ánh xạ sao cho các ví dụ thuộc những nhóm riêng biệt được phân tách bằng một khoảng trống rõ ràng rộng nhất có thể.

 

  • Siêu phẳng: Về cơ bản, đây là ranh giới quyết định phân tách các lớp. Trong không gian 2D, siêu phẳng này là một đường thẳng, nhưng trong không gian nhiều chiều hơn, nó có thể phức tạp hơn.
  • Vectơ hỗ trợ: Đây là các điểm dữ liệu gần siêu phẳng nhất, đóng vai trò quan trọng trong việc xác định vị trí của siêu phẳng. Bộ phân loại SVM chịu ảnh hưởng lớn từ các điểm này, vì vậy thuật toán có tên là Máy Support Vector.
  • Lề: Đây là khoảng cách giữa hai đường thẳng đi qua các điểm dữ liệu gần nhất thuộc các lớp khác nhau. Có thể xem đây là thước đo mức độ phân tách giữa các lớp. Đảm bảo lề rộng nhất có thể là mục tiêu quan trọng khi huấn luyện SVM.

Các loại SVM:

  • SVM tuyến tính: Khi dữ liệu có thể được phân tách tuyến tính, ta có thể dùng một đường thẳng duy nhất để phân tách các lớp. Trường hợp này dùng SVM tuyến tính.
  • SVM phi tuyến: Khi dữ liệu không thể được phân tách tuyến tính, SVM dùng kỹ thuật gọi là kernel trick để biến đổi không gian đầu vào thành không gian nhiều chiều hơn, nơi có thể dùng siêu phẳng để phân tách dữ liệu. Kernel trick biến đổi dữ liệu sang một không gian khác có lề rõ ràng giữa các lớp dữ liệu. Kỹ thuật này giúp SVM giải quyết các bài toán phi tuyến. Các kernel phổ biến gồm:
    • Kernel tuyến tính: Dùng khi dữ liệu có thể được phân tách tuyến tính.
    • Kernel đa thức: Biến đổi không gian đặc trưng ban đầu thành không gian đặc trưng đa thức với bậc được chỉ định.
    • Kernel Gaussian: Hữu ích với dữ liệu phi tuyến phân cụm thành các nhóm. Kernel này ánh xạ không gian đặc trưng sang không gian nhiều chiều hơn.
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

challenge icon

Thử thách

Dễ

Máy véc-tơ hỗ trợ (SVM) sử dụng các hàm kernel để biến đổi dữ liệu sang không gian nhiều chiều hơn, nơi việc phân loại dễ dàng hơn. Quá trình này được gọi là "kernel trick". Quá trình này giúp SVM giải quyết hiệu quả các bài toán phân loại và hồi quy phi tuyến.

Ở đây, chúng ta sẽ tìm hiểu kernel đa thức, cho phép tạo ra các ranh giới cong trong dữ liệu. Kernel này nâng dữ liệu lên lũy thừa bậc d được chỉ định. Kernel này đặc biệt hữu ích khi mối quan hệ giữa nhãn lớp và các thuộc tính là đa thức.
File:Svm 8 polinomial.JPG

Nguồn: wikipedia

Tạo một hàm có tên polynomial_kernel, nhận hai danh sách (x, y), một bậc (d) và một hệ số (c), rồi trả về kernel đa thức.

{\displaystyle K(x,y)=(x^{\mathsf {T}}y+c)^{d}} → tích vô hướng của x chuyển vị với y, cộng c, rồi nâng lên lũy thừa d.

Tự làm thử

import numpy as np
def polynomial_kernel(x, y, d, c):
    x_arr = np.array(x)
    y_arr = np.array(y)
    # Viết code của bạn tại đây

Tất cả bài học trong Giới thiệu về học máy

Tự luyện tập: Trình biên dịch Python online