2014-05-17 25 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調查您的分離超平面和保證金規模的確切位置。