dtreevizをインストールして決定木を可視化する【Python】

dtreevizをインストールして決定木を可視化する【Python】 プログラミング

「人は見た目が9割」という書籍がありました。
残酷かもしれませんが、それが現実です。

そして、そのことがデータ分析にもあてはまるのかもしれません。
今は、データ分析が一部の人のモノだけではなくなりました。

その結果、データ分析結果をありとあらゆるところで目にします。
そうなってくると、「データ分析は見た目が9割」もあながち間違ってはいないかもしれません。

どんなにいいデータ分析でも、見た目が悪いと見られないということです。
逆に、見た目が良いなら、大したデータ分析でなくても見られることになります。

今回に紹介するdtreevizは、そんな現状だからこそ開発されたのかもしれません。
データ分析の専門家たちが、既存の決定木のダサさに業を煮やして自分たちで作ってしまったのです。

本記事の内容

  • dtreevizとは?
  • dtreevizのシステム要件
  • dtreevizのインストール
  • dtreevizの動作確認

それでは、上記に沿って解説していきます。

dtreevizとは?

dtreevizとは、決定木の可視化・モデル解釈のためのPythonライブラリです。
最新バージョンでは、以下の3つ機械学習ライブラリをサポートしています。

  • scikit-learn
  • XGBoost
  • Spark MLlib

開発者は、データサイエンスの専門家が中心となっています。
実は、ここがポイントになります。

何がポイントとか言うと、開発者が生粋のプログラマーではないということです。
このポイントが、dtreevizのメリットにもデメリットにもなってきます。

まずは、dtreevizの最大のメリットを確認しましょう。
二つの決定木を見比べてください。

scikit-learnのデフォルト機能で出力した決定木

dtreevizで出力した決定木

単純にどっちがいいですか?
言うまでもなく、dtreevizで出力した決定木ですよね。

さすがに、データサイエンスの専門家たちが開発しただけはあります。
見た目にもこだわって、分析結果を見て貰いたいという意図がアリアリです。

「dtreeviz 最高!!」
「dtreevizを使おうぜ!!」

これだけの結果を見せられると、dtreevizを無条件で使いたくなります。
ここまでは、dtreevizのメリットについてでした。

次に、dtreevizのシステム要件を確認します。
その際、dtreevizのデメリットについても見ていきましょう。

dtreevizのシステム要件

dtreevizの最新バージョンは、1.1.4となります。

この最新バージョンは、2021年1月27日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

OSに関しては、特に気にする必要はありません。
気にするべきは、次の3点です。

  • Pythonバージョン
  • Graphviz
  • 環境変数(PATH/Path)

下記でそれぞれを説明します。

Pythonバージョン

PyPI上のdtreevizページ
https://pypi.org/project/dtreeviz/

通常なら、上記ページにサポートするPythonのバージョンが記載されています。
でも、dtreevizの場合はそのような記載がありません。

GitHub上のdtreevizページ
https://github.com/parrt/dtreeviz

GitHub上のページを見た結果、Python 3.6以降と記載あり。

また、setup.py上でも3.6以降と記述があります。
以上より、現状では次のバージョンがサポート対象と考えてよいでしょう。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9

なお、今回検証するのは以下の環境です。

>python -V
Python 3.9.1

Graphviz

dtreevizは、Graphvizを利用しています。
だから、見た目がキレイな決定木を表示できるのです。

そのため、Graphvizのインストールは必須となります。
Graphvizのインストールに関しては、以下で解説しています。

しかし、dtreevizはGraphvizのPython用Wrapperではありません。
では、どうやってdtreevizは Graphvizを利用しているのでしょうか?

なんと、コマンドで呼び出しているのです!!
Graphvizをインストールすると、「dot」コマンドでGraphvizを利用できます。

つまり、Pythonから「dot」コマンドを実行しているということです。

正直、このケースはなかなか見ることができません。
一般的には、同じくGraphvizを利用しているPyGraphvizのようにWrapperとなります。
PyGraphvizについては、以下の記事で解説しています。

一般的なケースは、PyGraphvizのようなWrapperとなることです。
決して、Pythonプログラムからコマンドを実行するという豪快なことはしません。

この部分が、dtreevizのデメリット部分になります。
おそらく、データサイエンスの専門家が開発者だからこのような仕組みなのでしょう。

実際、この仕組みによって、 dtreevizが動かないというトラブルも起こっているみたいです。
Wrapper形式と比較すると、速度的にはどうなのでしょうね?

生粋のプログラマーだと、PyGraphvizと同じようにWrapperの形を採用しているはずです。
ただ、そのためにはC言語のスキルが必要となります。

環境変数(PATH/Path)

上記の「Graphviz」に含めても良かったのですが、あえて別で説明します。

「dot」コマンドをdtreevizは実行すると書きました。
ということは、「dot」コマンドにパスが通っている必要があります。

そのため、dtreevizをプログラムで利用する際にはパスを通しておきましょう。
Windows 10の場合で説明します。

上記に「システム環境変数の編集」を入力。
その結果として、以下の画面が表示されます。

「システム環境変数の編集」を選択。

「環境変数」をクリック。

システム環境変数の「Path」を選択して、「編集」ボタンをクリック。
「Path」に設定済みのパスが出てきます。

「新規」ボタンをクリックすると、最終行が入力可能となります。

そこにGraphvizを「入力したフォルダのパス+bin」を入力します。
上記のケースでは、「C:\soft\Graphviz」をGraphvizのインストール先フォルダに指定しています。

値を入力したら、「OK」ボタンをクリック。
あとは、同じように「OK」を押して「システム環境変数の編集」を閉じます。

パスが通ったかどうかの確認は、以下のコマンドで行います。

>dot -V
dot - graphviz version 2.46.1 (20210213.1702)

上記コマンドが、どこからでも実行できればOKです。

dtreevizのインストール

最初に、現状のインストール済みパッケージを確認しておきます。

>pip list
Package    Version
---------- -------
pip        21.0.1
setuptools 53.1.0

次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip

では、dtreevizのインストールです。
dtreevizのインストールは、以下のコマンドとなります。

pip install dtreeviz

インストールは、結構時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list
Package         Version
--------------- -------
atomicwrites    1.4.0
attrs           20.3.0
colorama        0.4.4
colour          0.1.5
cycler          0.10.0
dtreeviz        1.1.4
graphviz        0.16
iniconfig       1.1.1
joblib          1.0.1
kiwisolver      1.3.1
matplotlib      3.3.4
numpy           1.20.1
packaging       20.9
pandas          1.2.2
Pillow          8.1.1
pip             21.0.1
pluggy          0.13.1
py              1.10.0
pyparsing       2.4.7
pytest          6.2.2
python-dateutil 2.8.1
pytz            2021.1
scikit-learn    0.24.1
scipy           1.6.1
setuptools      54.0.0
six             1.15.0
threadpoolctl   2.1.0
toml            0.10.2

Pythonオールスターズ状態です。
有名どころのパッケージが一気にインストールされています。
そりゃ、インストールに時間がかかるはずです。

利用できるモノはすべて利用しようという意識が垣間見えます。
これには、データサイエンスの専門家という立場が関係しているのかもしれません。
プログラマーは自分で作ってしまおうと思う人種ですからね。

最後に、dtreevizの動作確認を行いましょう。

dtreevizの動作確認

動作確認用のコードは、以下。

from sklearn.datasets import load_iris
from sklearn import tree
from dtreeviz.trees import dtreeviz

clf = tree.DecisionTreeClassifier(max_depth=2)  # limit depth of tree
iris = load_iris()
clf.fit(iris.data, iris.target)

viz = dtreeviz(
    clf,
    iris.data,
    iris.target,
    target_name='variety',
    feature_names=iris.feature_names,
    class_names=[str(i) for i in iris.target_names],
)

viz.save("test.svg")

上記コードを実行すると、次の画像が作成されます。

こんな見た目の決定木を作成できるなんて、スゴイですよね。
正直、「dot」コマンドを利用する仕組みは、個人的にはどうかなと感じます。
でも、この結果を見せられると、そんなことは些細なことに思えてきます。

あと、結果にはSVGが出力されることに注意してください。
基本的には、dtreevizではSVGが出力されるようです。

まあ、SVGなら何にでも変換できるので大した問題ではありませんけどね。
実際、上の画像はSVGからJPGに変換したモノになります。

それでは、本記事は以上で終了とします。

タイトルとURLをコピーしました