Otimização de parâmetros SVM no Opencv
Eu quero otimizar os parâmetros SVM no Opencv. Mas, toda vez que eu usotrain_auto
eu receboC=1
egamma=1
. Algumas pessoas usam o LibSVM, mas não consegui escrever um wrapper para isso. AmbostrainingData
elabels
são retirados de um código existente que fornece bons resultados, então estou tentando obter os mesmos parâmetros para esse código comtrain_auto
. No código originalC=312.5
egamma=0.50625
. Vi que alguém usavaCvStatModel
para python, é necessário para C ++? Onde eu cometo um erro? Desde já, obrigado.
O código:
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;