为什么使用支持向量机线性核的代码不能使用RBF

2024-09-24 02:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用SVM的trainAuto方法时,得到^{cd1>}的值2,但是当我在代码中使用^{cd2>}时,它会训练我的文件并输出XML文件。

svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(cv2.ml.SVM_RBF)
svm.setGamma(0.0025)
svm.setC(0.5)
svm.train(samples, cv2.ml.ROW_SAMPLE, labels)
svm.save('svm_data.xml')

以上代码对我很有用。但是当我用下面的代码移动到预测部分时

^{pr2}$

显示以下错误

^{pr3}$

但当我用线性改变RBF时,它对我的预测是有效的。

当我检查

^{pr4}$

它返回^{cd3>}用于DetectorSize,并为描述符返回^{cd4>}


Tags: 文件方法代码createxmlcv2mlsvm
1条回答
网友
1楼 · 发布于 2024-09-24 02:22:09

OpenCV无法接受非线性核的支持向量机。在

首先,official documentation表示:

setSVMDetector()

virtual void cv::HOGDescriptor::setSVMDetector ( InputArray _svmdetector )

Parameters

_svmdetector coefficients for the linear SVM classifier.

很明显,您只将支持向量机的系数(作为单个数组)传递给HOGDescriptor,而不是种类的(线性、RBF和多项式是最常见的)和/或特定于它的参数(RBF的多项式或gamma阶数)。所以底层的OpenCV检测器无法计算出内核的种类。它不必,因为唯一实现的是线性的。在

{a3}还有^问题}。在

相关问题 更多 >