Beste Methode zur Ausführung von SVM für mehrere Klassen


17

Ich weiß, dass die SVM ein binärer Klassifikator ist. Ich würde es gerne auf SVM mit mehreren Klassen ausweiten. Welches ist der beste und vielleicht einfachste Weg, dies zu tun?

Code: in 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

Wie kann das verbessert werden?


Was macht die Variable classesim Code? Es scheint nutzlos zu sein.

sind Sie zu irgendeinem Schluss gekommen? Ich habe dieses Problem mit meiner Arbeit. Wenn Sie zu einem passenden Ergebnis gelangt sind, teilen Sie bitte Ihren Multiklassifizierungscode hier mit.
me.rasouli

Antworten:


15

Es gibt viele Methoden für die Klassifizierung mehrerer Klassen. Zwei klassische Optionen, die nicht SVM-spezifisch sind, sind:

  1. One-vs-all (OVA) -Klassifikation:
    Angenommen, Sie haben die Klassen A, B, C und D. Trainieren Sie statt einer Vier-Wege-Klassifikation vier Binärklassifikatoren: A gegen Nicht-A, B gegen Nicht-B , C gegen nicht-C und D gegen nicht-D. Wählen Sie dann entweder die positive Klasse aus, die "am besten" ist (z. B. über alle vier Läufe hinweg am weitesten vom Rand entfernt). Wenn keine der Klassifikationen positiv ist (dh sie sind alle nicht-X), wählen Sie das "Gegenteil" der Klasse, die am schlechtesten ist (z. B. am nächsten am Rand).

  2. Alles gegen Alles:
    Trainiere alle möglichen Klassifikationspaare. Ordnen Sie die Klassen nach einem bestimmten Faktor (z. B. Häufigkeit der Auswahl) und wählen Sie die beste aus.

Was am besten funktioniert, war umstritten: Duan und Keerthi haben eine empirische Studie, die eine spezifische All-gegen-All-Methode vorschlägt , während Rifkin und Klautau für ein Ein-gegen-All-Schema plädieren. Es gibt sogar Schemata, bei denen man anstelle der Bezeichnungen selbst fehlerkorrigierende Codes zur Beschreibung der Klassenbezeichnungen lernt.

Viel Glück!

Bearbeiten: Was Sie wirklich wollen, insbesondere für OVA, ist die hintere Wahrscheinlichkeit jeder Klasse. Für einige Methoden, wie Naive Bayes, ist es trivial, rauszukommen. SVMs geben normalerweise keine Wahrscheinlichkeiten an, aber es gibt Möglichkeiten, sie zu berechnen. Siehe John Platt 1999 "Probabilistic Outputs for Support Vector Machines ..."


2
Für OVA - können Sie die Klasse auswählen, die die größte Wahrscheinlichkeit aufweist (induziert durch Platt-Skalierung)?
B_Miner

1
Ja, das ist im Grunde das Fazit des Duan- und Keerthi-Papiers. Sie kombinieren die Platt-Wahrscheinlichkeiten mit Hasties paarweisem Kopplungstrick und erzielen gute Ergebnisse. Ich sollte den Text wahrscheinlich so bearbeiten, dass er das enthält. Guten Fang B_Miner!
Matt Krause

Müssen Sie in SVM abstimmen oder Summen zusammenfassen?
Lakesh

@lakesh, One-vs-all oder All-vs-all sind wie Abstimmungsschemata. Wenn Sie eine Reihe von Binärklassifikatoren verwenden, müssen Sie etwas tun , um sie in einen Klassifikator für mehrere Klassen zu verwandeln. Alternativ können Sie die von carlosdc unten beschriebene modifizierte SVM verwenden ...
Matt Krause

was ist das für etwas
Lakesh

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.