3. Cấu trúc luận văn
2.4 Phân loại dựa trên phương pháp SVM
Support vector machine (SVM) là phương pháp học có giám sát do Vladimir N. Vapnik đề xuất vào năm 1995, và ngày càng được sử dụng phổ biến trong nhiều lĩnh vực, đặc biệt là lĩnh vực phân loại mẫu và nhận dạng mẫu.
SVM dạng chuẩn nhận dữ liệu vào và phân loại chúng vào hai lớp khác nhau. Do đó SVM là một thuật toán phân loại nhị phân. Ý tưởng của SVM là tìm một siêu mặt phẳng (hyperplane) để phân tách các điểm dữ liệu. Siêu phẳng này sẽ chia không gian thành các miền khác nhau và mỗi miền sẽ chứa một loại dữ liệu. SVM dựa trên cơ sở toán học vững chắc. Tuy nhiên việc huấn luyện mẫu sử dụng SVM đòi hỏi phải giải bài toán tối ưu nhiều biến. Ban đầu, SVM được phát triển để giải các bài toán phân lớp, về sau do tính ưu việt, nó còn được ứng dụng rộng rãi để giải các bài toán hồi quy.
Bài toán của SVM đặt ra như sau, cho một tập dữ liệu được biểu diễn trong một không gian nhiều chiều. Giả sử tập dữ liệu là khả tách tuyến tính. Hãy tìm ra siêu phẳng có thể chia tập dữ liệu ra làm hai phần (phân loại nhị phân) và thỏa
37
mãn điều kiện khoảng cách từ điểm gần nhất của mỗi tập đến siêu phẳng đó là lớn nhất. Gọi tập dữ liệu huấn luyện là (𝑥!, 𝑦!), (𝑥", 𝑦"), … , (𝑥3, 𝑦3) với x là dữ liệu và y là nhãn của dữ liệu tương ứng. Giả sử y chỉ nhận giá trị 1 hoặc -1 (bài toán phân loại nhị phân) và dữ liệu có thể biểu diễn trên một không gian hai chiều. Ta có thể hình dung dữ liệu huấn luyện như sau:
Hình 2.12 Ví dụ dữ liệu trong SVM.
Trong hình, các điểm màu xanh và đỏ biểu diễn 2 class 1 và -1. Đường thẳng 𝑊.x + b = 𝑤#𝑥#+ 𝑤$𝑥$+ b = 0 là đường thẳng cần tìm để phân loại hai tập dữ liệu. Với một điểm dữ liệu (xn, yn) bất kỳ, ta có khoảng cách từ điểm đó đến đường thẳng phân tách là:
*')𝒘($'0C+
∥𝒘∥" (2.23)
Với ∥ 𝐰 ∥"= H∑4
$%! 𝑤$" với d là số nhãn
Nhiệm vụ của bài toán SVM là tìm w và b để giá trị của lề (margin) là lớn nhất, ta có mô tả toán học của SVM như sau:
(𝐰, 𝑏) = arg 𝑚𝑎𝑥 𝐰,1 S𝑚𝑖𝑛 2 +!3𝐰"𝐱!516 ∥𝐰∥# V = arg 𝑚𝑎𝑥 𝐰,1 S∥𝐰∥# #𝑚𝑖𝑛𝑦2(𝐰.𝐱2+ 𝑏)V (2.24) Ta có thể giả sử: 𝑦2(𝒘.𝑥2+ 𝑏) ≥ 1. Trong đó dấu bằng xảy ra tại các điểm gần đường thẳng nhất. Bài toán tối ưu của SVM có thể được mô tả như sau:
(𝒘, 𝑏) = arg 𝑚𝑖𝑛 𝒘,6 !
"∥ 𝒘 ∥"" (2.25) thoả mãn 1 − 𝑦2(𝒘.𝑥2 + 𝑏) ≤ 0, ∀𝑛 = 1,2, … , 𝑁
Ở đây, n là số lượng các điểm dữ liệu (xi, yi) còn việc lấy bình phương và chia đôi nhằm dễ dàng tính toán và tối ưu lồi. Bài toán này có thể giải thông qua
38
bài toán đối ngẫu của nó và sử dụng phương pháp nhân tử Lagrance. Lúc này, ta sẽ cần tìm các giá trị λ như sau:
𝜆 = arg 𝑚𝑎𝑥
. ∑3$%! 𝜆$ −!
"∑3$,7%! 𝜆$𝜆7𝑦$𝑦7𝐱$8𝐱7
thoả mãn𝜆$ ≥ 0 ∧ ∑$%!3 𝜆$𝑦$ = 0, 𝑖 ∈ [1, 𝑛] (2.26)
Việc giải λ có thể được thực hiện bằng phương pháp quy hoạch động bậc 2 (Quadratic Programing). Sau khi tìm được λ thì ta có các tham số:
𝐰 = ∑*
!#- 𝜆!𝑦!𝐱!
𝑏 = 𝑦! − ∑*"#- 𝜆"𝑦"𝐱":𝐱! (2.27)
Ở đây (xi,yi) là một điểm dữ liệu bất kì nào đó nằm trên đường biên gốc. Điểm dữ liệu này còn được gọi là Support Vector. Tên của phương pháp SVM cũng từ đây mà ra. Tuy nhiên, thường người ta tính bằng phép lấy trung bình tổng của tất cả các bi. Giả sử, ta có tập S các Support Vectors thì:
𝑏 = |𝕊|- ∑!∈𝕊 O𝑦! − ∑"#-* 𝜆"𝑦"𝐱":𝐱!P (2.28) Khi đó, một điểm dữ liệu mới sẽ được phân loại dựa theo:
𝑐𝑙𝑎𝑠𝑠(𝐱) = sgn 2d
2
89#
𝜆8𝑦8𝒙𝒊;𝒙 + 𝑏4 (2.29)
Trong đó hàm sgn là hàm xác định dấu, nhận giá trị 1 nếu đối số là không âm và -1 nếu ngược lại. Như vậy, chỉ cần các điểm Support Vector trên đường biên gốc là ta có thể ước lượng được các tham số tối ưu cho bài toán. Việc này rất có lợi khi tính toán giúp phương pháp này tiết kiệm được tài nguyên thực thi. Hiểu một cách đơn giản, thuật toán SVM có mục đích tìm một mô hình có thể phân chia tập dữ liệu ra các miền sao cho dữ liệu trong các miền đó cùng một nhãn nhiều nhất có thể. Tuy nhiên nếu chỉ có điều kiện trên thì có thể có rất nhiều mô hình thỏa mãn và trong số đó có rất nhiều mô hình không phải là tốt nhất. SVM thêm một điều kiện là “khoảng cách” từ điểm gần nhất đến mô hình là lớn nhất có thể. Khoảng cách này chính là lề. Lề càng lớn thì mô hình sẽ càng phân tách dữ liệu và dự đoán các dữ liệu chưa xuất hiện tốt hơn. Hay nói một cách khác, lề chính là thể hiện của việc mô hình có thể dự đoán các loại dữ liệu một cách “công bằng” và chịu nhiễu tốt hay không.
39
Hình 2.13 So sánh lề(margin).
Ta có thể thấy, đường mô hình trong hình bên phải (lề lớn) tốt hơn rất nhiều so với đường mô hình trong hình bên trái. Trong hình biên trái, đường mô hình bị lệch rất nhiều về bên đỏ kiến cho các điểm màu đỏ không xuất hiện trong huấn luyện dễ bị nhận nhầm sang màu xanh hơn. Với hình bên phải, đường mô hình nằm chính giữa hai tập dữ liệu. Đây là lề lớn nhất có thể đạt được và cũng là đường mô hình tốt nhất để phân chia hai tập dữ liệu. Trong huấn luyện, SVM định nghĩa một siêu tham số gọi là C. Tham số này đại diện cho việc huấn luyện ưu tiên mô hình sẽ phân loại chính xác các điểm dữ liệu hay ưu tiên tìm được mô hình có lề lớn nhất có thể hơn. Ban đầu, thuật toán SVM được xác định bằng lề cứng, tức là bắt buộc toàn bộ dữ liệu phải được chia chính xác. Tuy nhiên trong thực tế, rất ít khi tồn tại một bộ dữ liệu có thể thõa mãn điều kiện này. Từ đó khái niệm SVM lề mềm được đưa ra. Theo đó, thuật toán SVM sẽ cho phép chấp nhận một số điểm không được chia chính xác tuyệt đối. Điều này giúp thuật toán có thể áp dụng với các bài toán trong thực tế. Và khi này, tham số C sẽ rất có ý nghĩa trong việc điều kiển việc huấn luyện ưu tiên điều kiện phân loại đúng các điểm dữ liệu hay ưu tiên khả năng chịu nhiễu và dự đoán các dữ liệu chưa xuất hiện.
Hình 2.14 Ví dụ kết quả thuật toán SVM (hình bên trái là lề cứng và hình bên phải là lề mềm).
40
Trong các ví dụ trên, mô hình được nhắc đến đều là một đường thẳng. Tuy nhiên trong thực tế, mặt phẳng phân tách dữ liệu không đơn giản là đường thẳng mà có thể là các phương trình phức tạp hơn (ví dụ đường cong, hình tròn...). Đây là một siêu tham số cần lựa chọn khi huấn luyện mô hình và được gọi là lõi (kernel). Mỗi loại lõi có thể cho kết quả tốt nhất với từng trường hợp dữ liệu cụ thể.
Hình 2.15 Một số ví dụ về lõi của SVM.