環境はCentOS6.6、Python2.7.9。
決定木を作成するコードは以下のサイトから。
Pythonで決定木を描いてみる - 技術情報棚卸し(平日限定)
上記のサイトでは結果をgraph.dotというファイルに出力し、その後コマンドライン上でPDFへ変換している。これを毎回やるのは面倒なので、python内で処理してしまおうというのが目的。
# encoding: utf-8
import pandas as pd
from sklearn import tree
from sklearn.externals.six import StringIO
from graphviz import Digraph
import pydot
data = pd.read_table('iris.txt')
# 説明変数
variables = ['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width']
classifier = tree.DecisionTreeClassifier()
# 目的変数はSpecies
classifier = classifier.fit(data[variables], data['Species'])
# 結果をPDFで出力
dot_data = StringIO()
tree.export_graphviz(classifier, out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf('iris.pdf')
実行してみると、以下のエラーが表示された。
Couldn't import dot_parser, loading of dot files will not be possible. Traceback (most recent call last): File "decision_tree.py", line 18, ingraph = pydot.graph_from_dot_data(dot_data.getvalue()) File "/usr/local/lib/python2.7/site-packages/pydot.py", line 199, in graph_from_dot_data return dot_parser.parse_dot_data(data) NameError: global name 'dot_parser' is not defined
結論だけ書くとpydotをアンイストールしてpydot2を入れることで解決、無事PDFが作成された。
$ sudo pip uninstall pydot $ sudo pip install pydot2
参考: