1. ホーム
  2. python

[解決済み] scikit-learnで決定木を可視化する

2022-03-08 01:12:27

質問

Pythonでscikit-learnを使って簡単なDecision Treeを設計し、以下のように可視化しようとしています(Windows OSでPython 2.7.3とAnacondaのIpython Notebookを使用しています)。

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の質問も同様にうまくいかないようです。 質問内容

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