代码:
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]吗?
我的代码有什么问题吗?如果是的话,请指出我。 非常感谢提前
答案 0 :(得分:2)
你使用的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中的代码来调查分离超平面和边距大小的确切位置。