Python実践100本ノック 第5章の決定木をgraphvizを用いて可視化してみた


はじめに

「Python実践100本ノック」を用いて勉強しています。この本は実際の状況に近いデータを用いてデータ分析の勉強ができるので、本当にいい本だなぁと思っております(といっても実際はもっともっとひどいデータがたくさんあるのでしょうけれども…)。
そんな本書の第5章にて、scikit-learnで決定木を用いて分析を行う場面があります。そこでモデルを作成するのですが、木構造の可視化はgraphvizを用いて挑戦してみて〜ということなので、今回やってみました。

※ 初心者が投稿しておりますので、間違えている場合はご教授いただければ幸いです。

対象としている読者

  • Python実践100本ノックを読んでいる方
  • scikit-learnで決定木の可視化方法を探している方

対象箇所

Python実践100本ノック
 -> 第5章 顧客の退会を予測する10本ノック
  -> ノック49:モデルの寄与している変数を確認しよう

私のPC環境

  • macOS Catalina 10.15.3
  • Python 3.7.7
  • scikit-learn 0.22.2.post1
  • Jupyter 1.0.0

graphvizのインストール

まずはhomebrewを使って本体をインストールします。

brew install graphviz

さらにPython用のライブラリをpipを使ってインストールします(anacondaの方はcondaでできるみたいです)。

pip install graphviz

コード

※ p.127 のコードまで実施している前提で以下記載しています。

1. Jupyter notebook 上に表示する方法

といっても、以下のコードを追加するだけです。とっても簡単ですね。

from sklearn import tree
import graphviz
dot_data = tree.export_graphviz(model, out_file=None)
graph = graphviz.Source(dot_data)
graph

2. ファイルを作成する方法

最後のコードをちょっと修正するだけで、pdfファイルを作成することができます。この例では「test.pdf」がカレントディレクトリに作成されます。

from sklearn import tree
import graphviz
dot_data = tree.export_graphviz(model, out_file=None)
graph = graphviz.Source(dot_data)
graph.render('test')

3. ターミナルを使ってファイルを作成する方法(おまけ)

sklearn.treeのexport_graphviz関数を用いてDOT言語形式の決定木ファイルを作成し、Jupyter notebook上でシステムコマンドを走らせています。

from sklearn import tree
import graphviz
with open('test.dot', mode='w') as f:
    tree.export_graphviz(model, out_file=f)
!dot -T png test.dot -o test.png

参考文献

こちらの記事は以下の情報を参考にして執筆しました。詳しい情報は以下を参照ください。
1.10. Decision Trees(公式のドキュメントです)
sklearn.tree.export_graphviz(こちらも公式のドキュメントです)
Python:scikit-learnで決定木(Decision Tree)を試してみる(参考にさせていただきました)