gpt4 book ai didi

c++ - 如何在 C++ 中移植 MATLAB libSVM 参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:39 25 4
gpt4 key购买 nike

在 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,它会在每个 vector 的精度低于指定值(对您来说是 1e-6)时停止。使用两个停止条件,当其中一个完成时它将停止。

或者,也可以尝试使用 C++ 的 LibSVM,方法是将其链接为一个库。这将为您提供与您在 matlab 中使用的完全相同的算法和函数。

关于c++ - 如何在 C++ 中移植 MATLAB libSVM 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com