如何在 C++ 中移植 MATLAB libSVM 参数
How to port the MATLAB libSVM parameters in C++
在 MATLAB 与 libSVM 的交叉验证中,我发现这些是最好使用的参数:
model = svmtrain( labels, training, '-s 0 -t 2 -c 10000 -g 100');
现在我想用 OpenCV 在 C++ 中复制分类。
但是我不明白怎么把C++参数设置成和MATLAB一样:
基于 this documentation 我尝试了以下方法:
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::RBF;
//params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 10000, 1e-6);
params.Cvalue = 10000;
params.gamma = 100;
CvSVM SVM;
SVM.train(train, labels, Mat(), Mat(), params);
但是我得到这个错误:
error: no member named 'Cvalue' in 'CvSVMParams' params.Cvalue = 10000;
最后一件事,我应该取消评论吗
//params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 10000, 1e-6);
并尝试其他值还是不重要?
因为我什至无法理解在 MATLAB 中如何设置相同的参数。
从 matlab 中的 LibSVM 移植到 OpenCV SVM 时,并非每个参数都具有完全等效的参数。术语标准就是其中之一。 请记住,opencv 的 SVM 可能有一些错误,具体取决于您使用的版本(不是最新版本的问题)。
您应该取消对该行的注释,以便更好地控制您的终止条件。这一行表示算法应该在执行 10000 次迭代时结束。如果您使用 CV_TERMCRIT_EPS,当每个向量的精度低于指定值(对您来说,它是 1e-6)时,它将停止。使用两个停止条件,当其中一个完成时它将停止。
或者,也可以尝试使用 C++ 的 LibSVM,方法是将其链接为一个库。这将为您提供与您在 matlab 中使用的 完全相同的 算法和函数。
在 MATLAB 与 libSVM 的交叉验证中,我发现这些是最好使用的参数:
model = svmtrain( labels, training, '-s 0 -t 2 -c 10000 -g 100');
现在我想用 OpenCV 在 C++ 中复制分类。
但是我不明白怎么把C++参数设置成和MATLAB一样:
基于 this documentation 我尝试了以下方法:
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::RBF;
//params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 10000, 1e-6);
params.Cvalue = 10000;
params.gamma = 100;
CvSVM SVM;
SVM.train(train, labels, Mat(), Mat(), params);
但是我得到这个错误:
error: no member named 'Cvalue' in 'CvSVMParams' params.Cvalue = 10000;
最后一件事,我应该取消评论吗
//params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 10000, 1e-6);
并尝试其他值还是不重要? 因为我什至无法理解在 MATLAB 中如何设置相同的参数。
从 matlab 中的 LibSVM 移植到 OpenCV SVM 时,并非每个参数都具有完全等效的参数。术语标准就是其中之一。 请记住,opencv 的 SVM 可能有一些错误,具体取决于您使用的版本(不是最新版本的问题)。
您应该取消对该行的注释,以便更好地控制您的终止条件。这一行表示算法应该在执行 10000 次迭代时结束。如果您使用 CV_TERMCRIT_EPS,当每个向量的精度低于指定值(对您来说,它是 1e-6)时,它将停止。使用两个停止条件,当其中一个完成时它将停止。
或者,也可以尝试使用 C++ 的 LibSVM,方法是将其链接为一个库。这将为您提供与您在 matlab 中使用的 完全相同的 算法和函数。