【opencv】 svm引數說明
svm_type,SVM的型別:
CvSVM::C_SVC - n(n>=2)分類器,允許用異常值懲罰因子C進行不完全分類。
CvSVM::NU_SVC - n類似然不完全分類的分類器。引數nu取代了c,其值在區間【0,1】中,nu越大,決策邊界越平滑。
CvSVM::ONE_CLASS - 單分類器,所有的訓練資料提取自同一個類裡,然後SVM建立了一個分界線以分割該類在特徵空間中所佔區域和其它類在特徵空間中所佔區域。
CvSVM::EPS_SVR - 迴歸。 訓練集中的特徵向量和擬合出來的超平面的距離需要小於p。異常值懲罰因子C被採用。
CvSVM::NU_SVR - 迴歸;nu 代替了p
kernel_type//核型別:
CvSVM::LINEAR - 沒有任何向映像至高維空間,線性區分(或迴歸)在原始特徵空間中被完成,這是最快的選擇。 d(x,y) = x•y == (x,y)
CvSVM::POLY - 多項式核: d(x,y)= (gamma*(x•y)+coef0)degree
CvSVM::RBF - 徑向基,對於大多數情況都是一個較好的選擇:d(x,y)= exp(-gamma*|x-y|2)
CvSVM::SIGMOID - sigmoid函式被用作核函式:d(x,y) = tanh(gamma*(x•y)+coef0)
degree, gamma, coef0:都是核函式的引數,具體的參見上面的核函式的方程。
C, nu, p:在一般的SVM優化求解時的引數。
class_weights:可選權重,賦給指定的類別。一般乘以C以後去影響不同類別的錯誤分類懲罰項。權重越大,某一類別的誤分類資料的懲罰項就越大。
term_crit:SVM的迭代訓練過程的中止。(解決了部分受約束二次最優問題)
該結構需要初始化,並傳遞給CvSVM的訓練函式。
CvSVM::train
訓練SVM
bool CvSVM::train( const CvMat*_train_data, const CvMat* _responses,
const CvMat* _var_idx=0,const CvMat* _sample_idx=0,
CvSVMParams_params=CvSVMParams() );
訓練SVM 模型的方法。它遵循的泛型訓練"方法"的約定具有以下限制:僅支援 CV_ROW_SAMPLE 的資料佈局、所有命令輸入的變數、輸出變數可以是斷然(_params.svm_type=CvSVM::C_SVC 或_params.svm_type=CvSVM::NU_SVC)或命令 (_params.svm_type=CvSVM::EPS_SVR或 _params.svm_type=CvSVM::NU_SVR) 或不需要在所有(_params.svm_type=CvSVM:: ONE_CLASS),不支援預設值。所有的引數都被整合在CvSVMParams這個結構中。
CvSVM::get_support_vector*
得到支援向量和特殊向量的數
int CvSVM::get_support_vector_count()const;
const float* CvSVM::get_support_vector(inti) const;
這個方法可以被用來得到支援向量的集合。