11

DecisionTree を視覚化しようとしていますが、エラーが発生します コードは次のとおりです。

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")

そして、エラーは

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

誰が私に何が問題なのか説明できますか? 本当にありがとうございました!

4

3 に答える 3

11

Python 3 を使用している場合は、 pydot の代わりに pydotplus を使用ください。また、pip によるソフト インストール プロセスもあります。

import pydotplus

<your code>

dot_data = StringIO()
tree.export_graphviz(clf, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
于 2016-04-06T16:29:09.020 に答える
5

私はまったく同じ問題を抱えていて、これを理解しようとして数時間を費やしました。ここで共有する内容が他の人に役立つことを保証することはできませんが、試してみる価値はあるかもしれません.

  1. 公式パッケージをインストールしようとしpydotましたが、Python 3 があり、単に機能しませんでした。私が精査した多くのWebサイトの1つからのスレッドでメモを見つけた後、このフォークされた pydot リポジトリをインストールすることになりました。
  2. 私はgraphviz.orgに行き、彼らのソフトウェアを自分のWindows 7マシンにインストールしました。Windows を使用していない場合は、システムのダウンロード セクションを参照してください。
  3. インストールが成功したら、環境変数(Control Panel\All Control Panel Items\System\Advanced system settings>Environment Variablesボタンをクリック >System variables変数が見つかりましたpath> クリック>フィールドの最後Edit...に追加しました。;C:\Program Files (x86)\Graphviz2.38\binVariable value:
  4. dotコマンド ライン (Windows コマンド プロセッサ) でコマンドを使用できるようになったことを確認するために、 dot -Vwhich が返されたと入力しましたdot - graphviz version 2.38.0 (20140413.2041)

以下のコードではdataframe、クリップボードから a を読み取っていることに注意してください。ファイルまたはwhathaveyouからそれを読んでいる可能性があります。

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()) 

ディシジョン ツリーの視覚化

または、IPython を使用していない場合は、graphviz がインストールされていれば、コマンド ラインから独自のイメージを生成できます (上記の手順 2)。上記と同じコード例を使用すると、モデルをフィッティングした後に次の行を使用できます。

tree.export_graphviz(dtr.tree_, out_file='treepic.dot', feature_names=X.columns)

treepic.dot次に、ファイルがあるコマンド プロンプトを開き、次のコマンド ラインを入力します。

dot -T png treepic.dot -o treepic.png

ディシジョン ツリーを含む .png ファイルを作成する必要があります。

于 2015-12-11T08:51:52.983 に答える
0

問題の行は、ストリーム/ファイルが UTF-8 としてエンコードされているかどうかを確認しています。

それ以外の:

if data.startswith(codecs.BOM_UTF8):

使用する:

if codecs.BOM_UTF8 in data:

より多くの成功を収めることができるでしょう...

于 2015-07-03T14:48:51.870 に答える