Python OpenCV2 SVM获得分数而不是是/否响应

时间:2017-07-06 13:23:37

标签: python opencv machine-learning svm

我想针对2类问题训练RBF内核SVM。目前SVM仅预测0或1,但我希望它返回到决策边界的距离。我怎样才能做到这一点?

self.svm = cv2.ml.SVM_create()
self.svm.setKernel(cv2.ml.SVM_RBF)
self.svm.train(features, cv2.ml.ROW_SAMPLE, labels)
res = svm.predict(testdata, True)

我的功能是np.arrays,dtype = np.float32,我的标签是np.arrays,dtype = np.int,值为0,类为#34; no",1为class"是"

文档说svm.predict返回第二个参数为True的分数,但我只得到这样的结果:

  

(0.0,array([[0.],          [0.],          [0.],          ...          [0.],          [0.],          [0.]],dtype = float32))

我是否需要更改SVM类型?如果是这样,我应该选择哪个?

1 个答案:

答案 0 :(得分:0)

您可以使用scikit-learn包生成您的svm。

培训:

from sklearn.svm import LinearSVC
clf=LinearSVC(C=1.0,  class_weight='balanced')
clf.fit(features, labels)
svm_w = clf.coef_[0]
svm_intercept = clf.intercept_[0]

测试:

response_list = list()
for ft in feature_list:
    val = (sum(p*q for p,q in zip(ft,svm_w)) + svm_intercept)[0]
    response_list.append(val)

这可以根据与超平面的距离为您提供该功能的SVM响应。