1

私はSVMが初めてです。私は Matlab に Libsvm を使用しました。予測フェーズの後、決定値配列を取得しました。SVM 理論から: 各テスト レコード z は、次の場合に正として割り当てられます。

f(z)=1

ここで、f(z) は次のように定義されます。

f(z)=sign(w*z+b)

では、インスタンス z の配列からの決定値を f(z) と関連付けるにはどうすればよいでしょうか? 予測は決定値に基づいていますか? dec_value>0 の場合、z は正、そうでない場合、z は負ですか?

4

2 に答える 2

15

はい、正解です。f(z) が正の場合、インスタンスはクラス +1 に属し、負の場合はクラス -1 に属します。f(z) の値は解釈できません。

機能中:

f(z) = サイン(w*z+b)

超平面の方程式のように見えますが、w が法線ベクトルではないという点で異なります。その長さは 1 ではないため、f(z) の値は超平面からの距離ではありません。これが、sign( として指定されている理由です。 ..)、明確にするために、値はインスタンスが超平面のどちら側にあるかを決定するためにのみ使用されます。

背景:

目標は、2 つのクラス間の最大マージンを与える超平面を見つけることです。

ここに画像の説明を入力

したがって、目的はマージンを最大化することでありここに画像の説明を入力、つまり を最小化しここに画像の説明を入力ます。通常、超平面を法線ベクトルとして表すためにwが使用される場合は 1 であることを思い出してください。最適化の問題がないため、明らかにここでは当てはまりません。= 1のままマージンの幅を変更する代わりに、マージンの幅を 2 ​​に固定し、代わりにサイズを変更できるようにしています。

これにより、主な最適化問題が得られます(ソフト マージンを使用)。

ここに画像の説明を入力

これはあなたが言及しているもののようです。ただし、この方程式は、SVM の基礎である基本的なソフト最大マージン分類器から来ています。真の SVM は、カーネルを使用できるようにラグランジュ双対として定式化されています。SVM の優れた点は、上記の問題 (およびその制約) をラグランジュで定式化すると、ラグランジュ乗数を除くすべての変数が削除され、次の問題が残ることです。

ここに画像の説明を入力

wがないことに注意してください。トレーニング ポイントx ( yは 1 または -1 のラベル) は、内積としてのみ一緒に表示されるようになり、カーネル トリックを使用して非線形モデルを取得できるようになりました。

しかし、 wがない場合、決定関数は何でしょうか? これは、サポート ベクターと見つけたラグランジアン乗数の関数になります。

ここに画像の説明を入力

これは、libsvm が生成し、トレーニングしたモデルとして保存するものです。サポート ベクターと関連するアルファが格納されます。線形 SVM の場合、主なwを取得できます。これについては LibSVM FAQ で説明されていますが、LibSVM から自動的に返されるものではなく、線形カーネルに対してのみ実行できます。

ラグランジアン乗数とサポート ベクターに基づく SVM 決定関数の値は、その符号によってのみ解釈する必要があります。

于 2012-06-14T21:18:36.360 に答える
2

ドキュメントを読むと、次のことがわかります。

3 番目の [戻り値] は、決定値または確率推定値を含む行列です ('-b 1' が指定されている場合)。k がトレーニング データ内のクラスの数である場合、決定値の場合、各行には k(k-1)/2 バイナリ クラス SVM の予測結果が含まれます。

したがって、2 クラスの問題の場合、得られるのは決定値を含むベクトルですf(z)。したがって、これは、最初のクラスに属するすべての要素が d<0 であり、2 番目のクラスに属するすべての要素が d>0 であることを意味します。

一般に、libsvm は最初のクラスを最初に取得するラベルと見なします。したがって、信頼できる結果を得るには、最初にデータを並べ替える必要があります。

バイナリの場合もこれが当てはまります。svmtrain に与えるラベルが何であれ、最初に遭遇したものをクラス 1 として、2 番目のものをクラス -1 として受け取ります。これは、簡単なデータセットを与えることで簡単に検証できます。

Y = [-ones(100,1);ones(100,1)];
m = svmtrain(Y,Y); % train with all labels as data (never do this in practices, not the "all" part, not the training on labels part ;)
[a,b,c] = svmpredict(Y,Y,m); % of course this will give 100% accuracy.
b' % you can see that the first label will always have an internal representation of 1.

マルチクラス分類の場合、これは異なります。これには、各ピクセルのすべてのクラス シナリオに対して 1 対 1 のすべてのシナリオに対応する k(k-1)/2 エントリが含まれます。これは、たとえば次のことを意味します。サンプルごとに 4*3/2 = 6 つの値を持つ 4 クラスの問題:

[ f12(z) f13(z) f14(z) f23(z) f24(z) f34(z)]

さて、これらの関数の値が 1 対 1 でどのようにクラスにマップされるのか、コードを見て簡単に推測することはできませんでした。

于 2012-06-14T12:50:42.593 に答える