Ho avuto lo stesso esatto problema e ho appena passato un paio d'ore cercando di capire il suo fuori. Non posso garantire che ciò che condivido qui funzionerà per gli altri, ma potrebbe valerne la pena.
- Ho provato a installare i pacchetti ufficiali
pydot
ma ho Python 3 e semplicemente non hanno funzionato. Dopo aver trovato una nota in una discussione da uno dei tanti siti Web da cui sono uscito, ho finito con l'installare this forked repository of pydot.
- Sono andato a graphviz.org e ho installato il loro software sul mio computer Windows 7. Se non hai Windows, guarda sotto la sezione Download del tuo sistema.
- Dopo il successo di montaggi, in Variabili d'ambiente (
Control Panel\All Control Panel Items\System\Advanced system settings
> cliccare Environment Variables
pulsante> sotto System variables
ho trovato la variabile path
> cliccare Edit...
> Ho aggiunto ;C:\Program Files (x86)\Graphviz2.38\bin
alla fine nel campo Variable value:
.
- Per confermare Ora posso usare
dot
comandi nella riga di comando (Command Processor Windows), ho digitato dot -V
che ha restituito dot - graphviz version 2.38.0 (20140413.2041)
.
nel codice qui sotto, tenere a mente che sto leggendo un dataframe
dal mio appunti. Si potrebbe essere leggendolo dal file o da cosa.
In IPython Notebook:
import pandas as pd
import numpy as np
from sklearn import tree
import pydot
from IPython.display import Image
from sklearn.externals.six import StringIO
df = pd.read_clipboard()
X = df[df.columns[:-1]]
y = df[df.columns[-1]]
dtr = tree.DecisionTreeRegressor(max_depth=3)
dtr.fit(X, y)
dot_data = StringIO()
tree.export_graphviz(dtr, out_file=dot_data, feature_names=X.columns)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
In alternativa, se non si sta usando IPython, è possibile generare la propria immagine dalla riga di comando fino a quando si hanno graphviz installato (punto 2 sopra). Usando il mio stesso codice esempio di cui sopra, si utilizza questa linea dopo il montaggio del modello:
tree.export_graphviz(dtr.tree_, out_file='treepic.dot', feature_names=X.columns)
poi aprono prompt dei comandi in cui il file è treepic.dot
e immettere questa riga di comando:
dot -T png treepic.dot -o treepic.png
Un file .png dovrebbe essere creato con il tuo albero decisionale.
Ci stai mostrando tutto il codice? Non vedo la dichiarazione if che indica il traceback. Oltre a questo, ovviamente il metodo startswith() si aspetta una stringa come input "stringa" o una tupla di stringhe ("st", "st2", "st3"). Hai passato il tipo di dati sbagliato nella chiamata al metodo startswith(). O non stai usando correttamente codecs.BOM_UTF8, o devi lanciarlo su una stringa -> str (codecs.BOM_UTF8) – reticentroot