概要
Pythonのscikit-learnで提供される決定木のクラス分類モデルDecisionTreeClassifier
の実行結果を可視化する環境について。
Graphvizとgraphvizパッケージ
この方法は、決定木の画像がPDFとして生成され、デフォルトのPDFリーダーが自動的に起動して確認できる。画像ファイルを利用する場合、PDFから切り出すか、以下のpydotplusパッケージを利用する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import graphviz from sklearn.datasets import make_moons from sklearn.tree import DecisionTreeClassifier, export_graphviz X, y = make_moons(n_samples=20, noise=0.25, random_state=3) treeclf = DecisionTreeClassifier(random_state=0) treeclf.fit(X, y) dot_data = export_graphviz(treeclf, out_file=None, feature_names=["f0", "f1"], class_names=["c0", "c1"]) graph = graphviz.Source(dot_data) graph.render("image", view=True) |
Graphvizとpydotplosパッケージ
この方法は、決定木の画像がファイルとして生成・保存される。画像を確認するためにファイルが保存されたディレクトリでファイルを開く手順が必要になるが、得られたファイルをそのまま活用することができる。
pydotplusのインストール
pydotplusをインストールする。
1 |
> pip install pydotplus |
これだけでは次のようなエラーが出る。
1 |
pydotplus.graphviz.InvocationException: GraphViz's executables not found |
Graphvizのインストール
Graphvizのサイトから実行ファイル(msiファイル)をダウンロード、インストールする。
実行方法1:Graphvizの実行位置を指定
以下のコード例13行目のように、Graphvizの実行プログラムの位置を指定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import pydotplus as pdp from sklearn.datasets import make_moons from sklearn.tree import DecisionTreeClassifier, export_graphviz X, y = make_moons(n_samples=20, noise=0.25, random_state=3) treeclf = DecisionTreeClassifier(random_state=0) treeclf.fit(X, y) dot_data = export_graphviz(treeclf, out_file=None, feature_names=["f0", "f1"], class_names=["c0", "c1"]) graph = pdp.graph_from_dot_data(dot_data) graph.progs = {'dot': u"C:\\Program Files (x86)\\Graphviz2.38\\bin\\dot.exe"} graph.write_png("graph.png") |
実行方法2:Graphvizへのパスを環境変数に登録
環境変数に上記のGraphvizのパスを指定する。
- デスクトップのPCアイコンを右クリック→プロパティ
- システム・ウィンドウ→システムの詳細設定
- システムのプロパティダイアログ→環境変数ボタン
- 環境変数ダイアログのシステム環境変数→Pathを指定して編集ボタン
- 環境変数名の編集ダイアログ→新規ボタン
- Graphvizへのパス(例えばC:\Program Files (x86)\Graphviz2.38\bin\)を入力してOK
- 以下、各ダイアログでOK
環境変数を設定しておくと、毎回パスを指定しなくてよい。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import pydotplus as pdp from sklearn.datasets import make_moons from sklearn.tree import DecisionTreeClassifier, export_graphviz X, y = make_moons(n_samples=20, noise=0.25, random_state=3) treeclf = DecisionTreeClassifier(random_state=0) treeclf.fit(X, y) dot_data = export_graphviz(treeclf, out_file=None, feature_names=["f0", "f1"], class_names=["c0", "c1"]) graph = pdp.graph_from_dot_data(dot_data) graph.write_png("graph.png") |
dtreeviz
dtreevizのインストール
dtreevizをインストールする。
1 |
> pip install dtreeviz |
実行方法
Graphvizの実行方法2で環境変数を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from sklearn.datasets import make_moons from sklearn.tree import DecisionTreeClassifier from dtreeviz.trees import dtreeviz X, y = make_moons(n_samples=20, noise=0.25, random_state=3) treeclf = DecisionTreeClassifier(random_state=0) treeclf.fit(X, y) viz = dtreeviz(treeclf, X, y, target_name="Classes", feature_names=["f0", "f1"], class_names=["c0", "c1"]) viz.view() |