Ich benutze LibSVM mit dem Weka in meinem Java-Code. Ich versuche eine Regression zu machen. Unten ist mein Code,Java, weka LibSVM sagt nicht richtig voraus
public static void predict() {
try {
DataSource sourcePref1 = new DataSource("train_pref2new.arff");
Instances trainData = sourcePref1.getDataSet();
DataSource sourcePref2 = new DataSource("testDatanew.arff");
Instances testData = sourcePref2.getDataSet();
if (trainData.classIndex() == -1) {
trainData.setClassIndex(trainData.numAttributes() - 2);
}
if (testData.classIndex() == -1) {
testData.setClassIndex(testData.numAttributes() - 2);
}
LibSVM svm1 = new LibSVM();
String options = ("-S 3 -K 2 -D 3 -G 1000.0 -R 0.0 -N 0.5 -M 40.0 -C 1.0 -E 0.001 -P 0.1");
String[] optionsArray = options.split(" ");
svm1.setOptions(optionsArray);
svm1.buildClassifier(trainData);
for (int i = 0; i < testData.numInstances(); i++) {
double pref1 = svm1.classifyInstance(testData.instance(i));
System.out.println("predicted value : " + pref1);
}
} catch (Exception ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
Aber der vorhergesagte Wert ich von diesem Code bin immer anders ist als der vorhergesagte Wert I unter Verwendung des Weka GUI bin immer.
Beispiel: Unten finden Sie eine einzelne Testdaten, die ich sowohl für Java-Code und Weka-GUI angegeben habe.
Der Java-Code vorhergesagt den Wert als 1,9064516129032265 während des vorhergesagten Wert des Weka GUI 10,043 ist. Ich verwende den gleichen Trainingsdatensatz und die gleichen Parameter für Java-Code und Weka GUI.
Ich hoffe, Sie verstehen meine Frage.Könnte mir jemand sagen, was ist falsch mit meinem Code?
Eigentlich Libsvm hat 2 SVM-Typen für Regression, Nu-SVR und Epsilon-SVR. Ich kann entscheiden, welcher SVM-Typ verwendet werden soll, indem ich den -S-Parameter des Algorithmus definiere. In meinem Code habe ich den epsilon-SVR (-S 3) verwendet. Aber Ihr Code hat mir wirklich geholfen, den Fehler in meinem Code zu finden. setClassIndex ist falsch in meinem Code. Ich habe deinen Code benutzt und es hat funktioniert. Vielen Dank für Ihre Hilfe. – udi