ぴよねろ@機械学習

機械学習、他LalavelやらPythonやら

決定木の結果を可視化する際にgraphvizがうまくいかない件

東京大学のデータサイエンティスト育成講座」

という本で機械学習について学習中ですが詰まった個所を忘備録として残します。

結論

結論から言うとpipでインストールされるgraphvizはラッパー

ハマリポイント①

import pydotplus
from sklearn import tree
from sklearn.externals.six import StringIO
from IPython.display import Image

dot_data = StringIO()
tree.export_graphviz(model, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())


以下のエラーが出る

    ModuleNotFoundErrorTraceback (most recent call last)
    
    <ipython-input-27-6ce788850e43> in <module>
          1 import pydotplus
          2 from sklearn import tree
    ----> 3 from sklearn.externals.six import StringIO
          4 from IPython.display import Image
          5 


    ModuleNotFoundError: No module named 'sklearn.externals.six'

対応

sklearn.externals.sixはversion0.23から削除されているらしい。
代わりに以下でいけるようだ。

import pydotplus
from sklearn import tree
from six import StringIO
from IPython.display import Image

dot_data = StringIO()
tree.export_graphviz(model, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

ハマリポイント②

次は

pydotplus.graphviz.InvocationException: GraphViz's executables not found

と怒られる。
事前に

pip install graphviz

は済ませておいたのだが、pipでインストールされるのはラッパーに過ぎないらしい。

対応

graphviz本体をインストールしておく必要があるらしい。

apt-get update
apt-get install graphviz

結果

これでグラフが出力される

f:id:parusuteng:20210228214315p:plain
決定木