SVM là gì?
SVM (Support Vector Machine) là một trong những thuật tân oán học tập trang bị ở trong nhóm Supervised Learning (học tập gồm giám sát) được thực hiện trong những bài toán thù phân lớp dữ liệu (classification) xuất xắc hồi qui (Regression).
Bạn đang xem: Support vector machine là gì
SVM là 1 thuật toán thù phân các loại nhị phân, SVM nhận dữ liệu vào với phân một số loại nó vào nhì lớp không giống nhau. Với 1 bộ những ví dụ luyện tập trực thuộc nhì thể loại mang đến trước, thuật toán luyện tập SVM xây cất 1 quy mô SVM nhằm phân các loại những ví dụ khác vào nhị thể nhiều loại đó.
Ví dụ về SVM tuyến đường tính
Có 1 không khí có tương đối nhiều điểm cùng các kí hiệu nhỏng sau:


Tổng quan:
SVM là mô hình xây dừng 1 khôn xiết phẳng hoặc 1 tập vừa lòng những cực kỳ phẳng trong 1 không khí nhiều chiều hoặc vô hạn chiều, có thể được sử dụng đến phân loại, hồi quy, hoặc những nhiệm vụ không giống. Để phân loại cực tốt thì phải xác định hết sức phẳng (Optimal hyperplane) nằm ở càng xa các điểm tài liệu của tất cả những lớp (Hàm lề) càng giỏi, do nói phổ biến lề càng mập thì không nên số tổng quát hóa của thuật tân oán phân một số loại càng nhỏ xíu.Muốn các điểm tài liệu có thể được chia bóc tách 1 cách tuyến tính, thì bạn cần cần chọn nhị khôn xiết phẳng của lề sao cho không có điểm như thế nào ở giữa bọn chúng và khoảng cách thân chúng là về tối nhiều.Trong nhiều trường phù hợp, cần yếu phân loại các lớp dữ liệu một cách đường tính trong 1 không khí ban đầu được dùng để làm biểu lộ 1 vụ việc. Vì vậy, đôi khi bắt buộc 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 rộng, để Việc phân bóc tách chúng trlàm việc đề nghị dễ ợt hơn trong không gian new.Với các điểm tổng quan tiền sống bên trên thì trách nhiệm đó là phân một số loại những thống kê.
Thuật toán thù được cho trước một số điểm dữ liệu cùng với nhãn của bọn chúng nằm trong các lớp mang đến 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ẽ tiến hành trực thuộc về lớp làm sao (Phân loại).SVM trong OpenCV
Source code
#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);}