web-dev-qa-db-ja.com

Python、PyDot、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

誰かが私に問題を説明できますか?大いに感謝する!

11
Polly

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

  1. 公式のpydotパッケージをインストールしようとしましたが、Python 3で、機能しませんでした。調べた多くのWebサイトの1つからスレッドでメモを見つけた後、最終的にインストールしました pydotのこのフォークされたリポジトリ
  2. graphviz.org にアクセスして、Windows7マシンにソフトウェアをインストールしました。 Windowsをお持ちでない場合は、システムのダウンロードセクションをご覧ください。
  3. インストールが成功した後、環境変数(_Control Panel\All Control Panel Items\System\Advanced system settings_>クリック_Environment Variables_ボタン> _System variables_の下に変数path>クリック_Edit..._>追加;C:\Program Files (x86)\Graphviz2.38\binを_Variable value:_フィールドの最後まで。
  4. コマンドライン(Windowsコマンドプロセッサ)でdotコマンドを使用できることを確認するために、_dot -V_と入力すると、dot - graphviz version 2.38.0 (20140413.2041)が返されます。

以下のコードでは、クリップボードからdataframeを読み取っていることを覚えておいてください。あなたはそれをファイルまたは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()) 
_

Decision Tree Visualization

または、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ファイルを作成する必要があります。

5
Jarad

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")
9
Juliano ENS

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

の代わりに:

if data.startswith(codecs.BOM_UTF8):

使用する:

if codecs.BOM_UTF8 in data:

あなたはおそらくもっと成功するでしょう...

0
Incognos