見出し画像

dtreevizによる決定木の可視化

機械学習といえばランダム森だが、それの元になる決定木の可視化で特徴分析をすると性能が上がる。そのための可視化ツールは色々あるが、プロ仕様のはdtreeviz(https://github.com/parrt/dtreeviz)だ。

例として、講義で最初に使用する広告のデータを用いる.これは、テレビ(TV),ラジオ(Radio),新聞(Newspaper)への広告から売り上げ(Sales)を予測する簡単な回帰分析だ.

import pandas as pd     #まずはpandasモジュールを準備する.
#csvファイルからデータ読み込み
data = pd.read_csv('http://logopt.com/data/Advertising.csv', index_col =0) 
data.head()
>>>
TV	Radio	Newspaper	Sales
1	230.1	37.8	69.2	22.1
2	44.5	39.3	45.1	10.4
3	17.2	45.9	69.3	9.3
4	151.5	41.3	58.5	18.5
5	180.8	10.8	58.4	12.9

独立変数(特徴ベクトル)Xは TV, Ratio, Newspaperの列,従属変数
yは Salesの列とする.

X = data[['TV', 'Radio', 'Newspaper']]
y = data['Sales']

Google Colabで行なったので、linux用のインストール

!sudo apt install graphviz
!pip install dtreeviz

Kaggleのときはsudo を外す.

他の環境に対しては、オリジナルのサイトを参照されたい.

scikit learnの決定木で回帰を行う.

from sklearn import tree

reg = tree.DecisionTreeRegressor(max_depth=2) 
reg.fit(X,y)
>>>
DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,
          max_leaf_nodes=None, min_impurity_decrease=0.0,
          min_impurity_split=None, min_samples_leaf=1,
          min_samples_split=2, min_weight_fraction_leaf=0.0,
          presort=False, random_state=None, splitter='best')

dtreevizは決定木インスタンスreg,独立変数(特徴ベクトル)X,従属変数(ターゲット)yの他に,特徴名とターゲット名を与える.

from dtreeviz.trees import dtreeviz
​viz = dtreeviz(
reg,
X,
y,
feature_names = data.columns,
target_name = "Sales"
)
​display(viz)
viz.save("tree1.svg")

Xという引数に,予測したい入力(特徴ベクトル)を入れると,どのように木を辿って予測をしたかを示してくれる.

viz = dtreeviz(
reg,
X,
y,
feature_names = data.columns,
target_name = "Sales",
X = X.iloc[0]
)
​print(y.iloc[0])
display(viz)
viz.save("tree2.svg")


この記事が気に入ったらサポートをしてみませんか?