2

私はone-vs-allを使用して21-classsvm分類を行っています。

各カーネルについて、ラベルが「このクラスにない」-1を意味し、ラベルが「実際にこのクラスにある」を意味するようにします。121

この標準を使用して、事前に計算されたカーネルとテストベクトルを生成しました。

すべてを使用することはクラスのeasy.pyすべてでうまくいきました20が、そのうちの1つでは、クラスに含まれるためにラベル付けされているはずのすべての入力にラベルが付けられるように、またその逆になるようにラベルが切り替えられまし1-1

そのクラスの違いは、事前に計算され1たカーネルの最初のベクトルにラベルが付けられていたのに対し、他のすべてのカーネルでは最初のベクトルにラベルが付けられていたこと-1です。これは、LibSVMが私のすべてのベクターにラベルを付け直すことを示唆しています。

これを防ぐ方法やそれを回避する簡単な方法はありますか?

4

2 に答える 2

2

トレーニング中にlibsvmが最初にラベルAに遭遇した場合、予測中に libsvmはオブジェクトにラベルAを割り当てるために正の値を使用し、別のラベルには負の値を使用します。

したがって、正のクラスにラベル1を使用し、負のクラスに0を使用する場合、正しい出力値を取得するには、次のトリック (Matlab) を実行する必要があります。

%test_data.y contains 0-s and 1-s
[labels,~,values] = svmpredict(test_data.y, test_data.X, model, ' ');

if (model.Label(1) == 0) % we check which label was encountered by libsvm first
    values = -values;
end
于 2015-11-12T16:47:25.437 に答える