マルチクラスSVMを実行する最良の方法


18

SVMはバイナリ分類子であることを知っています。マルチクラスSVMに拡張したいと思います。それを実行するための最良の、そしておそらく最も簡単な方法はどれですか?

コード:MATLAB

   u=unique(TrainLabel); 
    N=length(u); 
    if(N>2)    
        itr=1;    
        classes=0;   
        while((classes~=1)&&(itr<=length(u)))   
            c1=(TrainLabel==u(itr));    
            newClass=double(c1); 
            tst = double((TestLabel == itr));
            model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154');  
            [predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model);    
            itr=itr+1;   
        end
        itr=itr-1;
    end

これはどのように改善できますか?


classesコードで変数は何をしますか?役に立たないようです。

何か結論に達しましたか?私は私の仕事でこの問題を抱えています。適切なルスルトに達した場合、here.thanksでマルチ分類コードを共有してください。
me.rasouli

回答:


16

マルチクラス分類には多くの方法があります。SVM固有ではない2つの古典的なオプションは次のとおりです。

  1. One-vs-all(OVA)分類:
    クラスA、B、C、およびDがあるとします。4ウェイ分類を行う代わりに、4つのバイナリ分類子をトレーニングします:A vs. not-A、B vs. not-B 、C対not-C、D対not-D。次に、「最高」であるポジティブクラスのいずれかを選択します(たとえば、4回の実行すべてでマージンから最も遠い)。いずれの分類も肯定的でない場合(つまり、すべてが非Xである場合)、最悪のクラスの「反対」を選択します(たとえば、マージンに最も近い)。

  2. All-vs-All:
    可能なすべての分類のペアをトレーニングします。何らかの要因(たとえば、選択された回数)でクラスをランク付けし、最適なものを選択します。

これは最高の作品が論争されています: ドゥアンとKeerthiは一方で、すべての-VS-すべての方法の特定を提案する実証研究を持ってリフキンとKlautauは 1-VS-すべてのスキームのために主張しています。ラベル自体ではなく、クラスラベルを記述するエラー訂正コードを学習するスキームもあります。

幸運を!

編集:特にOVAで本当に必要なのは、各クラスの事後確率です。Naive Bayesのようないくつかの方法では、簡単に抜け出すことができます。通常、SVMは確率を提供しませんが、それらを計算する方法があります。John Plattの1999年の論文「サポートベクターマシンの確率的出力...」を参照してください。


2
OVAの場合-(Plattスケーリングによって誘発される)最大の確率を持つクラスを選択できますか?
B_Miner

1
ええ、それは基本的にDuanとKeerthiの論文の結果です。これらは、Plattの確率とHastieのペアワイズカップリングトリックを組み合わせて、良好な結果を得ます。私はおそらくそれを含めるためにテキストを編集する必要があります。良いキャッチB_Miner!
マットクラウス

SVMでは、投票または合計プーリングを行う必要がありますか?
Lakesh

@ lakesh、One-vs-all、またはAll-vs-allは投票方式に似ています。バイナリ分類子のセットを使用している場合、それらをマルチクラス分類子に変換するために何かをする必要があります。別の方法として、あなたは修正SVMは、下のcarlosdcによって記述使用することができます...
マット・クラウス

それは何ですか?
Lakesh

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.