Ich arbeite mit Java, Eclipse und Weka, ich möchte den Baum mit jeder Regel und der Prädiktion einer Reihe von Daten zeigen, um meinen Entscheidungsbaum zu testen.Wie kann ich mit weka einen Entscheidungsbaum implementieren?
Ich habe versucht, mit diesem Code etwas zu tun, aber es tut nicht, was ich brauche, um den ganzen Baum mit jeder möglichen Regel zu zeigen. Ich kann nur einen Teil des Baumes nicht alle sehen.
Und ich war nicht in der Lage, es mit einem Datentest und Datentraining zu testen, ich denke es hat etwas mit dem Format zu tun, das ich in der Text- und Zugdatei verwende.
Die Frage ist also, wie kann ich den Baum mit allen möglichen Dezisionen zeigen und dann testen?
Dies ist, was ich bisher:
public class Test {
public static BufferedReader readDataFile(String filename) {
BufferedReader inputReader = null;
try {
inputReader = new BufferedReader(new FileReader(filename));
} catch (FileNotFoundException ex) {
System.err.println("File not found: " + filename);
}
return inputReader;
}
public static void main(String[] args) throws Exception {
//Get File
BufferedReader reader = readDataFile("maitre.txt");
//Get the data
Instances data = new Instances(reader);
reader.close();
//Setting class attribute
data.setClassIndex(data.numAttributes() - 1);
//Make tree
J48 tree = new J48();
String[] options = new String[1];
options[0] = "-U";
tree.setOptions(options);
tree.buildClassifier(data);
//Print tree
System.out.println(tree);
//Predictions with test and training set of data
BufferedReader datafile = readDataFile("maitre.txt");
BufferedReader testfile = readDataFile("maitretest.txt");
Instances train = new Instances(datafile);
data.setClassIndex(data.numAttributes() - 1); // from somewhere
Instances test = new Instances(testfile);
data.setClassIndex(data.numAttributes() - 1); // from somewhere
// train classifier
Classifier cls = new J48();
cls.buildClassifier(train);
// evaluate classifier and print some statistics
Evaluation eval = new Evaluation(train);
eval.evaluateModel(cls, test);
System.out.println(eval.toSummaryString("\nResults\n======\n", false));
}
}
der Fehler:
Exception in thread "main" weka.core.UnassignedClassException: weka.classifiers.trees.j48.C45PruneableClassifierTree: Class attribute not set!
at weka.core.Capabilities.test(Capabilities.java:1284)
at weka.core.Capabilities.test(Capabilities.java:1208)
at weka.core.Capabilities.testWithFail(Capabilities.java:1506)
at weka.classifiers.trees.j48.C45PruneableClassifierTree.buildClassifier(C45PruneableClassifierTree.java:120)
at weka.classifiers.trees.J48.buildClassifier(J48.java:293)
at Test.main(Test.java:60)
maitre.txt und maitretest.txt haben wie diese sind somenthing:
@relation maitre
@attribute patrons {none, some, full}
@attribute waitEstation {0-10,10-30,30-60,>60}
@attribute reservation {TRUE, FALSE}
@attribute bar {TRUE, FALSE}
@attribute alternative {TRUE, FALSE}
@attribute sit {yes, no}
@data
some,0-10,TRUE,FALSE,TRUE,yes
full,30-60,FALSE,FALSE,TRUE,no
some,0-10,FALSE,TRUE,FALSE,yes
full,10-30,FALSE,FALSE,TRUE,yes
full,>60,TRUE,FALSE,TRUE,no
some,0-10,TRUE,TRUE,FALSE,yes
none,0-10,FALSE,TRUE,FALSE,no
some,0-10,TRUE,FALSE,FALSE,yes
full,>60,FALSE,TRUE,FALSE,no
full,10-30,TRUE,TRUE,TRUE,yes
none,0-10,FALSE,FALSE,FALSE,no
full,30-60,FALSE,TRUE,TRUE,no
Dank, der den Fehler behoben, aber wie kann ich die Ausgabe in diesem Fall erhalten, ja oder nein für jedes Beispiel in der maitretest.arff, weil rigth jetzt erhalte ich allgemeine Ergebnisse. – SSM89
Sie müssen das Ausgabeattribut 'maitetest.arff' als? Und bitte kreuzen Sie die Antwort als akzeptiert an, wenn es geholfen hat. –
folge ich nicht, wie setze ich das Folgeattribut ?? Und dann wie greife ich auf die Ausgabe für jedes Beispiel zu? – SSM89