Ich bin neu in SVM. Ich verwende jlibsvm für eine Multi-Class-Klassifizierung Problem. Grundsätzlich mache ich ein Satzklassifikationsproblem. Es gibt 3 Klassen. Was ich verstanden habe ist Ein-gegen-alle-Klassifizierung. Ich habe ein vergleichsweise kleines Zugset. Insgesamt 75 Sätze, zu denen jeweils 25 Sätze gehören.Wie jlibsvm Vorhersage Wahrscheinlichkeit in Multi-Class-Klassifikation
I 3 SVMs mache (also 3 verschiedene Modelle), wo während des Trainings, in SVM_A gehören Sätze der Klasse A wird ein echtes Etikett, das heißt und andere Sätze wird ein haben - 1 Etikett. Entsprechend durchgeführt für SVM_B und SVM_C.
Während des Testens, um die wahre Bezeichnung eines Satzes zu erhalten, gebe ich den Satz zu 3 Modellen und ich nehme die Vorhersage Wahrscheinlichkeit von diesen 3 Modellen zurückgegeben. Welcher den höchsten Wert zurückgibt, ist die Klasse, zu der der Satz gehört.
So mache ich. Aber ich bekomme die gleiche Vorhersagewahrscheinlichkeit für jeden Satz im Testset für alle Modelle.
A predicted:0.012820514
B predicted:0.012820514
C predicted:0.012820514
Diese Werte werden für alle Sätze im Trainingssatz wiederholt.
Die folgende ist, wie ich festgelegten Parameter für die Ausbildung:
C_SVC svm = new C_SVC();
MutableBinaryClassificationProblemImpl problem;
ImmutableSvmParameterGrid.Builder builder = ImmutableSvmParameterGrid.builder();
// create training parameters ------------
HashSet<Float> cSet;
HashSet<LinearKernel> kernelSet;
cSet = new HashSet<Float>();
cSet.add(1.0f);
kernelSet = new HashSet<LinearKernel>();
kernelSet.add(new LinearKernel());
// configure finetuning parameters
builder.eps = 0.001f; // epsilon
builder.Cset = cSet; // C values used
builder.kernelSet = kernelSet; //Kernel used
builder.probability=true; // To get the prediction probability
ImmutableSvmParameter params = builder.build();
Was mache ich falsch?
Gibt es einen anderen besseren Weg Multi-Class-Klassifizierung anderen als das zu tun?