【问题标题】:sklearn svc with linear kernel provide strange support vectors带有线性内核的 sklearn svc 提供了奇怪的支持向量
【发布时间】:2014-07-06 01:52:10
【问题描述】:

代码:

from sklearn import svm

def testsvm():
    t_d = [[1,1], [1,-1], [-1,-1], [-1, 1], [-0.0001, 0.0001], [0,0], [-1, -1.0001]]
    y = [1,-1,1,1, 1, 1, -1]

    clf = svm.SVC(kernel='linear', C=1)
    clf.fit(t_d, y)

    print clf.support_vectors_
    print clf

结果是:

[[ 1.     -1.    ]  
 [-1.     -1.0001]  
 [-1.     -1.    ]  
 [ 0.      0. ]]

但就我而言,支持向量应该是:

[[1,1]
 [0,0]
 [-1,-1]
 [-1.     -1.0001]]

如果边距彼此平行,[1,-1] 不应该省略吗?

我的代码有什么问题吗?如果是这样,请指出我。 非常感谢提前

【问题讨论】:

    标签: python machine-learning scikit-learn svm


    【解决方案1】:

    您使用的C 太小,而且您没有得到您正在考虑的“硬边距 SVM”,而是一个“软”版本,它具有更多支持向量(不完全在“边距边界”)。

    设置clf = svm.SVC(kernel='linear', C=100000000),一切都会好起来的

    [[ 1.     -1.    ]
     [-1.     -1.0001]
     [-1.     -1.    ]]
    

    您可以使用来自http://scikit-learn.org/stable/auto_examples/svm/plot_svm_margin.html 的代码来调查分离超平面的确切位置和边距大小。

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2012-10-12
      • 2014-06-28
      • 2018-05-14
      • 2020-11-07
      • 2022-12-25
      • 2016-02-20
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多