Các thông tin này được tổ chức thành cặp dữ liệu có gán nhãn data, label, đây là nhóm thuật toán khá phổ biến trong các thuật toán Machine Learning và có nhiều ứng dụng liên quan đến bài
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
-o0o -
VŨ THỊ HOA
NGHIÊN CỨU BÀI TOÁN PHÂN LỚP DỮ LIỆU lP - SVM ĐỐI VỚI DỮ LIỆU KHÔNG KHẢ TÁCH TUYẾN TÍNH
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Thái Nguyên - năm 2022
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
ĐỒNG VĂN THẮNG
NGHIÊN CỨU BÀI TOÁN PHÂN LỚP DỮ LIỆU lP - SVM ĐỐI VỚI DỮ LIỆU KHÔNG KHẢ TÁCH TUYẾN TÍNH
Chuyên ngành: KHOA HỌC MÁY TÍNH Mã số: 8 48 01 01
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG D N KHOA HỌC TS Nguyễn Đình Dũng
Trang 3LỜI CẢM ƠN
Luận văn này được hoàn thành tại Trường Đại học Công nghệ Thông tin và Truyền thông dưới sự hướng dẫn của TS Nguyễn Đình Dũng Tác giả xin bày tỏ lòng biết ơn tới các thầy cô giáo thuộc Trường Đại học Công nghệ Thông tin và Truyền thông đã tạo điều kiện, giúp đỡ tác giả trong quá trình học tập và làm luận văn tại Trường, đặc biệt tác giả xin bày tỏ lòng biết ơn tới TS Nguyễn Đình Dũng đã tận tình hướng dẫn và cung cấp nhiều tài liệu cần thiết để tác giả có thể hoàn thành luận văn đúng thời hạn
Xin chân thành cảm ơn anh chị em học viên cao học và bạn bè đồng nghiệp đã trao đổi, khích lệ tác giả trong quá trình học tập và làm luận văn tại Trường Đại học Công nghệ Thông tin và Truyền thông – Đại học Thái Nguyên
Cuối cùng tác giả xin gửi lời cảm ơn đến gia đình, những người đã luôn bên cạnh, động viên và khuyến khích tôi trong quá trình thực hiện đề tài
Thái Nguyên, ngày 10 tháng 8 năm 2022
Học viên cao học
Vũ Thị Hoa
Trang 4LỜI CAM ĐOAN
Tôi xin cam đoan luận văn này do chính tôi thực hiện, dưới sự hướng dẫn khoa học của TS Nguyễn Đình Dũng, các kết quả lý thuyết được trình bày trong luận văn là sự tổng hợp từ các kết quả đã được công bố và có trích dẫn đầy đủ, nếu sai tôi hoàn toàn chịu trách nhiệm
Thái Nguyên, tháng 8 năm 2022
Học viên
Vũ Thị Hoa
Trang 5CHƯƠNG 1 TỔNG QUAN VỀ PHÂN LỚP DỮ LIỆU 10
1.1 Giới thiệu về phân lớp dữ liệu 10
1.2 Lý thuyết tối ưu lồi 12
1.2.1 Một số khái niệm về tối ưu lồi 12
1.2.2 Bài toán tối ưu lồi 13
1.3 Thư viện CVXOPT trong python giải bài toán tối ưu lồi 15
1.3.1 Quy hoạch tuyến tính 15
1.3.2 Quy hoạch toàn phương 16
1.4 Kết luận chương 1 18
CHƯƠNG 2 PHÂN LỚP DỮ LIỆU SỬ DỤNG MÁY HỖ TRỢ VÉC TƠ 19
2.1 Bài toán tối ưu SVM 19
2.2 Hàm đối ngẫu Lagrange 22
2.3 Bài toán đối ngẫu SVM 23
2.4 Phương pháp tìm nghiệm cho bài toán SVM 25
2.4.1 Tìm nghiệm theo công thức 26
2.4.2 Tìm nghiệm có sử dụng thư viện SKLEARN 28
2.5 Bài toán SVM biên mềm 29
2.5.1 Phương pháp nhân tử Lagrange 30
2.5.2 Phương pháp Gradient Descent 35
2.6 Kết luận chương 2 39
CHƯƠNG 3 PHƯƠNG PHÁP HÀM NHÂN VÀ BÀI TOÁN lP-SVM 40
Trang 63.1 Phương pháp hàm nhân 40
3.1.1 Khái niệm hàm nhân 40
3.1.2 Tính chất hàm nhân và một số hàm nhân thông dụng 42
3.2 Bài toán lp-SVM 43
3.2.1 Phát biểu bài toán 43
3.2.2 Bài toán đối ngẫu Lagrange 44
3.2.3 Phương pháp hàm nhân 46
3.3 Một số kết quả tính toán thực nghiệm 48
3.3.1 Bài toán phân biệt giới tính 48
3.3.2 Bài toán XOR 51
3.4 Kết luận chương 3 54
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 56
TÀI LIỆU THAM KHẢO 57
Trang 7DANH MỤC CÁC TỪ VIẾT TẮT Từ hoặc
SVM Support Vector Machine Máy véc tơ hỗ trợ
CVXOPT Convex Optimization Thƣ viện CVXOPT trong Python KKT Karush-Kuhn-Tucker Hệ điều kiện Karush-Kuhn-Tucker
SKLEARN Scikit-learn Thƣ viện mã nguồn mở dành cho học máy
lp - SVM lP - Support Vector Machine Bài toán SVM trong không gian lp
Trang 8DANH MỤC CÁC HÌNH ẢNH
Hình 1.1 Sử dụng thư viện CVXOPT giải bài toán quy hoạch toàn phương 17 Hình 2.2 Tìm bộ phân lớp tuyến tính theo công thức 28 Hình 2.2 Dữ liệu không khả tách tuyến tính (a) và gần khả tách tuyến tính (b) 29 Hình 3.1 Các ví dụ mẫu trong AR Face database thu gọn 49
Trang 9MỞ ĐẦU
Trong những năm gần đây, Học máy (Machine Learning) là lĩnh vực được nhiều chuyên gia trong và ngoài nước quan tâm Đã có nhiều công trình công bố có giá trị học thuật, ứng dụng cao trong đời sống xã hội, điều này như là một bằng chứng của cuộc cách mạng công nghiệp lần thứ tư Các thuật toán học máy thường được chia làm 4 nhóm: học có giám sát (Supervised learning), học không giám sát (Unsupervised learning), học bán giám sát (Semi-supervised lerning) và học tăng cường (Reinforcement learning) Trong đó, học có giám sát là thuật toán dự đoán đầu ra của một dữ liệu mới dựa trên các thông tin đầu vào đã biết trước Các thông tin này được tổ chức thành cặp dữ liệu có gán nhãn (data, label), đây là nhóm thuật toán khá phổ biến trong các thuật toán Machine Learning và có nhiều ứng dụng liên quan đến bài toán phân lớp [1] (Bài toán phân biệt giới tính dựa trên ảnh khuôn mặt, bài toán phân biệt 2 chữ số viết tay,…), có thể kể đến một số thuật toán tiêu biểu: thuật toán K láng giềng gần nhất (K-nearest neighbors), thuật toán học Perceptron và hồi quy Logistic, hồi quy Softmax và một trong những thuật toán phân lớp phổ biến nhất là thuật toán SVM (Máy vec tơ hỗ trợ - Support Vector Machine)
Đối với bài toán phân lớp [2], ta giả sử rằng có hai lớp khác nhau được mô tả bởi các điểm trong không gian nhiều chiều, hai lớp này là khả tách tuyến tính, tức tồn tại một siêu phẳng phân chia chính xác hai lớp đó Bài toán đặt ra là tìm một siêu mặt phẳng phân chia hai lớp đó sao cho tất cả các điểm thuộc một lớp nằm về cùng một phía của siêu phẳng và ngược phía với toàn bộ các điểm thuộc lớp còn lại, trong đó siêu phẳng phải đảm bảo là mặt phân chia tốt nhất theo một tiêu chí nào đó Bài toán tối ưu như vậy được gọi là bài toán tối ưu SVM Nếu siêu phẳng phân chia có dạng là {z Rd:w z+b=0}T thì hàm mục tiêu là
Trang 10Bài toán này còn gọi là bài toán tối ưu SVM biên cứng (Hard margin SVM) Trong một số trường hợp, tập dữ liệu là tập không khả tách tuyến tính hoặc gần khả tách tuyến tính [3] thì bài toán tối ưu là không khả lồi, tức là tập khả lồi là tập rỗng, khi đó bài toán tối ưu SVM trở nên vô nghiệm, lúc này biên phân chia bởi siêu phẳng còn gọi là biên cứng (Hard margin) Khắc phục hạn chế này, ta có thể chấp nhận một số điểm dữ liệu nằm ở gần biên giữa hai lớp lấn sang phía bên kia biên hay còn nói cách khác là chấp nhận một số điểm dữ liệu thuộc vùng không khả tách, biên tạo bởi mặt phân cách và mặt biên được gọi là biên mềm (soft margin)
Với bài toán SVM biên mềm (soft margin SVM), hàm mục tiêu sẽ có thêm một số hạng nhằm tối thiểu dữ liệu thuộc vùng không khả tách Từ đó ta có
ở đây C là hằng số dương dùng để điều chỉnh biên (margin) và dữ liệu thuộc
vùng không khả tách, Remp(H) là hàm độ đo sự không an toàn của những điểm nhiễu của điểm dữ liệu thứ i, nếu điểm xi thuộc lớp phân tách thì i 0
Khi nghiên cứu về bài toán tối ưu SVM biên mềm, ta có hai cách tiếp cận khác nhau: Hướng tiếp cận thứ nhất [4] là đưa về bài toán tối ưu không ràng buộc và sử dụng phương pháp Gradient descent để tìm lời giải tối ưu cho bài toán Hướng tiếp cận thứ hai là giải một bài toán tối ưu có ràng buộc bằng cách giải bài toán đối ngẫu giống như đối với việc tìm lời giải cho bài toán tối ưu SVM biên cứng, phương pháp giải dựa vào bài toán đối ngẫu là cơ sở cho phương pháp hàm nhân (kernel) SVM khi tập dữ liệu không khả tách tuyến tính hoặc gần khả tách tuyến tính [5]
Trang 11Phương pháp hàm nhân là tìm một phép biến đổi không gian sao cho dữ liệu ban đầu giữa hai lớp là không khả tách tuyến tính được biến đổi sang không gian mới Ở không gian mới này, dữ liệu trở nên khả tách, khi đó, ta có thể dùng các bộ phân lớp thông thường như PLA, hồi quy Logistic, hay SVM biên cứng/mềm để phân lớp dữ liệu Các hàm nhân thường tạo ra dữ liệu mới có số chiều cao hơn số chiều của dữ liệu ban đầu, thậm chí là vô hạn chiều Nếu tính toán các hàm này trực tiếp, chắc chắn chúng ta sẽ gặp các vấn đề về bộ nhớ và hiệu năng tính toán Có một cách tiếp cận là sử dụng các hàm nhân mô tả quan hệ giữa hai điểm dữ liệu bất kỳ trong không gian mới, thay vì đi tính toán trực tiếp từng điểm dữ liệu trong không gian mới
Hiện nay, đã có nhiều công trình mở rộng bài toán (2) từ chuẩn Euclide l2 sang dạng tổng quát lp ([6]-[9]), khi sử dụng chuẩn l l1, [9] thì bài toán SVM dẫn về bài toán quy hoạch tuyến tính, sử dụng thuật toán SVM sẽ cho ta bộ phân lớp thưa mà điều này rất dễ dẫn tới hiện tượng quá khớp (Overfitting), đây là hiện tượng không mong muốn trong học máy
Trong luận văn này, học viên tập trung vào việc nghiên cứu bài toán phân
lớp SVM trong không gian l2, trên cơ sở những kết quả đạt được luận văn tiếp
tục mở rộng (2) từ chuẩn l2 sang chuẩn lp với 1 p , trong đó có sử dụng phương pháp hàm nhân để chuyển bài toán sang không gian mới mà tại đó tập dữ liệu là khả tách (tức là tồn tại nghiệm là một mặt phân tách tập dữ liệu thành 2 lớp, thường là phân tách phi tuyến) nhằm tìm được bộ phân lớp tối ưu cho bài toán:
Ngoài phần mở đầu, kết luận và tài liệu tham khảo, nội dung chính của luận văn được bố cục thành 3 chương:
Chương 1 trình bày tổng quan về phân lớp dữ liệu và các kiến thức cơ bản về tối ưu lồi được sử dụng trong luận văn;
Chương 2 là giới thiệu bài toán phân lớp dữ liệu sử dụng máy hỗ trợ véc tơ
Chương 3 là Phương pháp hàm nhân, bài toán lp-SVM và một số kết quả tính toán thực nghiệm
Trang 12CHƯƠNG 1
TỔNG QUAN VỀ PHÂN LỚP DỮ LIỆU
Chương này giới thiệu tổng quan về phân lớp dữ liệu và các kiến thức nền tảng toán học phục vụ cho quá trình xây dựng mô hình phân lớp đó là lý thuyết tối ưu lồi Các kiến thức về lý thuyết tối ưu lồi được tham khảo chủ yếu từ tài liệu tham khảo [11] Bao gồm các nội dung chính sau:
Giới thiệu về phân lớp dữ liệu Lý thuyết tối ưu lồi
Thư viện CVOPT trong python giải bài toán tối ưu lồi
1.1 Giới thiệu về phân lớp dữ liệu
Bài toán phân lớp là quá trình phân lớp một đối tượng dữ liệu vào một hay nhiều lớp đã cho trước nhờ một mô hình phân lớp
Mô hình này được xây dựng dựa trên một tập dữ liệu được xây dựng trước đó có gán nhãn còn gọi là tập huấn luyện
Quá trình phân lớp là quá trình gán nhãn cho đối tượng dữ liệu
Nhiệm vụ của bài toán phân lớp là cần tìm một mô hình phân lớp để khi
có dữ liệu mới thì có thể xác định được dữ liệu đó thuộc vào phân lớp nào
Có nhiều bài toán phân lớp dữ liệu như phân lớp nhị phân, phân lớp đa lớp, phân lớp đa trị
Bài toán phân lớp nhị phân là bài toán gán nhãn dữ liệu cho đối tượng vào một trong hai lớp khác nhau dựa vào việc dữ liệu đó có hay không có các đặc trưng của bộ phân lớp
Bài toán phân lớp đa lớp là quá trình phân lớp dữ liệu với số lượng lớp từ hai lớp trở lên Như vậy với từng dữ liệu phải xem xét và phân lớp chúng vào những lớp khác nhau chứ không phải là hai lớp như bài toán phân lớp nhị phân
Trang 13Ứng dụng của bài toán này được sử dụng rộng rãi trong thực tế, ví dụ như bài toán nhận dạng khuôn mặt, nhận diện giọng nói, phát hiện email spam,
Để xây dựng được mô hình phân lớp và đánh giá được mô hình phải trải qua các quá trình sau:
Bước 1: Chuẩn bị tập dữ liệu huấn luyện và rút trích đặc trưng
Công đoạn này được xem là công đoạn quan trọng trong các bài toán về học máy Vì đây là đầu vào cho việc học để tìm ra mô hình của bài toán Chúng ta phải biết cần chọn ra những đặt trưng tốt của dữ liệu, lược bỏ những đặc trưng không tốt, gây nhiễu Vấn đề đặt ra là ước lượng số chiều của dữ liệu bao nhiêu là tốt hay nói cách khác là chọn bao nhiêu đặc trưng Nếu số chiều quá lớn gây khó khăn cho việc tính toán thì phải giảm số chiều của dữ liệu nhưng vẫn giữ được độ chính xác của dữ liệu
Ở bước này ta chuẩn bị bộ dữ liệu để kiểm tra trên mô hình Thông thường sẽ sử dụng kiểm tra chéo để chia tập dữ liệu thành hai phần, một phần phục vụ cho huấn luyện và phần còn lại phục vụ cho mục đích kiểm tra trên mô
hình Có hai cách thường sử dụng trong kiểm tra chéo là splitting và k-fold
Bước 2: Xây dựng mô hình phân lớp
Mục đích của mô hình huấn luyện là tìm ra hàm f(x) và thông qua hàm f tìm được để gán nhãn cho dữ liệu, bước này thường được gọi là bước huấn luyện: y=f(x)
Thông thường để xây dựng mô hình phân lớp cho bài toán này cần sử dụng các thuật toán học giám sát (supervised learning) như k-nearest neighbors, Neural Network, SVM, Decision tree, Naive Bayes
Bước 3: Kiểm tra dữ liệu với mô hình
Sau khi đã tìm được mô hình phân lớp ở bước 2, thì ở bước này sẽ đưa vào các dữ liệu mới để kiểm tra trên mô hình phân lớp
Trang 14Bước 4: Đánh giá mô hình phân lớp và chọn ra mô hình tốt nhất
Bước cuối cùng là đánh giá mô hình bằng cách đánh giá độ chính xác của dữ liệu kiểm tra và dữ liệu huấn luyện thông qua mô hình tìm được Nếu không đạt được kết quả mong muốn thì phải thay đổi các tham số của các thuật toán học để tìm ra các mô hình tốt hơn và kiểm tra, đánh giá lại mô hình phân lớp, và cuối cùng chọn ra mô hình phân lớp tốt nhất cho bài toán
Nhằm phục vụ trình bày các lý thuyết ở chương 2 và chương 3, sau đây là một số kiến thức nền tảng toán học cơ bản liên quan đến học máy
1.2 Lý thuyết tối ưu lồi
1.2.1 Một số khái niệm về tối ưu lồi
Định nghĩa 1.1 Một đường thẳng đi qua hai điểm (hai véc tơ) a, b trong
được gọi là một tập lồi nếu D chứa mọi đoạn thẳng đi qua hai điểm bất kỳ của nó Tức là D lồi khi và chỉ khi ∀x, y ∈ D, λ ∈ [0, 1] ⇒ λx + (1 - λ)y ∈ D
Định nghĩa 1.4 Một tập D được gọi là tập affine nếu nó chứa mọi đường
thẳng đi qua hai điểm bất kỳ của nó, tức là
Trang 15Một siêu phẳng sẽ chia không gian ra hai nửa không gian Nửa không gian
| a, x} là nửa không gian mở
Định nghĩa 1.8 Một tập D được gọi là nón nếu ∀λ > 0, ∀x ∈ D ⇒ λx ∈
D Một nón được gọi là nón lồi nếu nó đồng thời là một tập lồi Một nón được
gọi là nón nhọn nếu nó không chứa đường thẳng Nếu nón này là một tập lồi đa diện thì ta nói nó là nón lồi đa diện
Khi biến x là một ma trận, các hàm affine được định nghĩa có dạng:
chéo của một ma trận vuông, a là một ma trận có cùng chiều với x
Định nghĩa 1.11 Dạng toàn phương
Cho biến là một vector x, một dạng toàn phương là một hàm số có dạng:
Nếu A là một ma trận nửa xác định dương thì f(x) là một hàm lồi
1.2.2 Bài toán tối ưu lồi
a) Phát biểu bài toán
Các bài toán về học máy thường dẫn về các bài toán tối ưu, trong mục này trình bày một bài toán tối ưu tổng quát như sau:
Xét bài toán tìm điểm cực tiểu của một hàm lồi trên một tập lồi có dạng sau:
Trang 16X R là một tập lồi đóng khác rỗng, f g, i là các hàm lồi hữu hạn trên
X , hj là các hàm affine hữu hạn và độc lập tuyến tính trên tập affine của X Bài toán (1.1) được hiểu là tìm một điểm *
Bài toán (1.1), (1.2) có thể đưa về đưa về bài toán tối ưu không ràng buộc bằng phương pháp nhân tử Lagrange, theo phương pháp này, ta đưa Bài toán (1.1), (1.2) về tìm điểm cực tiểu của hàm sau: Bài toán tìm điểm tối ưu của (1.3) có thể giải được bằng cách giải hệ phương trình đạo hàm bằng không theo từng thành phần, tức là tìm nghiệm của hệ phương trình x, , L x( , , ) 0
Việc giải Bài toán (1.1) cho ta điểm tối ưu *
x , điểm tối ưu này có thể là điểm tối ưu toàn cục hoặc điểm tối ưu cục bộ Điểm tối ưu cục bộ nếu tồn tại
x được gọi là điểm tối ưu toàn cục Trong bài toán tối ưu lồi, điểm tối ưu cục bộ là điểm tối ưu toàn cục
b) Điều kiện tối ưu cho hàm mục tiêu
Xét bài toán tối ưu toàn cục (1.1) Có bốn trường hợp xảy ra:
x sao cho *
f x inf f x
Trang 17Như vậy để Bài toán (1.1), (1.2) giải được ta cần đặt ra các điều kiện để
bài toán thuộc trường hợp (iv), các kết quả về điều kiện này được đưa ra trong
[11] và được thể hiện bởi định lý sau:
và các điều kiện đạo hàm triệt tiêu, điều kiện độ lệch bù cũng là điều kiện đủ để điểm chấp nhận *
x là nghiệm tối ưu của Bài toán (1.1)
1.3 Thư viện CVXOPT trong python giải bài toán tối ưu lồi
CVXOPT là một thư viện trên Python giúp giải rất nhiều các bài toán Thư viện này được dùng để tối ưu nhiều bài toán tối ưu lồi, dễ sử dụng và thời gian chạy tương đối nhanh, mục này giới thiệu thư viện CVOPT là công cụ giải các bài toán tối ưu lồi, bao gồm các bài toán thuộc lớp các bài toán quy hoạch tuyến tính và quy hoạch toàn phương Quy hoạch tuyến tính và quy hoạch toàn phương đóng một vài trò quan trọng trong toán tối ưu, được sử dụng nhiều trong các thuật toán Machine Learning
1.3.1 Quy hoạch tuyến tính
Dạng tổng quát của Bài toán quy hoạch tuyến tính là
Sau đây là một bài toán quy hoạch tuyến tính và sử dụng thư viện CVXOPT để giải bài toán
xarg max {2x 3x 5}
Trang 18Sau khi đưa bài toán về dạng tổng quát, ta thực hiện thủ tục sau from cvxopt import matrix, solvers
Chạy đoạn chương trình ta được kết quả x1=2.67; x2 =7.33 là nghiệm tối ưu
của bài toán
1.3.2 Quy hoạch toàn phương
Bài toán quy hoạch toàn phương có dạng tổng quát như sau:
Trang 19Để hàm mục tiêu là hàm lồi thì P là ma trận nửa xác định dương Dễ thấy quy hoạch tuyến tính là trường hợp đặc biệt của quy hoạch toàn phương khi P là ma trận không
Sau đây là một bài toán quy hoạch toàn phương và sử dụng thư viện CVXOPT để giải bài toán
Miền ràng buộc D được mô tả như sau:
Hình 1.1 Sử dụng thư viện CVXOPT giải bài toán quy hoạch toàn phương
Giải bài toán này bằng thủ tục sau:
from cvxopt import matrix, solvers P = matrix([[1., 0.], [0., 1.]])
q = matrix([-10., -10.])
Trang 20Chương này, học viên nhắc lại bài toán phân lớp dữ liệu bao gồm khái niệm về bài toán phân lớp, các bước để xây dựng được mô hình và đánh giá mô hình phân lớp
Ngoài ra, để thuận tiện cho việc trình bày lý thuyết trong các chương tiếp theo, luận văn trình bày một số khái niệm cơ bản về tối ưu lồi, các điều kiện tối ưu lồi Các bài toán quy hoạch tuyến tính, quy hoạch dạng toàn phương cũng được giới thiệu trong chương này, bên cạnh đó chương này cũng giới thiệu thư viện CVXOPT trong python giải bài toán tối ưu lồi Các vấn đề về tối ưu lồi cũng sẽ được nhắc lại trong chương 2 Cụ thể, trong chương 2, luận văn sẽ trình bày bài toán tối ưu SVM và lời giải tìm được nhờ việc giải bài toán đối ngẫu tương ứng
Trang 21CHƯƠNG 2
PHÂN LỚP DỮ LIỆU SỬ DỤNG MÁY HỖ TRỢ VÉC TƠ
Chương này giới thiệu về máy hỗ trợ vec tơ SVM, bài toán đối ngẫu SVM và một số phương pháp giải bài toán SVM tìm bộ phân lớp dữ liệu Các kiến thức chương này được tham khảo chủ yếu từ tài liệu tham khảo [2], [5], [12] Bao gồm các nội dung chính sau:
Bài toán tối ưu SVM Hàm đối ngẫu Lagrange Bài toán đối ngẫu SVM
Phương pháp tìm nghiệm cho bài toán SVM Bài toán SVM biên mềm
2.1 Bài toán tối ưu SVM
Quá trình phân lớp còn được gọi là quá trình gán nhãn cho các tập dữ liệu Nhiệm vụ của bài toán phân lớp dữ liệu là cần xây dựng một mô hình phân lớp để khi có một dữ liệu mới vào thì mô hình phân lớp sẽ cho biết dữ liệu đó thuộc lớp nào Có nhiều cách để biểu diễn mô hình phân lớp và có rất nhiều thuật toán để giải nó, có thể kể đến các thuật toán tiêu biểu như mạng nơ ron, cây quyết định, mạng Bayes,…, trong đó thuật toán máy hỗ trợ vect tơ (SVM) được coi là công cụ mạnh, phổ biến và đặc biệt thích hợp cho phân lớp dữ liệu lớn và nhiều chiều
Thuật toán SVM ban đầu được tìm ra bởi Vladimir N Vapnik [12] và dạng chuẩn hiện nay sử dụng lề mềm được tìm ra bởi Vapnik và Corinna Cortes năm 1995 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 Trước hết ta xét bài toán phân lớp đơn giản nhất là phân lớp hai lớp C1, C2 với tập dữ liệu mẫu cho trước
Trang 22Giả sử các cặp dữ liệu của tập dữ liệu huấn luyện là (x , ),iyii1, 2, ,N, trong đó xiRddữ liệu đầu vào của một điểm dữ liệu, yi là nhãn của điểm dữ liệu đó và có giá trị là 1 nếu xi thuộc lớp C1, có giá trị là -1 nếu xi thuộc lớp C2
Trong trường hợp tập dữ liệu (x , ),iyii1, 2, ,N là khả tách tuyến tính, tức là tồn tại một siêu phẳng phân chia các điểm dữ liệu về hai nửa không gian C1 và C2 Bài toán đặt ra là tìm một siêu phẳng phân tách tập dữ liệu thành hai lớp Để thực hiện phân tách, hiện nay đã có nhiều thuật toán và cho kết quả là nhiều siêu phẳng phân tách
Nhiều bài toán thực tế dẫn về việc tìm siêu phẳng phân tách tốt nhất theo một nghĩa nào đó Mô hình phân lớp SVM được xét đến trong luận văn này thì tiêu chuẩn của siêu phẳng phân tách là khoảng cách từ các điểm dữ liệu huấn luyện tới mặt phân tách là lớn nhất có thể, đây chính là ý tưởng phân tách biên rộng
Để xác định một bộ phân lớp tuyến tính ta sử dụng hàm tuyến tính có dạngy f(x)w,xb làm siêu phẳng phân tách, trong đó ve tơ w là vec tơ
trọng số, b được gọi là độ dịch Trong không gian hai chiều w,x0 tương ứng với đường thẳng đi qua gốc toạ độ, trong không gian ba chiều thì nó là mặt phẳng đi qua gốc toạ độ Siêu phẳng phân chia không gian thành hai không gian phụ thuộc vào dấu của f(x) và f(x) này được gọi là bộ phân lớp tuyến tính
Hình 2.1 Bộ phân lớp tuyến tính
Trang 23Với mỗi cặp dữ liệu (x , )iyi , khoảng cách từ điểm đó tới mặt phân tách là
ta cần một siêu phẳng phân chia sao cho khoảng cách từ điểm gần
nhất của mỗi lớp tới siêu phẳng phân chia là như nhau, khoảng cách như nhau
này được gọi là margin
Việc margin rộng hơn sẽ mang lại hiệu ứng phân lớp tốt hơn đây chính là
điểm nổi bật mang lại kết quả phân loại tốt hơn so với mạng nơ ron một lớp (thuật toán học Perceptron) Theo nghĩa này thì bài toán tối ưu SVM chính là bài
toán đi tìm siêu phẳng phân chia sao cho margin là lớn nhất Khoảng cách
Trong (2.2), ta thay w bởi kw và b bởi kb trong đó k là một hằng số dương
thì siêu phẳng phân chia không thay đổi, tức khoảng cách từ từng điểm đến siêu
phẳng không đổi, tức margin không đổi Dựa trên tính chất này, ta giả sử:
y b (2.3) Khi đó yi(w xTib) 1, i 1, 2, , N và bài toán tối ưu (2.1) đưa về bài toán tối ưu có ràng buộc sau:
Trong bài toán (2.4), (2.5), hàm mục tiêu và các ràng buộc là hàm lồi nên nó là bài toán tối ưu lồi có ràng buộc thuộc lớp các bài toán quy hoạch toàn phương
Trang 24Từ (2.4) dễ thấy hàm mục tiêu là lồi chặt vì w 22 w IwT , I là ma trận đơn vị có tính chất xác định dương Vì vậy bài toán (2.4), (2.5) có nghiệm duy nhất
và có thể tìm được nghiệm khi sử dụng thư viện CVXOPT của Python đã được
trình bày trong Chương 1 Tuy nhiên, việc giải bài toán này trở nên phức tạp khi số chiều d của không gian dữ liệu và số điểm dữ liệu N tăng lên cao Để khắc phục các hạn chế này thì thay vì giải bài toán (2.4), (2.5) ta đi giải bài toán đối ngẫu tương ứng vì hai lý do sau: Thứ nhất, bài toán đối ngẫu có những tính chất khiến nó được giải hiệu quả hơn Thứ hai, trong quá trình xây dựng bài toán đối ngẫu SVM có thể được áp dụng cho những bài toán mà dữ liệu không khả tách tuyến tính, tức là mặt phân chia không phải là một siêu phẳng mà có thể là các mặt có hình thù phức tạp hơn
2.2 Hàm đối ngẫu Lagrange
Trong chương 1, luận văn đã trình bày các điều kiện tồn tại nghiệm của bài toán tối ưu lồi, nếu bài toán lồi thoả mãn tiêu chuẩn Slater thì bài toán đối ngẫu cũng thoả mãn điều kiện Slater và nghiệm của bài toán chính là nghiệm của hệ điều kiện KKT Để đưa bài toán (2.4), (2.5) về bài toán đối ngẫu, ta sử dụng phương pháp nhân tử Lagrange
Phương pháp nhân tử Lagrange là phương pháp giúp tìm các điểm cực trị của hàm mục tiêu trên tập khả lồi của bài toán Nếu ta đưa được bài toán này về một bài toán không ràng buộc thì có thể tìm được nghiệm bằng cách giải hệ phương trình đạo hàm theo từng thành phần bằng 0 (giả sử rằng việc giải hệ phương trình này là khả thi)
Đối với Bài toán (2.4), (2.5) luôn luôn có một (siêu) mặt phẳng phân chia hai lớp nếu hai lớp đó là khả tách tuyến tính, tức bài toán có nghiệm, nên tập khả lồi của bài toán tối ưu (2.4) phải khác rỗng Tức luôn luôn tồn tại cặp (w0,b0) sao cho
1yi(w xTib )0, i 1, 2, , N
Trang 25Hay có thể viết tương đương 1yi(2w xT0 i2b0) 1, i 1, 2, , N Từ đây, nếu ta chọn w12w ,0 b12b0 thì khi đó ta có 1yi(w x1Tib1) 1 0 Như vậy Bài toán (2.4), (2.5) thỏa mã điều kiện Slater và hàm Lagrang của bài toán sẽ có
Nếu ta ký hiệu ma trân A=[y1x1, y2x2, , yNxN], véc tơ 1=[1,1, ,1] thì
(2.9) có thể viết gọn lại như sau:
Đặt BA AT , dễ thấy TA AT B 22 0 nên B là ma trận nửa xác định
dương Vậy ta có hàm đối ngẫu Lagrange là
2.3 Bài toán đối ngẫu SVM
Từ hàm đối ngẫu Lagrange và các điều kiện (2.8) ta có bài toán đối ngẫu SVM sau:
Trang 26Đây cũng là bài toán tối ưu lồi thuộc lớp các bài toán quy hoạch toàn
phương và hoàn toàn có thể giải được bằng thư viện CVXOPT như đã trình bày
trong Chương 1
Trong bài toán đối ngẫu này, số tham số phải tìm là N, là chiều của λ, tức
là số điểm dữ liệu Trong khi đó, với bài toán gốc (2.4)-(2.5), số tham số phải
tìm là d+1, là tổng số chiều của w và b, tức là số chiều của mỗi điểm dữ liệu
cộng với 1 Trong rất nhiều trường hợp, số điểm dữ liệu có được trong tập huấn luyện lớn hơn số chiều dữ liệu rất nhiều Nếu giải trực tiếp bằng các công cụ giải quy hoạch toàn phương, có thể bài toán đối ngẫu còn phức tạp hơn (tốn thời gian hơn) so với bài toàn gốc Tuy nhiên, điểm ưu việt của bài toán đối ngẫu này là
nhân SVM (Kernel SVM), tức là cho các bài toán mà dữ liệu không phải là khả
tách tuyến tính hoặc gấn khả tách tuyến tính Ngoài ra, dựa vào tính chất đặc biệt của hệ điều kiện KKT mà SVM có thể được giải bằng nhiều phương pháp hiệu
Trang 27Những điểm thoả mãn (2.18) thường chiếm tỷ lệ không nhiều trong tập N điểm và chỉ cần dựa trên những điểm vec tơ này, ta hoàn toàn có thể xác định được siêu phẳng phân tách cần tìm Điều này cho thấy, hầu hết các i 0, vậy mặc dù vec tơ RN có thể có số chiều rất lớn, phần tử khác không là không đáng kể và vec tơ RN được gọi là vec tơ thưa, lúc này máy hỗ trợ vec tơ thuộc nhóm mô hình thưa Với những mô hình thưa thường có cách giải hiệu quả hơn các mô hình khác, đây chính là lý do mà bài toán đối ngẫu SVM được quan tâm nhiều hơn so với bài toán SVM gốc (2.4)-(2.5)
Sau khi giải bài toán đối ngẫu (2.11)-(2.13) tìm được , ta tìm được w từ
(2.16), tìm được b từ (2.15) và (2.17) Trong những tính toán này, để giảm thiểu
khối lượng tính toán, ta chỉ cần quan tâm tới những những i 0 Gọi
S i:i 0 , NS là số phần tử của tập S, với mỗi iS ta có 1yi(w xTib )0
hoặc có thể viết là w xTi byi
Như vậy, nếu chỉ có một cặp (x , )iyi ta cũng có thể xác định được b Ở đây
w được xác định tại (2.16) Thông thường để đảm bảo sự ổn định trong tính toán
2.4 Phương pháp tìm nghiệm cho bài toán SVM
Trong mục này trình bày hai phương pháp tìm nghiệm cho bài toán SMV Phương pháp thứ nhất là tìm nghiệm bài toán (2.4) theo công thức (2.11)-(2.13) và (2.16), (2.19); phương pháp thứ hai là sử dụng trực tiếp thư viện SKLEARN
Trang 282.4.1 Tìm nghiệm theo công thức
Tìm nghiệm theo công thức được thực theo các bước sau:
X0 = np.random.multivariate_normal(means[0], cov, N) # class 1 X1 = np.random.multivariate_normal(means[1], cov, N) # class -1 X = np.concatenate((X0.T, X1.T), axis = 1) # all data
y = np.concatenate((np.ones((1, N)), -1*np.ones((1, N))), axis = 1) # labels
Bước 2: Giải bài toán (2.11)
from cvxopt import matrix, solvers # build K
V = np.concatenate((X0.T, -X1.T), axis = 1)
K = matrix(V.T.dot(V)) # see definition of V, K near eq (8) p = matrix(-np.ones((2*N, 1))) # all-one vector
Trang 29[[8.54018321e-01 2.89132533e-10 1.37095535e+00 6.36030818e-10 4.04317408e-10 8.82390106e-10 6.35001881e-10 5.49567576e-10 8.33359230e-10 1.20982928e-10 6.86678649e-10 1.25039745e-10 2.22497367e+00 4.05417905e-09 1.26763684e-10 1.99008949e-10 2.13742578e-10 1.51537487e-10 3.75329509e-10 3.56161975e-10]] Từ kết quả trên ta nhận thấy rằng hầu hết các giá trị của lambda đều rất nhỏ, Có 3 giá trị lớn so với 0 Ta chuyển sang Bước 3
Trang 30Kết quả phân lớp đƣợc minh hoạ nhƣ hình sau:
Hình 2.2 Tìm bộ phân lớp tuyến tính theo công thức 2.4.2 Tìm nghiệm có sử dụng thư viện SKLEARN
Để tìm nghiệm của bài toán (2.4), ta có thể sử dụng thƣ viện SKLEARN tại hàm sklearn.svm.SVC Sau đây là cách sử dụng thƣ viện giải bài toán
from sklearn.svm import SVC y1 = y.reshape((2*N,))
X1 = X.T # each sample is one row
clf = SVC(kernel = 'linear', C = 1e5) # just a big number