Python, PyDot et DecisionTree
Je suis en train de visualiser mes DecisionTree, mais l'obtention de l'erreur
Le code est:
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")
Et l'erreur est
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
Quelqu'un peut-il m'expliquer quel est le problème? Merci beaucoup!
Êtes-vous de nous montrer tout le code? Je ne vois pas si l'instruction que le traceback pointe. Autres que que, de toute évidence, la méthode startswith() attend une chaîne de caractères en entrée "chaîne" ou un n-uplet de chaînes de caractères ("st", "st2", "st3"). Vous avez réussi à le mauvais type de données dans le startswith() de l'appel de méthode. Soit vous n'êtes pas en utilisant des codecs.BOM_UTF8 correctement, ou vous devez la convertir en une chaîne de caractères --> str(codecs.BOM_UTF8)
OriginalL'auteur Polly | 2015-07-03
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème et je viens de passer quelques heures à essayer de comprendre cela. Je ne peux pas garantir que je partage ici fonctionne pour les autres, mais il peut être vaut la peine d'essayer.
pydot
des paquets, mais j'ai Python 3 et ils n'ont simplement pas de travail. Après la découverte d'une note dans un thread à partir de l'un des nombreux sites que j'ai parcouru à travers, j'ai fini par installer cette fourche référentiel de pydot.Control Panel\All Control Panel Items\System\Advanced system settings
> cliquez surEnvironment Variables
bouton > sousSystem variables
j'ai trouvé la variablepath
> cliquez surEdit...
> j'ai ajouté;C:\Program Files (x86)\Graphviz2.38\bin
à la fin de laVariable value:
champ.dot
commandes dans la Ligne de Commande (Windows Processeur de Commande), j'ai tapédot -V
qui a retournédot - graphviz version 2.38.0 (20140413.2041)
.Dans le code ci-dessous, gardez à l'esprit que je suis en train de lire un
dataframe
de mon presse-papiers. Vous pouvez le lire à partir du fichier ou de whathaveyou.Dans IPython Notebook:
Alternativement, si vous n'êtes pas à l'aide de IPython, vous pouvez créer votre propre image à partir de la ligne de commande aussi longtemps que vous avez installé graphviz (étape 2 ci-dessus). En utilisant le même exemple de code ci-dessus, vous utilisez cette ligne après le montage du modèle:
puis ouvrez l'invite de commande où la
treepic.dot
fichier et entrer cette ligne de commande:Un .png le fichier doit être créé avec votre arbre de décision.
OriginalL'auteur Jarad
Dans le cas de l'utilisation de Python 3, il suffit d'utiliser pydotplus au lieu de pydot. Il aura aussi un soft processus d'installation par le pip.
C'est le meilleur conseiller - merci +1 je l'ai utilisé avec
Image(graph.create_png())
sur Jupyter au lieu de l'écrire dans un fichier pdf et travaillé de la ligne a du charmeVous pouvez également faire
dot_data = tree.export_graphviz(clf, out_file=None)
OriginalL'auteur Juliano ENS
La ligne en question est de la vérification pour voir si le flux de données/fichier est encodé en UTF-8
Au lieu de:
utilisation:
Vous aurez probablement plus de succès...
Il est à la recherche d'un caractère dans une chaîne de méthode. Pas susceptibles de travailler. Bien qu'ils ne peuvent pas être équivalent, la NOMENCLATURE est généralement au début d'un fichier et ne pas être utilisée n'importe où ailleurs (à moins que vous vraiment mussed de votre fichier) voir en.wikipedia.org/wiki/Byte_order_mark
Je crois que le problème est dans mon fichier de données, quelqu'un sait comment devrait-il ressembler? J'ai un fichier csv, où la première chaîne contient des noms d'attributs dans chaque colonne, et d'autres chaînes contiennent des données numériques. Donc, mon X et Y sont les données numériques à partir d'un fichier, j'ai du faire "skiprows=1" lors de l'ouverture de mon fichier
sans voir le fichier, nous allons tous être dans le doute. Vous avez besoin de fournir plus de détails si vous voulez plus de réponses constructives. Ma réponse ci-dessus sera probablement traiter votre problème d'origine mais dans un certain contexte.
OriginalL'auteur Incognos