Support Vector Machine ( Svm Là Gì ? Máy Vector Hỗ Trợ (Support Vector Machine

SVM là gì?

SVM (Support Vector Machine) là 1 thuật toán học máy thuộc nhóm Supervised Learning (học có giám sát) được sử dụng trong các bài toán phân lớp dữ liệu (classification) hay hồi qui (Regression).

Bạn đang xem: Support vector machine ( svm là gì, máy vector hỗ trợ (support vector machine

SVM là 1 thuật toán phân loại nhị phân, SVM nhận dữ liệu vào và phân loại chúng vào hai lớp khác nhau. Với 1 bộ các ví dụ luyện tập thuộc hai thể loại cho trước, thuật toán luyện tập SVM xây dựng 1 mô hình SVM để phân loại các ví dụ khác vào hai thể loại đó.

Ví dụ về SVM tuyến tính

Có 1 không gian có nhiều điểm và các kí hiệu như sau:

**: 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.Giả sử có tới 3 siêu phẳng (Optimal hyperplane) là H1 (Xanh dương), H2 (Đỏ), H3 (Xanh lá). H3 sẽ bị loại đầu tiên vì không thể phân loại các điểm huấn luyện cho trước. H1 bị loại vì khoảng cách từ các điểm Support Vector đến siêu phẳng (Optimal hyperplane) chưa phải là cực đại. H2 là siêu phẳng cần tìm. Lúc này các siêu phẳng đó được xác định: w.x – b = 1 và w.x – b = -1Các điểm dữ liệu cho trước nằm trên các siêu phẳng song song được gọi là Support Vector.

yi: là các lớp (bản lề) chứa các điểm dữ liệu xi, ví dụ này mang giá trị 1 và -1.xi: là 1 vector thực nhiều chiều (p chiều). Nhiệm vụ là cần phải tìm 1 siêu phẳng (Optimal hyperplane) có lề lớn nhất chia tách các điểm dữ liệu có ban đầu để huấn luyện và các điểm sau này. Mỗi siêu phẳng (Optimal hyperplane) đều có thể được viết dưới dạng 1 tập các điểm thỏa mãn w.x-b = 0w: là 1 vector pháp tuyến của siêu phẳng (optimal hyperplane).b/||w||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.Giả sử có tới 3 siêu phẳng (Optimal hyperplane) là H1 (Xanh dương), H2 (Đỏ), H3 (Xanh lá). H3 sẽ bị loại đầu tiên vì không thể phân loại các điểm huấn luyện cho trước. H1 bị loại vì khoảng cách từ các điểm Support Vector đến siêu phẳng (Optimal hyperplane) chưa phải là cực đại. H2 là siêu phẳng cần tìm. Lúc này các siêu phẳng đó được xác định: w.x – b = 1 và w.x – b = -1Các điểm dữ liệu cho trước nằm trên các siêu phẳng song song được gọi là Support Vector.

Xem thêm: Top 27 Ứng Dụng, Phần Mềm Hay Cho Iphone Mới, Top 10 Ứng Dụng Hay Cho Iphone Không Thể Bỏ Qua

Tổng quan:

SVM là mô hình xây dựng 1 siêu phẳng hoặc 1 tập hợp các siêu phẳng trong 1 không gian nhiều chiều hoặc vô hạn chiều, có thể được sử dụng cho phân loại, hồi quy, hoặc các nhiệm vụ khác. Để phân loại tốt nhất thì phải xác định siêu phẳng (Optimal hyperplane) nằm ở càng xa các điểm dữ liệu của tất cả các lớp (Hàm lề) càng tốt, vì nói chung lề càng lớn thì sai số tổng quát hóa của thuật toán phân loại càng bé.Muốn các điểm dữ liệu có thể được chia tách 1 cách tuyến tính, thì bạn phải cần chọn hai siêu phẳng của lề sao cho không có điểm nào ở giữa chúng và khoảng cách giữa chúng là tối đa.Trong nhiều trường hợp, không thể phân chia các lớp dữ liệu 1 cách tuyến tính trong 1 không gian ban đầu được dùng để mô tả 1 vấn đề. Vì vậy, nhiều khi cần phải ánh xạ các điểm dữ liệu trong không gian ban đầu vào 1 không gian mới nhiều chiều hơn, để việc phân tách chúng trở nên dễ dàng hơn trong không gian mới. 

SVM là mô hình xây dựng 1 siêu phẳng hoặc 1 tập hợp các siêu phẳng trong 1 không gian nhiều chiều hoặc vô hạn chiều, có thể được sử dụng cho phân loại, hồi quy, hoặc các nhiệm vụ khác. Để phân loại tốt nhất thì phải xác định siêu phẳng (Optimal hyperplane) nằm ở càng xa các điểm dữ liệu của tất cả các lớp (Hàm lề) càng tốt, vì nói chung lề càng lớn thì sai số tổng quát hóa của thuật toán phân loại càng bé.Muốn các điểm dữ liệu có thể được chia tách 1 cách tuyến tính, thì bạn phải cần chọn hai siêu phẳng của lề sao cho không có điểm nào ở giữa chúng và khoảng cách giữa chúng là tối đa.Trong nhiều trường hợp, không thể phân chia các lớp dữ liệu 1 cách tuyến tính trong 1 không gian ban đầu được dùng để mô tả 1 vấn đề. Vì vậy, nhiều khi cần phải ánh xạ các điểm dữ liệu trong không gian ban đầu vào 1 không gian mới nhiều chiều hơn, để việc phân tách chúng trở nên dễ dàng hơn trong không gian mới.

Với các điểm tổng quan ở trên thì nhiệm vụ chính là phân loại thống kê.

Thuật toán được cho trước 1 số điểm dữ liệu cùng với nhãn của chúng thuộc các lớp cho trước (Huấn luyện).Mục tiêu của thuật toán là xác định xem 1 điểm dữ liệu mới sẽ được thuộc về lớp nào (Phân loại).

SVM trong OpenCV

Source code

Thuật toán được cho trước 1 số điểm dữ liệu cùng với nhãn của chúng thuộc các lớp cho trước (Huấn luyện).Mục tiêu của thuật toán là xác định xem 1 điểm dữ liệu mới sẽ được thuộc về lớp nào (Phân loại).

#include #include #include “opencv2/imgcodecs.hpp”#include #include using namespace cv;using namespace cv::ml;int main(int, char**){int width = 512, height = 512;Mat image = Mat::zeros(height, width, CV_8UC3);int labels<4> = { 1, 1, 1, -1 };Mat labelsMat(4, 1, CV_32SC1, labels);float trainingData<4><2> = { { 501, 10 }, { 255, 10 }, { 501, 255 }, { 10, 501 } };Mat trainingDataMat(4, 2, CV_32FC1, trainingData);Ptr svm = ml::SVM::create();svm->setType(ml::SVM::C_SVC);svm->setKernel(ml::SVM::LINEAR);svm->setTermCriteria(cv::TermCriteria(CV_TERMCRIT_ITER, 100, 1e-6));svm->train(trainingDataMat, ml::ROW_SAMPLE, labelsMat);Vec3b green(0, 255, 0), blue(255, 0, 0);for (int i = 0; i (1, 2) predict(sampleMat);if (response == 1)image.at(i, j) = green;else if (response == -1)image.at(i, j) = blue;}int thickness = -1;int lineType = 8;circle(image, Point(501, 10), 5, Scalar(0, 0, 0), thickness, lineType); // blackcircle(image, Point(255, 10), 5, Scalar(255, 255, 255), thickness, lineType); // whitecircle(image, Point(501, 255), 5, Scalar(0, 0, 255), thickness, lineType); // redcircle(image, Point(10, 501), 5, Scalar(0, 255, 0), thickness, lineType); // greenimshow(“SVM Simple Example”, image); waitKey(0);}

Phân tích

Thiết lập dữ liệu huấn luyệnfloat labels<4> = {1.0, -1.0, -1.0, -1.0};float trainingData<4><2> = {{501, 10}, {255, 10}, {501, 255}, {10, 501}};

Thiết lập dữ liệu huấn luyệnfloat labels<4> = {1.0, -1.0, -1.0, -1.0};float trainingData<4><2> = {{501, 10}, {255, 10}, {501, 255}, {10, 501}};

Rate this post

Viết một bình luận