具有线性核的sklearn svc提供了奇怪的支持向量

2024-06-16 10:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

代码:

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

结果是:

^{pr2}$

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

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

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

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


Tags: 代码fromimportsupportdefsklearnkernelfit
1条回答
网友
1楼 · 发布于 2024-06-16 10:24:57

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

设置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中的代码来研究分隔超平面的确切位置和边距大小。在

相关问题 更多 >