2016-08-12 2 views
0

M5P Baummodell aus weka.classifiers: Python-weka-wrapper Jede Zeile in meiner ARFF Datei besteht aus 6 mit Attributen 6.es Attribut der Zielgröße ist, für die das Modell trainiert wird. Ich benutze weka.core.converters.ArffLoader um die arff-Datei zu trainieren. Nach dem Training, wenn ich mit einigen Testdaten Vorhersagen treffen möchte, erstelle ich Instanzen und übergebe sie an das gebaute Modell, um vorherzusagen. In den Instanzen übergebe ich nur die Werte der 5 Attribute und nicht den Wert der Zielvariablen. Ich bin eine Java-Ausnahme bekommen:Regression: Testdaten für die Vorhersage erfordern Klassenwert? in Weka

Traceback (jüngste Aufforderung zuletzt): Datei "C: /Users/Sethuraman/PycharmProjects/Test_printer/m_M5P.py", Linie 85, in pred_dict1 [index + 1 ] = cls.classify_instance (Instanz) Datei "C: \ Benutzer \ Sethuraman \ Anaconda2 \ lib \ site-packages \ python_weka_wrapper-0.3.8-py2.7.egg \ weka \ classifiers.py", Linie 105, in classify_instance return self .__ zu klassifizieren (inst.jobject) Datei "C: \ Benutzer \ Sethuraman \ Anaconda2 \ lib \ site-packages \ javabridge-1.0.14-py2.7-win-amd64.egg \ javabridge \ jutil.py" , Zeile 852, in Fn raise JavaException (x) javabridge.jutil.JavaException: Src und Dest unterscheiden sich in # o f Attribute: 5! = 6

Warum sollte ich den Zielvariablenwert angeben? Ist es notwendig, den Zielwert auch zu übergeben? Im Wesentlichen nach dem Training sollte das Modell den Zielwert vorhersagen. Wenn ja, warum? Wenn nein, wie geht man damit um? Bitte helfen!

Antwort

1

können Sie die Add Filter verwenden, um ein neues Attribut einzuführen. Standardmäßig markiert dieser Filter alle Werte des neuen Attributs als fehlend ("?"). Stellen Sie nur sicher, dass der Name dieses neuen Attributs und im Falle einer nominalen Klasse die Reihenfolge der Klassenbezeichnungen genau der gleichen ist wie in den Trainingsdaten.

+0

Der Link, den Sie für den Filter hinzufügen zur Verfügung gestellt haben, dient zur Implementierung in Java. Kannst du mir bitte sagen, wie man das in Py-Weka implementiert? ein Beispiel nennen? Ich verwende [dieses Beispiel] (https://github.com/fracpete/python-weka-wrapper3-examples/blob/master/src/wekaexamples/core/dataset.py) zum Erstellen von Attributen und Instanzen, aber für einen numerischen Wert Attribut, wie '?' auf dem Weg? – Sethuraman

+0

Danke für die Antwort.Es funktionierte :-) – Sethuraman

0

Wenn Sie Validierung möchten, sollten Sie auf jeden Fall Zielwerte angeben; Woher weiß der Algorithmus, wie gut es sonst gemacht wird? Aber wenn Sie nur wollen, dass es auf dieser Menge vorhersagt, scheint es der beste Weg zu sein, den Zielpunkt mit '?' Zu füllen, so dass die Daten immer noch die 6 Attribute haben, wobei das Ziel einfach als unbekannt markiert ist. Weitere Informationen finden Sie unter http://weka.wikispaces.com/Making+predictions.

+0

Vielen Dank für den Kommentar. Ich habe meine Frage bearbeitet. Ich möchte das Modell nicht validieren. Machen Sie nur Vorhersagen über Testdaten. Ich benutze 'python weka wrapper' und erstelle Instanzen, indem ich die Daten verwende, die getrennt von .csv-Dateien gelesen werden. Da ich die Zielwert-Information nicht habe, was soll ich tun? – Sethuraman

+0

sehen Sie die bearbeitete Antwort. Die Dokumentation scheint zu zeigen, dass die einzige Möglichkeit, dies zu erreichen, darin besteht, das Zielattribut für jeden Datenpunkt zu markieren. –

+0

Bitte ertragen Sie mit mir, wenn ich albern bin. Ich versuche, die Instanz in Python zu erstellen. Wenn ich also das 6. Attribut hinzufügen muss, muss es als String '?' Hinzugefügt werden. am Ende der Instanzliste. Beim Versuch, einen Fehler vorherzusagen, gibt der Wrapper einen Wertfehler aus, der besagt, dass er die Zeichenfolge nicht in float konvertieren kann. Das ist verständlich, weil meine Zielvariable float ist. Fehle ich hier etwas? wie geht man damit um? – Sethuraman

Verwandte Themen