2014-05-17 26 views
1

代码:与线性核sklearn SVC提供奇怪的支持向量

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]不应该忽略?

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

回答

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调查您的分离超平面和保证金规模的确切位置。