如何在C ++中使用lib_VM中的auto_train

时间:2015-02-04 13:33:12

标签: c++ opencv svm libsvm

我尝试使用libSVM的auto_train功能自动训练我的数据集。 阅读本页http://docs.opencv.org/modules/ml/doc/support_vector_machines.html 我试过这段代码:

CvSVMParams params;
params.svm_type    = CvSVM::C_SVC;
params.kernel_type = CvSVM::RBF;

因为我想要一个RBF内核。 然后:

CvSVM SVM;
SVM.train_auto(trainFINAL, labelsFinal, Mat(), Mat(), params, 10, ...
   CvSVM::get_default_grid(CvSVM::C), CvSVM::get_default_grid(CvSVM::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), ...
   false);

之后我尝试以这种方式绘制新参数:

CvSVMParams newParams = SVM.get_params();
cout << endl;
cout << "KERNEL   : " << newParams.kernel_type << endl;
cout << "SVM TYPE : " << newParams.svm_type << endl;
cout << "degree   : " << newParams.degree << endl;
cout << "gamma    : " << newParams.gamma << endl;
cout << "coef0    : " << newParams.coef0 << endl;
cout << "Cvalue   : " << newParams.C << endl;
cout << "p        : " << newParams.p << endl;

但我无法理解两件事:

  • 首先,为什么在newParams.svm_type中它返回给我100(我指定的C-SVC,它应该是0)

  • 第二,以这种方式绘制参数是否正确?

1 个答案:

答案 0 :(得分:0)

&#34;首先,为什么在newParams.svm_type中它返回给我100(我指定的C-SVC,它应该是0)&#34;

OpenCV枚举与LibSVM略有不同,请参阅http://docs.opencv.org/ref/2.4/dd/d88/classCvSVM.html

C_SVC是100,是OpenCV中的第一种类型的SVM(而不是LibSVM中的0)。

&#34;第二,以这种方式绘制参数是否正确?&#34;

我不确定你的意思&#34;情节&#34;参数,但如果你想知道newParams是否是优化参数,那么它们是。