Weka J48 Klassifizierer: Nicht in den Griff numerische Klasse?
Ich bin jetzt versuchen zu bauen J48 (C4.5) Klassifikator-Modell auf mein training Daten mit Weka.
Erstens Tue ich das, was zu gehen scheint OK:
java -Xmx10G -cp /weka/weka.jar
weka.core.Wandler.TextDirectoryLoader -dir /home/test/cats >
/home/test/Katzen.arff
Diese scheint zu gehen, auch OK:
java -Xmx10G -cp /weka/weka.jar
weka.Filter.unbeaufsichtigt.Attribut.StringToWordVector -ich
/home/test/Katzen.arff -o /home/test/Katzen-Vektor.arff
Dies nicht gehen, OK:
java -Xmx10G -cp /weka/weka.jar weka.Klassifikatoren.Bäume.J48 -t
/home/test/Katzen-Vektor.arff -d /home/test/Katzen.Modell
Es gibt die folgende Fehlermeldung:
weka.core.UnsupportedAttributeTypeException: weka.classifiers.trees.j48.C45Prune ableClassifierTree: Cannot handle numeric class!
at weka.core.Capabilities.test(Capabilities.java:954)
at weka.core.Capabilities.test(Capabilities.java:1110)
at weka.core.Capabilities.test(Capabilities.java:1023)
at weka.core.Capabilities.testWithFail(Capabilities.java:1302)
at weka.classifiers.trees.j48.C45PruneableClassifierTree.buildClassifier (C45PruneableClassifierTree.java:116)
at weka.classifiers.trees.J48.buildClassifier(J48.java:236)
at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1076)
at weka.classifiers.Classifier.runClassifier(Classifier.java:312)
at weka.classifiers.trees.J48.main(J48.java:948)
So versuchte ich dann dieses:
java -Xmx10G -cp /weka/weka.jar weka.Klassifikatoren.Bäume.J48 -t
/home/test/Katzen.arff -d /home/test/Katzen.Modell
Die gibt auch die Fehlermeldung:
weka.core.UnsupportedAttributeTypeException: weka.classifiers.trees.j48.C45PruneableClassifierTree: Cannot handle string attributes!
at weka.core.Capabilities.test(Capabilities.java:980)
at weka.core.Capabilities.test(Capabilities.java:869)
at weka.core.Capabilities.test(Capabilities.java:1085)
at weka.core.Capabilities.test(Capabilities.java:1023)
at weka.core.Capabilities.testWithFail(Capabilities.java:1302)
at weka.classifiers.trees.j48.C45PruneableClassifierTree.buildClassifier(C45PruneableClassifierTree.java:116)
at weka.classifiers.trees.J48.buildClassifier(J48.java:236)
at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1076)
at weka.classifiers.Classifier.runClassifier(Classifier.java:312)
at weka.classifiers.trees.J48.main(J48.java:948)
Natürlich habe ich vorbereitet, die Daten irgendwie falsch (BTW die Eingabe von text-Dateien in den Unterverzeichnissen, die mit dem Namen der Kategorien, die ich will). Aber ich dachte, ich folgte den Anweisungen auf dem Weka-Wiki:
Weka Wiki Kategorisieren Von Text-Dateien
Weka Wiki-Primer
Also was mache ich falsch? Ich möchte mit J48, weil es angesichts hoher Genauigkeit auf meine Daten in tests. Also, was muss ich tun, um meine Daten zu bekommen, die Klassifikatoren J48, es zu akzeptieren? Oder brauche ich einen anderen Klassifikator?
Bitte um Hilfe!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Klassifikatoren J48 ist ein Baum, der Sichter, die akzeptieren nur die nominalen Klassen. Was bedeutet, dass die Klassen nach, die Sie klassifizieren Ihre Instanzen bekannt sein muss, bevor die hand. DH, wenn Sie versuchen, um vorherzusagen, eine Bewertung, und Sie wissen, dass die Bewertung auf einer 5-stufige Likert-Skala, müssen Sie explizit sagen, also in Ihrem ARFF-Datei mit etwas wie
@attribute class {1,2,3,4,5}
, aber wenn Sie voraussagen, das Gewicht einer person, dann ist dieser Wert wohl eine Reale Zahl und kann daher nicht " fit " in eine Baum-Klassifikation. NB: ein Weg, um zu gehen, dass wäre eine Auswahl der GEWICHTE zur Verfügung: von 10 bis 15 kg 15 bis 20 kg etc. Auf diese Weise konnte Sie haben ein nominalem Attribut class.Das Wort Vektoren umgewandelt werden kann, um binäre wie diese:
Obwohl dies fügt bias auf die Art der Daten, die Sie trainieren gegen. Dies bedeutet, dass binäre strings sehr nahe mit einander behandelt werden, so ähnlich wie strings weit entfernt. Wenn Sie möchten, löschen Sie diese, bias und betrachten jede Zeichenfolge als ein einzigartiges Wesen ist, dann verwenden Sie
@attribute class {ABC, DEF, GHI, etc}
Dann funktioniert es!Wenn Sie wirklich wollen, zu kommunizieren, dass diese features wichtig sind und nicht-in-allen verwandten, eine ganze Spalte für jede saite hat dort den Wert '1', wenn eine Zeile hat, die Kategorie, und 0, wenn es nicht. Dies schafft eine sehr spärliche Daten, aber dann ist der Lern-Algorithmus hat eine Neigung zu Scannen, dass die Daten information zu gewinnen.