2014-02-20 99 views
7

我想優化Opencv中的SVM參數。但是,每次使用train_auto時,我都會收到C=1gamma=1。有些人使用LibSVM,但我無法爲此寫封裝。 trainingDatalabels都取自現有的代碼,它給出了很好的結果,所以我試圖用train_auto得到與該代碼相同的參數。在原始代碼C=312.5gamma=0.50625。我看到有人用python來使用CvStatModel,C++有必要嗎?我在哪裏犯了一個錯誤? 在此先感謝。Opencv中的SVM參數優化

驗證碼:

CvParamGrid CvParamGrid_C(pow(2.0,-5), pow(2.0,15), pow(2.0,2)); 
CvParamGrid CvParamGrid_gamma(pow(2.0,-15), pow(2.0,3), pow(2.0,2)); 
if (!CvParamGrid_C.check() || !CvParamGrid_gamma.check()) 
    cout<<"The grid is NOT VALID."<<endl; 
CvSVMParams paramz; 
paramz.kernel_type = CvSVM::RBF; 
paramz.svm_type = CvSVM::C_SVC; 
paramz.term_crit = cvTermCriteria(CV_TERMCRIT_ITER,100,0.000001); 
svm.train_auto(trainingData, labels, Mat(), Mat(), paramz,10, CvParamGrid_C, CvParamGrid_gamma, CvSVM::get_default_grid(CvSVM::P), CvSVM::get_default_grid(CvSVM::NU), CvSVM::get_default_grid(CvSVM::COEF), CvSVM::get_default_grid(CvSVM::DEGREE), true); 
svm.get_params(); 
cout<<"gamma:"<<paramz.gamma<<endl; 
cout<<"C:"<<paramz.C<<endl; 

回答

5

我修改了代碼如下paramz = svm.get_params()它工作得很好。

+0

您是否嘗試過初始參數?結果如何?培訓需要多長時間?謝謝。 – sop