我想针对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类型?如果是这样,我应该选择哪个?
答案 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响应。