Pythonでscikitパッケージを使用してSVMを実装しています。plot_separating_hyperplane.pyの「 alphai」値の解釈に問題があります
import numpy as np
import pylab as pl
from sklearn import svm
# we create 40 separable points
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
Y = [0] * 20 + [1] * 20
# fit the model
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)
print clf.support_vectors_
#support_vectors_ prints the support vectors
print clf.dual_coef_
#dual_coef_ gives us the "alpha i, y i" value for all support vectors
サンプル出力
Dual_coef_ = [[ 0.04825885 0.56891844 -0.61717729]]
Support Vectors =
[[-1.02126202 0.2408932 ]
[-0.46722079 -0.53064123]
[ 0.95144703 0.57998206]]
Dual_coef_は、「alpha i *yi」値を提供します。「alphai*y i」の合計が0(0.04825885 + 0.56891844 --0.61717729 = 0)であることを確認できます。
「alphai」の値を知りたいと思いました。「alphai*y i」の値があるので、簡単なはずです。しかし、私はすべての「アルファi」を負にしています。たとえば、点(0.95144703、0.57998206)は線の上にあります(リンクを参照)。したがって、y=+1です。y = +1の場合、アルファは-0.61717729になります。同様に、ポイント(-1.02126202、0.2408932)は線の下にあります。したがって、y = -1、したがってalpha=-0.04825885です。
アルファ値が負になるのはなぜですか? 私の解釈は間違っていますか?どんな助けでもありがたいです。
ご参考までに、
サポートベクター分類器(SVC)の場合、
2つのクラスのトレーニングベクトルi=1、...、nと、SVCが次のような主要な問題を解決するようなベクトルが与えられます。
そのデュアルは
ここで、「e」はすべてのベクトル、C> 0は上限、Qはn行n列の正の半確定行列であり、カーネルです。ここで、トレーニングベクトルは、関数によって高次元(おそらく無限)の次元空間にマッピングされます。