Python, PyDot und DecisionTree
Ich versuche zu visualisieren, meine DecisionTree, aber immer die Fehler
Der code ist:
X = [i[1:] for i in dataset]#attribute
y = [i[0] for i in dataset]
clf = tree.DecisionTreeClassifier()
dot_data = StringIO()
tree.export_graphviz(clf.fit(train_X, train_y), out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("tree.pdf")
Und der Fehler ist
Traceback (most recent call last):
if data.startswith(codecs.BOM_UTF8):
TypeError: startswith first arg must be str or a tuple of str, not bytes
Kann jemand mir erklären was ist das problem? Vielen Dank!
- Sie zeigt uns den code? Ich sehe nicht die wenn-Anweisung, die das traceback wird hingewiesen. Andere als die, offensichtlich die Methode startswith() erwartet entweder einen string als input "string" oder ein Tupel von strings ("st", "st2", "st3"). Sie bestanden auf der falschen Datentyp in die startswith () - Methode aufrufen. Entweder Sie sind nicht mit codecs.BOM_UTF8 richtig, oder Sie haben zu werfen es in einen string --> str ("codecs".BOM_UTF8)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte exakt das gleiche problem, und verbrachte ein paar Stunden versucht, dies herauszufinden. Ich kann nicht garantieren, was ich hier arbeiten werde, für andere, aber es kann sein, lohnt sich ein Schuss.
pydot
- Pakete, aber ich habe Python 3 und Sie ging einfach nicht. Nach der Suche nach einem Hinweis in einem thread von einem der vielen websites, die ich abgekocht durch, ich landete der Installation diese Gabel-repository von pydot.Control Panel\All Control Panel Items\System\Advanced system settings
> klicken Sie aufEnvironment Variables
- Taste > unterSystem variables
fand ich die variablepath
> klicken Sie aufEdit...
> ich fügte;C:\Program Files (x86)\Graphviz2.38\bin
am Ende in derVariable value:
Feld.dot
Befehle in der Befehlszeile (Windows-Befehlsprozessor), tippte ichdot -V
welche zurückgegebendot - graphviz version 2.38.0 (20140413.2041)
.In dem code unten, halten Sie im Verstand, ich bin das Lesen eines
dataframe
aus meiner Zwischenablage. Sie könnte es Lesen aus Datei oder whathaveyou.In IPython Notebook:
Alternativ, wenn Sie nicht mit IPython, können Sie generieren Ihr eigenes Bild von der Kommandozeile wie lange Sie haben, graphviz installiert (Schritt 2 oben). Mit meinem Beispiel-code oben, verwenden Sie diese Zeile nach der Montage des Modells:
öffnen Sie dann die Eingabeaufforderung, wo die
treepic.dot
- Datei und geben Sie diese Befehlszeile ein:Ein .png-Datei erstellt werden soll mit Ihre Entscheidung Baum.
Im Falle der Verwendung von Python 3 verwenden, verwenden Sie einfach pydotplus statt pydot. Es wird auch eine soft-installation von pip.
Image(graph.create_png())
auf Jupyter statt zu schreiben, es in ein pdf und arbeitete Linie ein Charmedot_data = tree.export_graphviz(clf, out_file=None)
Den line-in der Frage ist zu überprüfen, ob der stream/die Datei wird als UTF-8 kodiert
Statt:
verwenden:
Werden Sie wahrscheinlich mehr Erfolg haben...