2016-12-11 2 views
1

Ich versuche, eine einzelne Instanz mit Weka-API in Java zu testen. Mein Ziel ist es, den Klassenwert der einzelnen Instanz in der Datei test.arff vorherzusagen.Wie teste ich eine einzelne Instanz in Weka mit einem Modell, das ich gebaut habe?

Mein Java-Code wie folgt aussieht,

import weka.core.Instances; 
import weka.classifiers.Evaluation; 
import weka.classifiers.trees.J48; 
import weka.classifiers.*; 

import java.io.*; 
import java.util.Random; 

public class WekaNew { 

    public static void main(String[] args) throws Exception{ 
     // TODO Auto-generated method stub 
     System.out.println("Weka Tool"); 

     BufferedReader breader = new BufferedReader(new FileReader("train.arff")); 
     Instances train = new Instances(breader); 
     train.setClassIndex(train.numAttributes() -1); 
     breader.close(); //loading training data 

     BufferedReader treader = new BufferedReader(new FileReader("test.arff")); 
     Instances test = new Instances(treader); 
     test.setClassIndex(test.numAttributes() -1); 
     treader.close();  //loading testing data 

     Classifier cls = new J48(); 
     cls.buildClassifier(train); 

     Evaluation eval = new Evaluation(train); 
     eval.evaluateModelOnce(cls,test); 

     System.out.println(eval.toMatrixString("\nConfusion Matrix\n========\n")); 

    } 

} 

Die train.arff hat 7 (Attribute) +1 (Klasse Label) zusammen mit 132 Fällen von Daten. Die test.arff hat 7 Attribute + 1 Klassenbezeichnung =? mit einer Instanz.

Ich möchte die Klassenbezeichnung der einzelnen Instanz in der test.arff voraussagen. Wie kann ich das Label vorhersagen und welche Änderungen müssen im Dataset und im Code vorgenommen werden?

Ich versuchte, die Java-Datei von "javac -cp "/ Classpath" WekaNew.java" , es gibt die folgende Fehlermeldung "Kein geeignetes Verfahren zur evaluateModelOnce() gefunden"

Neu in der Weka API Kompilieren und Java im Allgemeinen. Entschuldigung im Voraus, wenn sich die Frage wiederholt.

ich erwähnte auch die folgenden Fragen in Stackoverflow, 1. Test single instance in weka which has no class label 2. Test a single instance in Weka aber es scheint nicht mein Problem zu lösen.

Antwort

1

Dies ist die Unterschrift von evaluateModelOnce:

public double evaluateModelOnce(Classifier classifier, 
           Instance instance) 

jedoch (http://weka.sourceforge.net/doc.stable/weka/classifiers/Evaluation.html#evaluateModelOnce-weka.classifiers.Classifier-weka.core.Instance- sehen), übergeben Sie in "Instanzen" anstelle von "Instanz", die verschiedenen Klassen sind. Dies ist also ein Syntaxfehler.

eine einzige Weka Instanz zu bewerten, möchten Sie vielleicht

eval.evaluateModelOnce(cls,instances.firstInstance()); 
+0

Vielen Dank versuchen! Klappt wunderbar! Gibt es eine Möglichkeit, das Klassenlabel der Testinstanz zu identifizieren? –

+0

Können Sie näher erläutern, was Sie tun möchten? Sie wissen bereits, dass die Klassenbezeichnung "test.numAttributes() -1" lautet, richtig? –

Verwandte Themen