6

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列の正の半確定行列でここに画像の説明を入力してくださいありここに画像の説明を入力してください、カーネルです。ここで、トレーニングベクトルは、関数によって高次元(おそらく無限)の次元空間にマッピングされます。

4

1 に答える 1

4

y を間違って解釈しているだけだと思います。線の上が y=-1 で、下が y=+1 だと思います。

なんで逆だと思ったの?

2クラスの問題については、「ファーストクラス」だと思います。つまり、最も小さい数字が +1 で、もう一方は -1 です。これは LibSVM 規約です。

于 2012-10-06T10:56:13.773 に答える