首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

OpenCV 3.0 SVM C++ 接口完整代碼示例:訓練、預測、支援向量可視化

     編輯:關於C++

概覽

基於 OpenCV 3.x cv::ml::SVM 類的完整示例:生成數據、訓練 RBF 核 SVM、測試準確率、可視化決策邊界與支援向量。

關鍵代碼片段

SVM 配置與訓練

Ptr svm = ml::SVM::create();
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::RBF);
svm->setGamma(20);    // RBF 核參數
svm->setC(7);         // 懲罰係數
svm->setTermCriteria(TermCriteria(TermCriteria::COUNT + TermCriteria::EPS, 1000, 1E-6));

// 標籤需轉為 int 類型 Mat
Mat trainLabels(trainClasses.rows, 1, CV_32SC1);
for (int i = 0; i < trainClasses.rows; ++i)
    trainLabels.at(i, 0) = (int)trainClasses.at(i, 0);

svm->train(trainingData, ml::ROW_SAMPLE, trainLabels);

預測與評估

Mat predicted(testClasses.rows, 1, CV_32F);
svm->predict(testData, predicted);
// 計算準確率
float accuracy = evaluate(predicted, testClasses);

支援向量可視化

Mat supportVectors = svm->getSupportVectors();
for (int i = 0; i < supportVectors.rows; ++i) {
    Point pt(supportVectors.at(i,0)*size, supportVectors.at(i,1)*size);
    circle(svPlot, pt, 3, CV_RGB(0,0,0));
}
imshow("Support Vectors", svPlot);

完整流程

  1. 生成隨機訓練/測試點 (x,y) ∈ [0,1]²
  2. 按方程(如 y > sin(10x))打標籤 ±1
  3. 配置 RBF 核 SVM 參數
  4. 訓練、預測、計算準確率
  5. 可視化:訓練集、測試集、預測結果、支援向量

關鍵類/函數

類/函數用途
ml::SVM::create()創建 SVM 智能指針
setKernel(RBF/LINEAR/POLY/SIGMOID)設置核函數
setGamma/setC/setDegree/setCoef0核參數
train(data, ROW_SAMPLE, labels)訓練
predict(testData, results)預測
getSupportVectors()獲取支援向量

編譯依賴

g++ -std=c++11 main.cpp -o svm_demo `pkg-config --cflags --libs opencv`
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved