opencv - openCV 中的 SVM 类型

标签 opencv svm

我正在使用 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 Error: One of arguments' values is out of range (The kernel parameter must be positive) in CvSVM::set_params。我不确定错误是什么。?

最佳答案

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

RBF 和 sigmoid 内核可以很好地配合您的设置,因为它们不使用 degree。作为引用,有问题的内核函数是:

  • 多项式:k(u,v)=(gamma*u'*v + coef0)^degree,
  • 径向基函数:k(u,v)=exp(-gamma*|u-v|^2),
  • sigmoid:k(u,v)=tanh(gamma*u'*v + coef0)

关于opencv - openCV 中的 SVM 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16769988/

相关文章:

c++ - OpenCV 和创建 GUI

python - 在Numpy和OpenCV2中替换3D子矩阵

opencv - 在 Macports 中安装支持 Cuda 的 OpenCV?

python - 具有多项式内核的 sklearn 和 SVM

python - 使用 Tensorflow 构建 SVM

machine-learning - 为什么随机梯度下降不支持非线性SVM

opencv - 使用 OpenCV 进行级联分类器的交通信号检测

python - 从视频帧中采样并将其保存为图像 - python openCV

OpenCv SVM 输出文件格式

svm - 训练 SVM 分类器(词嵌入与句子嵌入)