Optimización de parámetros SVM en Opencv
Quiero optimizar los parámetros de SVM en Opencv. Pero, cada vez que usotrain_auto
yo obtengoC=1
ygamma=1
. Algunas personas usan LibSVM pero no pude escribir un contenedor para eso. AmbostrainingData
ylabels
se toman de un código existente que da buenos resultados, así que estoy tratando de obtener los mismos parámetros para ese código contrain_auto
. En el código originalC=312.5
ygamma=0.50625
. Vi que alguien usabaCvStatModel
para python, ¿es necesario para C ++? ¿Dónde me equivoco? Gracias por adelantado.
El 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;