【问题标题】:Python OpenCV2 SVM get scores instead of yes/no responsesPython OpenCV2 SVM 获得分数而不是是/否响应
【发布时间】:2017-12-10 12:56:41
【问题描述】:

我想针对 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)

我的特征是 dtype=np.float32 的 np.arrays,我的标签是 dtype=np.int 的 np.arrays,“no”类的值为 0,“yes”类的值为 1

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

(0.0, 数组([[ 0.], [0.], [0.], ..., [0.], [0.], [0.]],dtype=float32))

我是否必须更改 SVM 类型?如果是,我应该选择哪个?

【问题讨论】:

    标签: python opencv machine-learning svm


    【解决方案1】:

    您可以使用 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 响应。

    【讨论】:

    • 谢谢,sklearn svm 似乎比 openCV 中的要好很多...
    • 我也一直在为 SVM 的 opencv 实现而苦苦挣扎。滑雪学习很强大。
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    相关资源
    最近更新 更多