はじめに
決定木・ランダムフォレストのツリー構造の可視化ツールはいろいろある。
色々調べてみるとバオバブの木を逆さにしたようにツリー構造を可視化できるツールが
良さそうだったので、記事を書いてみることにした
pybaobabdtとは
下記を参照するとどうやら分類問題のツリー構造の可視化に適用できるようだ。
(回帰問題にも適用できるかは試してません)
詳細は下記をご参照ください。
ツリー構造を下図のように可視化してくれるため、
視覚的にも非常に分かりやすいと感じました。
環境構築&インストール
# pybaobabdtのインストール
pip install pybaobabdt
#pygraphvizのインストール
apt install libgraphviz-dev
pip install pygraphviz
datasetsの準備
試しに使用したデータセットは下記の通り
実践
import pybaobabdt
import pandas as pd
from scipy.io import arff
from sklearn.tree import DecisionTreeClassifier
data = arff.loadarff("vehicle.arff")
df = pd.DataFrame(data[0])
#データの確認
df
バン・バスなどの車種(Class)で分類してみる。
y = list(df['Class'])
features = list(df.columns)
features.remove('Class')
X = df.loc[:, features]
clf = DecisionTreeClassifier().fit(X,y)
そして、
深さ3層で可視化した場合
ax = pybaobabdt.drawTree(clf, size=30, dpi=72, features=features,maxdepth=3)
さらに深さ10層までを可視化すると
ax = pybaobabdt.drawTree(clf, size=30, dpi=72, features=features,maxdepth=10)
このように深さをだんだん大きくしながら可視化していくと解釈がしやすい
別の問題で実践
分類問題でお馴染みのアヤメのデータセットで試してみます!
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris=load_iris()
X=iris.data
y=iris.target
from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier()
dtc.fit(X,y)
ax = pybaobabdt.drawTree(dtc, size=10, dpi=72, features=features,maxdepth=10)
一瞬で下図のようにアヤメの分類が
視覚的に分かりやすく表現されました!
最後に
分類問題の可視化で分かりやすい手段の一つだと思います。
また、どういう分岐構造なのかを視覚的に示しやすく、説明もしやすく思います。
私も今後ドンドン活用していこうと思いました!
以上 最後までお読み頂きありがとうございました