Chương 3 : CÔNG CỤ
3.2 PHẦN MỀM QT CREATOR
3.2.3 GUI trên QT Creator
Để thuận tiện cho việc sử dụng và theo dõi trong quá trình viết, kiểm tra chương trình, cũng như quá trình sử dụng sau này trên Qt Creator cũng hỗ trợ việc thiết kế giao diện như các ngơn ngữ lập trình hướng sự kiện khác với sự hỗ trợ của GUI (Graphical User Interface).
3.2.3.1 Các bước lập trình GUI trên Qt:
Ta mở chương trình Qt và chọn Create Project để tạo một dự án mới.
Hình 3.4: Giao diện chương trình Qt Creator
Sau đó, ta chọn Qt Gui Application để khởi tạo chương trình có hỗ trợ lập trình với Gui.
Tiếp theo ta chọn Choose và thiết lập thông tin project như: tên project, địa điểm lưu… Sau khi thiết lập xong chương trình sẽ được khởi tạo và xuất hiện các file chương trình cơ bản.
Hình 3.6: Giao diện project sau khi thiết lập
Ta chọn vào mục Forms và chọn tới file có tên là mainwindow.ui để mở giao
diện thiết kế form.
Hình 3.7: Giao diện thiết kế form
Tương tự như các ngơn ngữ lập trình hướng sự kiện khác ta cũng từ bảng công cụ chọn đối tượng mình cần tác động như: Button, Text, Label… vẽ ra khu vực
form có sẵn. Sau đó, ta thiết lập các thơng số cho các đối tượng như tên đối tượng, kích thước, nhãn hiển thị…
Hình 3.8: Form thiết kế hồn chỉnh
Sau khi thiết kế xong form hoàn chỉnh ta tiến hành viết chương trình điều khiển cho các đối tượng để thực hiện các thao tác ta mong muốn bằng cách nhấp chuột phải chọn Go to slot chương trình sẽ xuất hiện bảng các sự kiện cho đối tượng, sau khi lựa chọn sự kiện chương trình tự động chuyển tới file chương trình
Mainwindow.cpp với sự kiện tương ứng với đối tượng đã chọn. Sau đó, ta tiến hành lập trình điều khiển đối tượng thực hiện các sự kiện tương ứng để hoàn thành nhiệm vụ đã đề ra.
3.2.3.2 Signals & Slots
Hình 3.10: Sơ đồ liên kết Objects, Signals và Slots
Với từng đối tượng ta sẽ có các sự kiện phù hợp để điều khiển đối tượng đó. Các sự kiện được liên kết và thực thi thông qua các signals và slots.
Signal: Là các hàm kiểm tra sự kiện như click button, changeValue của comboBox, changeText của textBox, ...), Qt đã hỗ trợ sẵn một vài hàm kiểm tra sự kiện, tuy nhiên, ta cũng có thể tự định nghĩa tùy vào yêu cầu của project.
Slots: là các hàm để xử lý sự kiện tương ứng với sự kiện được kích hoạt.
Chỉ có các lớp là lớp con kế thừa từ QObject mới có thể chứa Signals và Slots, đồng thời, các lớp này phải chứa từ khoá Q_OBJECT nằm ở đầu của khai báo lớp.
Để liên kết các Signals và Slots với nhau, ta cần phải thiết lập kết nối giữa các đối tượng thông qua hàm QObject::connect().
Chương 4: GIẢI THUẬT SVM (SUPPORT VECTOR MACHINES)
4.1 Giới thiệu
Giải thuật SVM (Support Vector Machines) ban đầu được phát minh bởi Vladimir N. Vapnik và Alexey Ya. Chervonenkis vào năm 1963. Vào năm 1992, Bernhard E. Boser , Isabelle M. Guyon và Vladimir N. Vapnik đề xuất một cách để tạo ra các phân loại phi tuyến bằng cách áp dụng phương pháp Kernel cho các siêu phẳng có biên lớn nhất. Dạng chuẩn hiện nay là biên mềm được Corinna Cortes và Vapnik đề xuất năm 1993 và xuất bản năm 1995.
Đây là một tập hợp các phương pháp học máy có giám sát với các thuật tốn huấn luyện liên quan đến phân tích dữ liệu được sử dụng để phân loại và phân tích hồi quy. Với một tập hợp các ví dụ huấn luyện, mỗi ví dụ được đánh dấu là thuộc về một hay hai loại, một thuật toán huấn luyện SVM xây dựng một mơ hình gán các ví dụ mới cho một thể loại này hay loại kia, làm cho nó là một phân loại tuyến tính nhị phân khơng xác suất. Một mơ hình SVM là một đại diện của các ví dụ như các điểm trong khơng gian, được ánh xạ để các ví dụ của các loại riêng biệt được chia cho một khoảng trống rõ ràng càng rộng càng tốt. Các ví dụ mới sau đó được ánh xạ vào cùng khơng gian đó và dự đoán thuộc về một thể loại dựa trên khoảng cách mà chúng rơi xuống.
Ngoài việc thực hiện phân loại tuyến tính, SVM có thể thực hiện hiệu quả phân loại phi tuyến tính bằng cách sử dụng phương pháp Kernel, lập bản đồ ngõ vào của chúng vào không gian đặc trưng chiều cao.
Khi dữ liệu không được dán nhãn, học tập có giám sát là không thể, và một cách tiếp cận mới là học tập không được giám sát, cố gắng tìm tập hợp dữ liệu tự nhiên cho các nhóm, và sau đó lập bản đồ dữ liệu mới cho các nhóm được hình thành này. Thuật tốn phân cụm cung cấp sự cải tiến cho các máy vector hỗ trợ được gọi là phân nhóm vector hỗ trợ và thường được sử dụng trong các ứng dụng công nghiệp hoặc khi dữ liệu không được dán nhãn hoặc một số dữ liệu được dán nhãn là một tiền xử lý để phân loại.
4.2 Ứng dụng
- SVM rất hữu ích trong việc phân loại văn bản và siêu văn bản vì ứng dụng của chúng có thể làm giảm đáng kể nhãn cần gắn trong cả hai tiêu chuẩn thiết lập quy nạp và chuyển tiếp .
- Phân loại hình ảnh cũng có thể được thực hiện bằng cách sử dụng SVM. Kết quả thử nghiệm cho thấy rằng SVM đạt được độ chính xác của tìm kiếm cao hơn đáng kể so với các sơ đồ sàng lọc truy vấn truyền thống sau khi chỉ có ba đến bốn vòng phản hồi liên quan. Điều này cũng đúng với các hệ thống phân chia hình ảnh, bao gồm cả những người sử dụng phiên bản SVM đã sửa đổi sử dụng cách tiếp cận đặc quyền theo gợi ý của Vapnik.
- Nhận dạng ký tự cũng có thể sử dụng SVM.[8]
- Thuật toán SVM đã được áp dụng rộng rãi trong sinh học và các ngành khoa học khác [9]. Chúng được sử dụng để phân loại các protein có đến 90% các hợp chất phân loại chính xác. Các phép thử hoán vị dựa trên SVM trọng lượng đã được đề xuất như là một cơ chế để giải thích các mơ hình SVM. SVM trọng lượng máy vector cũng đã được sử dụng để giải thích các mơ hình SVM trong q khứ. Giải thích hậu kỳ các mơ hình máy vector hỗ trợ để xác định các đặc tính được sử dụng bởi mơ hình để đưa ra dự đốn là một lĩnh vực nghiên cứu mới có ý nghĩa đặc biệt trong sinh học.
4.3 SVM tuyến tính
Ta có một tập huấn luyện D gồm n điểm có dạng:
n i i p i i i,y )|x R ,y (x 1,1 1 D (4.1)
với yi mang giá trị 1 hoặc −1, xác định lớp của điểm xi . Mỗi xi là một vectơ
thực p-chiều. Ta cần tìm siêu phẳng có biên lớn nhất chia tách các điểm có yi = 1 và các điểm có yi = 1. Mỗi siêu phẳng đều có thể được viết dưới dạng một tập hợp các điểm x thỏa mãn:
w.x – b = 0 (4.2)
Với . ký hiệu cho tích vơ hướng và w là một vectơ pháp tuyến của siêu phẳng. Tham số
w b
xác định khoảng cách giữa gốc tọa độ và siêu phẳng theo hướng vectơ pháp tuyến w.
Chúng ta cần chọn w và b để cực đại hóa biên, hay khoảng cách giữa hai siêu mặt song song ở xa nhau nhất có thể trong khi vẫn phân chia được dữ liệu. Các siêu mặt ấy được xác định bằng:
w.x – b = 1 (4.3)
Và
w.x – b = -1 (4.4)
Hình 4.1: Siêu phẳng với biên cực đại
4.3.1 Biên cứng
Nếu dữ liệu huấn luyện có thể được chia tách một cách tuyến tính, thì ta có thể chọn hai siêu phẳng của biên sao cho khơng có điểm nào ở giữa chúng và sau đó tăng khoảng cách giữa chúng đến tối đa có thể. Bằng hình học, ta tìm được khoảng cách giữa hai siêu phẳng là
w
2
. Vì vậy ta muốn cực tiểu hóa giá trị w . Để đảm bảo khơng có điểm dữ liệu nào trong biên, ta thêm vào các điều kiện sau:
Với mỗi i ta có:
w.xi – b ≥ 1 cho xi thuộc lớp thứ nhất (yi =1) hoặc
w.xi – b ≤ -1 cho xi thuộc lớp thứ hai (yi = -1) Ta có thể viết gọn lại như sau: Với mọi 1 ≤ i ≤ n
1 ) - . (w x b yi i (4.5)
4.3.2 Biên mềm
Để mở rộng SVM đến các trường hợp dữ liệu khơng thể tách rời một cách tuyến tính, ta sử dụng hàm mất bản lề (hinge loss) : )) - . ( - max(0,1 yi w xi b (4.6)
Hàm này bằng không nếu ràng buộc trong (1) được thỏa mãn, nói cách khác, nếu xinằm ở phần biên đúng. Đối với dữ liệu về phần biên sai, giá trị của hàm này tỷ lệ với khoảng cách từ biên.
Sau đó cần tìm cực tiểu: 2 0,1 max 1 || ||w b - x . w y - n n 1 i i i λ (4.7)
Với tham số λ xác định sự cân bằng giữa tăng quy mô biên và đảm bảo rằng xi
nằm ở phần biên đúng. Như vậy, đối với các giá trị λ nhỏ, SVM biên mềm sẽ hoạt động giống hệt với SVM biên cứng nếu dữ liệu ngõ vào được phân loại theo tuyến tính, nhưng vẫn cần tìm hiểu xem quy tắc phân loại có khả thi hay khơng.
4.4 SVM phi tuyến
Thuật toán biên siêu phẳng cực đại gốc được đề xuất bởi Vapnik vào năm 1963 đã xây dựng một trình phân loại tuyến tính. Tuy nhiên, vào năm 1992, Bernhard E.Boser , Isabelle M. Guyon và Vladimir N. Vapnik đưa ra một phương pháp để tạo phân loại phi tuyến bằng cách áp dụng các thủ thuật kernel để đạt được biên siêu phẳng cực đại. Các kết quả thuật toán đạt được tương tự, ngoại trừ việc từng tích vơ hướng được thay thế bằng một hàm phi tuyến kernel. Điều này cho phép các thuật toán để phù hợp với những biên siêu phẳng cực đại trong một chuyển đổi khơng gian đặc trưng. Sự chuyển đổi có thể là phi tuyến và không gian chuyển đổi chiều cao; mặc dù phân loại là một siêu phẳng trong khơng gian chuyển đổi đặc trưng, nó có thể phi tuyến trong khơng gian ngõ vào ban đầu.
Hình 4.2: Thủ thuật Kernel
Đáng chú ý là làm việc trong một không gian đặc trưng chiều cao hơn sẽ tăng lỗi tổng quát (generalization error) của SVM, mặc dù được cung cấp đủ mẫu và các thuật toán vẫn hoạt động tốt.
Một số hàm Kernel thông thường bao gồm:
- Đa thức (đồng nhất): d j i j i,x x .x x k( )( ) - Đa thức (đồng nhất): d j i j i,x x .x x k( )( 1)
- Hàm cơ sở Gaussian radial: k(xi,xj)exp(γ|| xi xj||2) với γ > 0 đôi khi sử dụng γ = 1/2σ2
- Hàm hyperbolic tangent (Tanh): k(xi,xj)tanh(kxi .xj c) với một số (không phải tất cả) giá trị k > 0 và c < 0.
Hàm kernel liên quan đến sự biến đổi của (xi) theo phương trình ) ( ) ( ) (xi,xj xi . xj
k . Giá trị w nằm trong không gian chuyển đổi, với
i i i i
i α .y x
w ( )các kết quả tích vơ hướng có w để phân loại lại có thể dược tính bằng thủ thuật kernel. Ví dụ: i i i i i α .yk x ,x x ) ( ) ( 4.5 Tính tốn bộ phân loại SVM
Tính tốn bộ phân loại SVM (biên mềm) ta đi tìm giá trị nhỏ nhất của biểu thức: 2 0,1 max 1 || ||w b - w.x y - n n 1 i i i λ (4.8)
Ở đây ta tập trung vào bộ phân loại biên mềm vì như đã nói ở trên, chọn một giá trị λ nhỏ cho phân loại biên cứng với các dữ liệu ngõ vào có thể phân loại tuyến tính. Cách tiếp cận cổ điển, bao gồm việc tìm giá trị nhỏ nhất của biểu thức trên là một bài tốn quy hoạch tồn phương, được mô tả chi tiết dưới đây. Sau đó, các phương pháp tiếp cận gần đây hơn như suy giảm độ dốc phụ và các tọa độ gốc sẽ được nói đến.
4.5.1 Bài tốn gốc
Để tìm giá trị nhỏ nhất biểu thức có thể được viết lại như một bài tốn tối ưu hóa hạn chế với một hàm mục tiêu khác biệt theo cách sau:
Với mọi i є {1,…..,n} ta có một biến ζi = max(0,1 - yi(w.xi – b)). Lưu ý rằng ζi là số nhỏ nhất không âm thỏa mãn yi(w.xi – b) ≥ 1 – ζi .
Như vậy chúng ta có thể viết lại bài tốn tối ưu như sau: Tìm giá trị nhỏ nhất của: n 1 i 2 i ||w|| ζ n λ 1
Phụ thuộc yi(w.xi – b) ≥ 1 – ζi và ζi ≥ 0 với mọi i