Python(Windows OSでAnacondaのIpythonノートブックを使用して、Python 2.7.3で)と次のように視覚化します。
from pandas import read_csv, DataFrame
from sklearn import tree
from os import system
data = read_csv('D:/training.csv')
Y = data.Y
X = data.ix[:,"X0":"X33"]
dtree = tree.DecisionTreeClassifier(criterion = "entropy")
dtree = dtree.fit(X, Y)
dotfile = open("D:/dtree2.dot", 'w')
dotfile = tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns)
dotfile.close()
system("dot -Tpng D:.dot -o D:/dtree2.png")
ただし、次のエラーが表示されます。
AttributeError: 'NoneType' object has no attribute 'close'
次のブログ投稿を参照として使用します。 ブログ投稿リンク
次のstackoverflowの質問は私にとってもうまくいかないようです: Question
Scikit-learnでデシジョンツリーを視覚化する方法を教えてください。
_sklearn.tree.export_graphviz
_ は何も返さないため、デフォルトではNone
を返します。
dotfile = tree.export_graphviz(...)
を実行すると、以前にdotfile
に割り当てられていた開いているファイルオブジェクトを上書きするため、ファイルを閉じようとするとエラーが発生します(現在はNone
)。
修正するには、コードを
_...
dotfile = open("D:/dtree2.dot", 'w')
tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns)
dotfile.close()
...
_
jupyterとsklearn(18.2+)を使用している人向けのライナーが1つあります。そのためにmatplotlib
も必要ありません。唯一の要件は graphviz です
pip install graphviz
実行するよりも(質問Xのコードによるとpandas DataFrame)
from graphviz import Source
from sklearn import tree
Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))
これにより、SVG形式で表示されます。上記のコードは、Graphvizの Source オブジェクト( source_code -怖くない)を生成します。これはjupyterで直接レンダリングされます。
あなたがそれでやりそうなこと
Jupterで表示します。
from IPython.display import SVG
graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))
SVG(graph.pipe(format='svg'))
Png形式で保存:
graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))
graph.format = 'png'
graph.render('dtree_render',view=True)
PNG画像を取得し、保存して表示します。
graph = Source( tree.export_graphviz(dtreg, out_file=None, feature_names=X.columns))
png_bytes = graph.pipe(format='png')
with open('dtree_pipe.png','wb') as f:
f.write(png_bytes)
from IPython.display import Image
Image(png_bytes)
私のように、graphvizのインストールに問題がある場合は、次の方法でツリーを視覚化できます。
export_graphviz
でエクスポートする.dot
ファイルを開きますまたは、pydotを使用して、ドットからpngファイルを生成してみることもできます。
...
tree.export_graphviz(dtreg, out_file='tree.dot') #produces dot file
import pydot
dotfile = StringIO()
tree.export_graphviz(dtreg, out_file=dotfile)
pydot.graph_from_dot_data(dotfile.getvalue()).write_png("dtree2.png")
...
Export_graphvizファイルの内容をコピーし、同じものを webgraphviz.com サイトに貼り付けることができます。
詳しくは、How to デシジョンツリーをPython with graphviz)で視覚化してください の記事をご覧ください。
ソース.dotを直接取得する際に問題が発生した場合は、次のようにSource.from_file
を使用することもできます。
from graphviz import Source
from sklearn import tree
tree.export_graphviz(dtreg, out_file='tree.dot', feature_names=X.columns)
Source.from_file('tree.dot')
以下も正常に機能します。
from sklearn.datasets import load_iris
iris = load_iris()
# Model (can also use single decision tree)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=10)
# Train
model.fit(iris.data, iris.target)
# Extract single tree
estimator = model.estimators_[5]
from sklearn.tree import export_graphviz
# Export as dot file
export_graphviz(estimator, out_file='tree.dot',
feature_names = iris.feature_names,
class_names = iris.target_names,
rounded = True, proportion = False,
precision = 2, filled = True)
# Convert to png using system command (requires Graphviz)
from subprocess import call
call(['dot', '-Tpng', 'tree.dot', '-o', 'tree.png', '-Gdpi=600'])
# Display in jupyter notebook
from IPython.display import Image
Image(filename = 'tree.png')
ソースを見つけることができます こちら
以下のようにコードの一部をコピーして変更します。
from pandas import read_csv, DataFrame
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from os import system
data = read_csv('D:/training.csv')
Y = data.Y
X = data.ix[:,"X0":"X33"]
dtree = tree.DecisionTreeClassifier(criterion = "entropy")
dtree = dtree.fit(X, Y)
Dtreeがあることを確認した後、つまり上記のコードが適切に実行されることを確認したら、以下のコードを追加して決定ツリーを視覚化します。
最初にgraphvizをインストールすることを忘れないでください:pip install graphviz
import graphviz
from graphviz import Source
dot_data = tree.export_graphviz(dtree, out_file=None, feature_names=X.columns)
graph = graphviz.Source(dot_data)
graph.render("name of file",view = True)
データを試してみましたが、視覚化はうまく機能し、すぐにPDFファイルが表示されました。
シンプルな方法 here with pydotplus (graphvizをインストールする必要があります):
from IPython.display import Image
from sklearn import tree
import pydotplus # installing pyparsing maybe needed
...
dot_data = tree.export_graphviz(best_model, out_file=None, feature_names = X.columns)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())