Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.67 MB, 60 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b>TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG</b>
<small>---o0o--- </small>
<b>VŨ THỊ HOA </b>
<i><b>Thái Nguyên - năm 2022 </b></i>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><b>TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG </b>
<b>NGƯỜI HƯỚNG D N KHOA HỌC TS. Nguyễn Đình Dũng </b>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3"><b>LỜI CẢM ƠN </b>
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ể hồ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 q 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 đã ln bên cạnh, động viên và khuyến khích tơi trong q trình thực hiện đề tài.
<i>Thái Nguyên, ngày 10 tháng 8 năm 2022 </i>
<b> Học viên cao học </b>
<b> Vũ Thị Hoa </b>
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><b>LỜI CAM ĐOAN </b>
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 hồn tồn chịu trách nhiệm.
<i>Thái Nguyên, tháng 8 năm 2022 </i>
<b> Học viên </b>
<i><b> Vũ Thị Hoa </b></i>
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">CHƯƠ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 tồ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 tố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
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">3.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 tốn thực nghiệm ... 48
3.3.1. Bài tố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
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7"><b>DANH MỤC CÁC TỪ VIẾT TẮT Từ hoặc </b>
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
<i>l<sub>p</sub></i> - SVM <i>l<sub>P</sub> - Support Vector Machine Bài tốn SVM trong khơng gian l<sub>p </sub></i>
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8"><b>DANH MỤC CÁC HÌNH ẢNH </b>
Hình 1.1. Sử dụng thư viện CVXOPT giải bài toán quy hoạch tồ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
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><b>MỞ ĐẦU </b>
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 tố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 tố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 tố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 tồ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 tố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 <i>R<sup>d</sup></i>:w z+b=0}<i><sup>T</sup></i> thì hàm mục tiêu là
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">Bà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 tố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 tố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ó
<i>ở đây C là hằng số dương dùng để điều chỉnh biên (margin) và dữ liệu thuộc </i>
vùng không khả tách, <i><small>R</small><sub>emp</sub></i><small>(</small><i><small>H</small></i><small>)</small> 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><small>i</small></i>, nếu điểm <i>x<sub>i</sub></i> thuộc lớp phân tách thì <i><sub>i</sub></i> 0.
Khi nghiên cứu về bài tố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].
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Phươ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 tố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 tố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 tốn trực tiếp từng điểm dữ liệu trong không gian mới.
<i>Hiện nay, đã có nhiều cơng trình mở rộng bài toán (2) từ chuẩn Euclide l</i><sub>2</sub> <i>sang dạng tổng quát l<small>p</small></i> ([6]-[9]), khi sử dụng chuẩn <i>l l</i><sub>1</sub>, <sub></sub> [9] thì bài tốn SVM dẫn về bài tố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 tốn phân
<i>lớp SVM trong khơng gian l<sub>2</sub></i>, trên cơ sở những kết quả đạt được luận văn tiếp
<i>tục mở rộng (2) từ chuẩn l<sub>2</sub> sang chuẩn l<sub>p</sub></i> với <small>1 </small><i><small>p</small></i> , trong đó có sử dụng phương pháp hàm nhân để chuyển bài tố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 tốn:
Ngồ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ơ.
<i>Chương 3 là Phương pháp hàm nhân, bài toán l<small>p</small></i>-SVM và một số kết quả tính tốn thực nghiệm.
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12"><b>CHƯƠNG 1. </b>
<b>TỔNG QUAN VỀ PHÂN LỚP DỮ LIỆU </b>
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 tốn học phục vụ cho q 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:
<small></small> Giới thiệu về phân lớp dữ liệu. <small></small> Lý thuyết tối ưu lồi.
<small></small> Thư viện CVOPT trong python giải bài toán tối ưu lồi.
<b>1.1. Giới thiệu về phân lớp dữ liệu </b>
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.
<small></small> 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.
<small></small> Quá trình phân lớp là quá trình gán nhãn cho đối tượng dữ liệu.
<b>Nhiệm vụ của bài tốn phân lớp là cần tìm một mơ hình phân lớp để khi </b>
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 tố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ị.
<small></small> 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.
<small></small> Bài tốn phân lớp đa lớp là q 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.
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="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 tốn nhận dạng khn 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:
<i>Bước 1: Chuẩn bị tập dữ liệu huấn luyện và rút trích đặc trưng </i>
Công đoạn này được xem là công đoạn quan trọng trong các bài tố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 tố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 q lớn gây khó khăn cho việc tính tố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ơ
<b>hình. Có hai cách thường sử dụng trong kiểm tra chéo là splitting và k-fold. </b>
<i>Bước 2: Xây dựng mơ hình phân lớp </i>
<i>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). </i>
Thông thường để xây dựng mơ hình phân lớp cho bài tố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.
<i>Bước 3: Kiểm tra dữ liệu với mơ hình </i>
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.
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14"><i>Bước 4: Đánh giá mơ hình phân lớp và chọn ra mơ hình tốt nhất </i>
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 tố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 tố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.
<b>1.2. Lý thuyết tối ưu lồi </b>
<i><b>1.2.1. Một số khái niệm về tối ưu lồi </b></i>
<i><b>Định nghĩa 1.1. Một đường thẳng đi qua hai điểm (hai véc tơ) a, b trong </b></i>
<b> đượ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. </b>
<i><b>Đị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 </b></i>
thẳng đi qua hai điểm bất kỳ của nó, tức là
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">Một siêu phẳng sẽ chia không gian ra hai nửa không gian. Nửa không gian
| <i><small>a</small></i><small>, x</small>} là nửa không gian mở.
<i><b>Định nghĩa 1.8. Một tập D được gọi là nón nếu ∀λ > 0, ∀x ∈ D ⇒ λx ∈ </b></i>
<b>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 </b>
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.
<b>Khi biến x là một ma trận, các hàm affine được định nghĩa có dạng: </b>
<b>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. </b>
<i><b>Định nghĩa 1.11. Dạng toàn phương. </b></i>
<b>Cho biến là một vector x, một dạng tồn phương là một hàm số có dạng: </b>
<i><b>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. </b></i>
<i><b>1.2.2. Bài toán tối ưu lồi </b></i>
<i>a) Phát biểu bài toán </i>
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 tốn tối ưu tổng qt như sau:
Xét bài tố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:
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16"><i><small>X</small></i> <small></small><i><small>R</small></i> là một tập lồi đóng khác rỗng, <i>f g</i>, <i><sub>i</sub></i> là các hàm lồi hữu hạn trên
<i><small>X</small></i> , <i><small>h</small><sub>j</sub></i> 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 <i><small>X</small></i> . Bài toán (1.1) được hiểu là tìm một điểm <small>*</small>
Bài tốn (1.1), (1.2) có thể đưa về đưa về bài tố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 tốn (1.1), (1.2) về tìm điểm cực tiểu của hàm sau: Bài tố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 <small></small><i><sub>x</sub></i><sub>, ,</sub><sub> </sub><i><small>L x</small></i><small>( , , ) 0</small>.
Việc giải Bài toán (1.1) cho ta điểm tối ưu <small>*</small>
<i><small>x</small></i> , điểm tối ưu này có thể là điểm tối ưu tồ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
<i><small>x</small></i> đượ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.
<i>b) Điều kiện tối ưu cho hàm mục tiêu </i>
Xét bài tốn tối ưu tồn cục (1.1). Có bốn trường hợp xảy ra:
<i><small>x</small></i> sao cho <small>*</small>
<i><small>f x</small></i> <small></small><i><small>inf</small></i><sub></sub> <i><small>f x</small></i> .
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">Như vậy để Bài toán (1.1), (1.2) giải được ta cần đặt ra các điều kiện để
<i>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 </i>
[11] và được thể hiện bởi định lý sau:
<small></small> 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 <small>*</small>
<i><small>x</small></i> là nghiệm tối ưu của Bài toán (1.1).
<b>1.3. Thư viện CVXOPT trong python giải bài toán tối ưu lồi </b>
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 tốn tối ưu lồi, bao gồm các bài toán thuộc lớp các bài tốn quy hoạch tuyến tính và quy hoạch tồn phương. Quy hoạch tuyến tính và quy hoạch tồn phương đóng một vài trị quan trọng trong tốn tối ưu, được sử dụng nhiều trong các thuật toán Machine Learning.
<i><b>1.3.1. Quy hoạch tuyến tính </b></i>
Dạng tổng quát của Bài tốn quy hoạch tuyến tính là
Sau đây là một bài tốn quy hoạch tuyến tính và sử dụng thư viện CVXOPT để giải bài toán
xarg max {2<i>x</i> 3<i>x</i> 5}
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">Sau 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
<i>Chạy đoạn chương trình ta được kết quả x<sub>1</sub>=2.67; x<sub>2</sub> =7.33 là nghiệm tối ưu </i>
của bài tốn.
<i><b>1.3.2. Quy hoạch tồn phương </b></i>
Bài tốn quy hoạch tồn phương có dạng tổng quát như sau:
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="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 tốn
Miền ràng buộc D được mơ tả như sau:
<i><b>Hình 1.1. Sử dụng thư viện CVXOPT giải bài tốn quy hoạch tồn phương </b></i>
Giải bài tốn này bằng thủ tục sau:
from cvxopt import matrix, solvers P = matrix([[1., 0.], [0., 1.]])
q = matrix([-10., -10.])
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">Chươ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 tố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.
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21"><b>CHƯƠNG 2. </b>
<b>PHÂN LỚP DỮ LIỆU SỬ DỤNG MÁY HỖ TRỢ VÉC TƠ </b>
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 tố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:
<small></small> Bài toán tối ưu SVM <small></small> Hàm đối ngẫu Lagrange <small></small> Bài toán đối ngẫu SVM
<small></small> Phương pháp tìm nghiệm cho bài tốn SVM <small></small> Bài toán SVM biên mềm
<b>2.1. Bài toán tối ưu SVM </b>
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 tốn để giải nó, có thể kể đến các thuật tố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.
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">Giả sử các cặp dữ liệu của tập dữ liệu huấn luyện là (x , ),<i><sub>i</sub>y<sub>i</sub>i</i>1, 2,...,<i>N</i>, trong đó <small>x</small><i><sub>i</sub></i><small></small><i><small>R</small><sup>d</sup></i>dữ liệu đầu vào của một điểm dữ liệu, <i>y<sub>i</sub></i> là nhãn của điểm dữ liệu đó và có giá trị là 1 nếu x<i><sub>i</sub></i> thuộc lớp C1, có giá trị là -1 nếu <i>x<sub>i</sub></i> thuộc lớp C2.
Trong trường hợp tập dữ liệu (x , ),<i><sub>i</sub>y<sub>i</sub>i</i>1, 2,...,<i>N</i> 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 tố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 tốn và cho kết quả là nhiều siêu phẳng phân tách.
Nhiều bài tố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ạng<i><small>y</small></i><small></small> <i><small>f</small></i><small>(x)w,x</small><i><small>b</small></i> làm siêu phẳng phân tách, trong đó ve tơ <small>w</small> là vec tơ
<i>trọng số, b được gọi là độ dịch. Trong không gian hai chiều </i> <small>w,x0</small> 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 <i><small>f</small></i><small>(x)</small> và <i><small>f</small></i><small>(x)</small> này được gọi là bộ phân lớp tuyến tính.
<i><b>Hình 2.1. Bộ phân lớp tuyến tính </b></i>
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">Với mỗi cặp dữ liệu (x , )<i><sub>i</sub>y<sub>i</sub></i> , 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
<i>này được gọi là margin. </i>
<i>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>
đ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 tốn tối ưu SVM chính là bài
<i>tốn đi tìm siêu phẳng phân chia sao cho margin là lớn nhất. Khoảng cách </i>
<i>Trong (2.2), ta thay w bởi kw và b bởi kb trong đó k là một hằng số dương </i>
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
<i>phẳng không đổi, tức margin khơng đổi. Dựa trên tính chất này, ta giả sử: </i>
<i><small>y</small></i> <small></small><i><small>b</small></i> <small></small> (2.3) Khi đó <i><small>y</small><sub>i</sub></i><small>(w x</small><i><sup>T</sup><sub>i</sub></i><small></small><i><small>b</small></i><small>) 1, </small><i><small>i</small></i> <small>1, 2,..., N</small> 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 tố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 tốn tối ưu lồi có ràng buộc thuộc lớp các bài tốn quy hoạch toàn phương.
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">Từ (2.4) dễ thấy hàm mục tiêu là lồi chặt vì <small>w</small> <sup>2</sup><sub>2</sub> <small>w Iw</small><i><sup>T</sup></i> , I là ma trận đơn vị có tính chất xác định dương. Vì vậy bài tốn (2.4), (2.5) có nghiệm duy nhất
<b>và có thể tìm được nghiệm khi sử dụng thư viện CVXOPT của Python đã được </b>
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 tố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 tố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 tốn đối ngẫu SVM có thể được áp dụng cho những bài tố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.
<b>2.2. Hàm đối ngẫu Lagrange </b>
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 tố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 tốn (2.4), (2.5) ln ln 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 tố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 (w<sub>0</sub><i>,b<sub>0</sub></i>) sao cho
<small>1</small><i><small>y</small><sub>i</sub></i><small>(w x</small><i><sup>T</sup><sub>i</sub></i><small></small><i><small>b</small></i> <small>)0, </small><i><small>i</small></i> <small>1, 2,..., N</small>
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">Hay có thể viết tương đương <small>1</small><i><small>y</small><sub>i</sub></i><small>(2w x</small><i><sup>T</sup></i><sub>0</sub> <i><sub>i</sub></i><small>2</small><i><small>b</small></i><sub>0</sub><small>) 1, </small><i><small>i</small></i> <small>1, 2,..., N</small>. Từ đây, nếu ta chọn w<sub>1</sub>2w ,<sub>0</sub> <i>b</i><sub>1</sub>2<i>b</i><sub>0</sub> thì khi đó ta có <small>1</small><i><small>y</small><sub>i</sub></i><small>(w x</small><sub>1</sub><i><sup>T</sup><sub>i</sub></i><small></small><i><small>b</small></i><sub>1</sub><small>) 1 0</small>. 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 tốn sẽ có
<i>Nếu ta ký hiệu ma trân A=[y<sub>1</sub></i>x<sub>1</sub><i>, y<sub>2</sub></i>x<sub>2</sub><i>,..., y<sub>N</sub></i>x<sub>N</sub><b>], véc tơ 1=[1,1,....,1] thì </b>
(2.9) có thể viết gọn lại như sau:
Đặt <i><small>B</small></i><small>A A</small><i><sup>T</sup></i> , dễ thấy <i><sup>T</sup></i><small>A A</small><i><sup>T</sup></i> <small>B</small> <sup>2</sup><sub>2</sub> <small>0</small><i> nên B là ma trận nửa xác định </i>
dương. Vậy ta có hàm đối ngẫu Lagrange là
<b>2.3. Bài toán đối ngẫu SVM </b>
Từ hàm đối ngẫu Lagrange và các điều kiện (2.8) ta có bài tốn đối ngẫu SVM sau:
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">Đây cũng là bài toán tối ưu lồi thuộc lớp các bài tốn quy hoạch tồn
<b>phương và hồn tồn có thể giải được bằng thư viện CVXOPT như đã trình bày </b>
trong Chương 1.
<i>Trong bài tốn đối ngẫu này, số tham số phải tìm là N, là chiều của λ, tức </i>
là số điểm dữ liệu. Trong khi đó, với bài tốn gốc (2.4)-(2.5), số tham số phải
<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 </i>
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 tồn phương, có thể bài tố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à
<i>nhân SVM (Kernel SVM), tức là cho các bài tốn mà dữ liệu khơng phải là khả </i>
tách tuyến tính hoặc gấn khả tách tuyến tính. Ngồ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
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">Nhữ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 <small></small><i><sub>i</sub></i> <small>0</small>, vậy mặc dù vec tơ <small>R</small><i><sup>N</sup></i> 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ơ <small>R</small><i><sup>N</sup></i> đượ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 tố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 tốn đối ngẫu (2.11)-(2.13) tìm được , ta tìm được w từ
<i>(2.16), tìm được b từ (2.15) và (2.17). Trong những tính tốn này, để giảm thiểu </i>
khối lượng tính tốn, ta chỉ cần quan tâm tới những những <small></small><i><sub>i</sub></i> <small>0</small> . Gọi
<small>S</small> <i><small>i</small></i><small>:</small><i><sub>i</sub></i> <small>0</small> , <i><small>N</small><sub>S</sub></i> là số phần tử của tập S, với mỗi <i><small>i</small></i><small>S</small> ta có <small>1</small><i><small>y</small><sub>i</sub></i><small>(w x</small><i><sup>T</sup><sub>i</sub></i><small></small><i><small>b</small></i> <small>)0</small>
hoặc có thể viết là <small>w x</small><i><sup>T</sup><sub>i</sub></i><small> </small><i><small>by</small><sub>i</sub></i>.
Như vậy, nếu chỉ có một cặp (x , )<i><sub>i</sub>y<sub>i</sub> ta cũng có thể xác định được b. Ở đây </i>
w được xác định tại (2.16). Thông thường để đảm bảo sự ổn định trong tính tốn
<b>2.4. Phương pháp tìm nghiệm cho bài tốn SVM </b>
Trong mục này trình bày hai phương pháp tìm nghiệm cho bài tốn SMV. Phương pháp thứ nhất là tìm nghiệm bài tố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.
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28"><i><b>2.4.1. Tìm nghiệm theo cơng thức </b></i>
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
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="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
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">Kết quả phân lớp đƣợc minh hoạ nhƣ hình sau:
<i><b>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 </b></i>
Để tìm nghiệm của bài tố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
</div>