首页 文章

openCV中的SVM类型

提问于
浏览
2

我正在使用opencv开发一个非常简单的图像分类器 . 我想使用svm类型poly,但它给出了错误,而其他像sigmoid,RBF工作正常 . 我将参数定义如下:

SVMParams params;
params.svm_type = SVM::C_SVC;
params.kernel_type = SVM::POLY;
params.gamma = 20;
params.degree = 0;
params.coef0 = 0;

params.C = 7;
params.nu = 0.0;
params.p = 0.0;

params.class_weights = NULL;
params.term_crit.type = CV_TERMCRIT_ITER +CV_TERMCRIT_EPS;
params.term_crit.max_iter = 1000;
params.term_crit.epsilon = 1e-6;

错误读取openCV错误:CvSVM :: set_params中的一个参数值超出范围(内核参数必须为正) . 我不确定是什么错误 . ?

1 回答

  • 8

    对于多项式内核, degree 必须大于1(0无效,1为线性) . 对于大多数包,degree的默认值为3 .

    RBF和sigmoid内核可以正常使用您的设置,因为它们不使用 degree . 作为参考,有问题的内核函数是:

    • 多项式: k(u,v)=(gamma*u'*v + coef0)^degree

    • RBF: k(u,v)=exp(-gamma*|u-v|^2)

    • sigmoid: k(u,v)=tanh(gamma*u'*v + coef0) .

相关问题