Ich bin neu in Matlab und auch in LIBSVM. Ich habe den Merkmalsvektor für jeden Punkt berechnet, der die Werte von r, g, b in Einzelvektor angibt, und ihn in gespeichert .mat
Datei. Derzeit habe ich etwa 420 Punkte und 4 Klassen, nämlich Rot / Grün / Blau / Andere. Nun möchte ich diese .mat-Datei zum Trainieren von libsvm übergeben und danach den neu ankommenden Testpunkt klassifizieren, ob er rot oder blau ist oder grün oder anderes. Nicht zu erwähnen, es ist eine Multiklassen-Klassifizierung, und ich weiß gar nicht, wie ich damit umgehen soll.
svmtrain(TrainingSet,Groups,"kernel_function","rbf");
woher TrainingSet
ist mein 420*4
Funktionsvektorsatz und Groups
ist Klassenname. Vielen Dank im Voraus für die Hilfe.
Antworten:
0 für die Antwort № 1Sie können One-vs-All-Ansatz mit libsvm ausprobieren.
model = cell(4,1);
for k=1:4
model{k} = svmtrain(double(TrainingSet==k), Groups, "-c 1 -g 0.2 -b 1");
end
Berechnen Sie dann in Ihrem Testprozess einfach die Wahrscheinlichkeit für verschiedene Labels:
pr = zeros(numTest,4);
for k=1:4
[~,~,p] = svmpredict(double(testLabel==k), TestSet, model{k}, "-b 1");
pr(:,k) = p(:,model{k}.Label==1); %# probability of class==k
end
und Ihre Etikettenvorhersage ist die mit der höchsten Wahrscheinlichkeit:
[~,predctedLabel] = max(pr,[],2);