如何调整SVM的参数以获得更好的训练

How to adjust parameter of SVM for better training

我正在使用线性 SVM,我正在使用 Opencv 和 Python,我正在尝试调整参数以获得更好的训练,但仍然没有得到好的结果,我觉得我正在经历参数设置错误,

# Create SVM classifier
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_EPS_SVR)
svm.setKernel(cv2.ml.SVM_LINEAR)
#cv2.ml.SVM_LINEAR
svm.setDegree(3)
svm.setGamma(1)
svm.setCoef0(0.0)
svm.setC(0.01)
svm.setNu(0.5)
svm.setP(0.1)
#svm.setClassWeights(0)

我正在使用以上参数并从 here 那里得到了很多帮助。

使用 trainAuto 搜索最佳参数值,您会 getter 获得更好的结果。您不能从其他应用程序复制参数值并期望在您自己的数据上获得好的结果。

当您调用 say svm.getType() 时,您会得到一个 int 值,例如 100。要了解类型,请参阅 this page,在 Public 类型 你找到这个:

enum Types { C_SVC =100, NU_SVC =101, ONE_CLASS =102,
EPS_SVR =103, NU_SVR =104 }

因此,100 表示 C_SVC。对于您找到的内核类型:

enum KernelTypes { CUSTOM =-1, LINEAR =0, POLY =1, RBF =2, SIGMOID =3, CHI2 =4, INTER =5 }

然后 2 表示 RBF 内核对您的数据产生最佳精度。