OpenCV 機器學習之 支援向量機的用法例項

2021-06-22 10:15:19 字數 1947 閱讀 2825

用支援向量機進行文理科生的分類,依據的特徵主要是 數學成績與語文成績,這兩個特徵都服從高斯分布

程式**如下:

#include 

#include

using namespace std;

using namespace cv;

//生成具有乙個特徵的指定類別的訓練資料集

void generatetraindata_two_feature(int sample_counts,double miu1,double sigma1,double miu2,double sigma2,mat& train_data);

//把屬於兩個類的訓練資料集混和起來,並記錄對應的類別標籤

void mixtraindatafromtwoclasses(mat& train_data1,mat& train_data2,mat& total_train_data,mat& total_train_data_response);

int main(int argc, char* argv)

cout<

<

(i*101+j,0) = i; //第乙個特徵是數學成績,0到100 testsamples.at

(i*101+j,1) = j; //第二個特徵是語文成績, 0到100 } } //呼叫分類器對測試樣本進行分類 for(int i=0;i<101*101;i++) //繪製分類結果 mat result_map(101,101,cv_8uc3); for(int i=0;i<101;i++) } //把訓練資料點畫出來 for(int t=0;t

(t,0); pt.x = totalsamplesdata.at

(t,1); int label = samplesresponse.ptr

(t)[0]; //白色的點是第二類的訓練點集合,黑色的點是第一類的訓練點集合 circle(result_map,pt,1,label==1? cv_rgb(0,0,0):cv_rgb(255,255,255)); } namedwindow("分類器判決面",0); imshow("分類器判決面",result_map); cout<

<

(k),train_data1.ptr

(i),sz1.width*(sizeof(float))); total_train_data_response.at

(k) = 1; k++; memcpy(total_train_data.ptr

(k),train_data2.ptr

(i),sz2.width*(sizeof(float))); total_train_data_response.at

(k) = 2; k++; } //如果兩類樣本的數目不一樣,則把多餘的樣本追加到末尾 if(sz1.height > sz2.height) } if(sz2.height > sz1.height) } } //生成具有兩個特徵的指定類別的訓練資料集 void generatetraindata_two_feature(int sample_counts,double miu1,double sigma1,double miu2,double sigma2,mat& train_data) else if(b>=minfeaturevalue && b<=maxfeaturevalue) else } }

分類結果:

機器學習之支援向量機

描述 用於處理二分類問題,對於二維線性可分的問題,尋找決策邊界 分割線 使得支撐向量到決策邊界的距離盡可能的大.對於線性不可分的問題,則首先將樣本特徵對映到更高維度,再尋找乙個超平面,使得支撐向量到超平面的距離盡可能的小.通過核函式得展開達到這一目的.常用的核函式有線性核,多項式核,高斯核.引入正則...

機器學習之支援向量機(SVM)

svm數學知識具體參考 數學知識補充 對於線性可分的超平面 既然能線性可分,那麼就有超平面 向量化表示 將這資料集分開,使得一側是 1 類,另一側是 1類 第乙個知識點 已知超平面 和資料集 哪個點離這個超平面最近,答案 哪乙個點使得 最小,哪一點離這個超平面最近 第二個知識點 已知超平面 和點x,...

機器學習 支援向量機

線性可分支援向量機 1.回顧感知機模型 2.函式間隔與幾何間隔 3.支援向量 4.svm模型目標函式與優化 5.線性可分svm的演算法過程 線性可分支援向量機 1.軟間隔最大化 2.線性分類svm的軟間隔最大化目標函式的優化 3.軟間隔最大化時的支援向量 4.軟間隔最大化的線性可分svm的演算法過程...