はじめに
今回は「決定木」を扱います。 決定木は結果の可読性が高いため非常に有用です。 機械学習に対する理解があまり得られていない職場でも、データを活用した施策の合意が得られやすいため、数あるアルゴリズムの中で決定木が選ばれることもあります。
決定木とは
決定木は、条件によってグループを分割していき、分析をおこなう手法です。その際に、グループがなるべく同じような属性で構成されるように分割するのがポイントです。
条件分岐を繰り返すことで、ツリー上になります。これが木に見えるので、決定木と呼ばれます。また、木を構成している要素をノードと呼びます。
決定木では、分割後のグループの不純度という指標が、一番小さくなるような基準を選び、分割していきます。
Pythonと実データで遊んで学ぶデータ分析講座(C&R研究所)
決定木による分類
# ライブラリのインポート
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# データの読み込み
iris=load_iris()
X,y=iris.data,iris.target
# データの分割
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)
# インスタンスの作成
clf=DecisionTreeClassifier(max_depth=3)
# 学習
clf.fit(X_train,y_train)
# 予測
y_pred=clf.predict(X_test)
# 評価
print(accuracy_score(y_test,y_pred))
![](https://happy-analysis.com/wp-content/uploads/2020/05/image-10.png)
データ分割がランダムに行われるため、評価結果は必ずしも一致しません。※このコードを複数回試すと、評価結果が変わることで確認できます。
決定木の可視化
今度はこの決定木による分類を可視化してみましょう。可視化にはgraphvizとdtreezが必要です。
Graphviz自体はPythonパッケージではないので、別途、インストールが必要となります。以下を参考にしてインストールしました。
http://ruby.kyoto-wu.ac.jp/info-com/Softwares/Graphviz
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9V2luZG93cyUyMCVFMyU4MSVBNyUyMGdyYXBodml6JTIwJUUzJTgxJUFFJUU1JUIwJThFJUU1JTg1JUE1JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz0xYTI5ZGU1ZDg4ZTJhNzhjYjlhYjFkZTU2YzBkYmE1Yw&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBuYXRzdXJpdmVyJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz00ZjczMDMwNGY0ZTY5NWNjMWNlZDE2NWY0NmMxNmIxYw&blend-x=142&blend-y=486&blend-mode=normal&s=4bfdc6d7d3cc0f274497ab22846cb864)
Windows で graphviz の導入 - Qiita
Dot 言語でグラフを作図するプログラム Graphviz は anaconda + pip で導入できた一貫した説明が見当たらなかったので、ここにメモしておく。Windows 10 x64, …
では、可視化をしていきましょう。
# ライブラリのインポート
from dtreeviz.trees import dtreeviz
viz=dtreeviz(clf,X,y,
feature_names=iris.feature_names,
target_name='種類',
class_names=list(iris.target_names),
)
display(viz)
viz.save('tree.svg')
![](https://happy-analysis.com/wp-content/uploads/2020/05/image-12.png)
このように分類の様子が可視化されるとわかりやすいですね。冒頭に記載した、結果の可読性が高く合意が得られやすいというのは、このように具体的に説明できる、という意味です。
まとめ
いかがでしょうか?前回は可視化のまとめでmatplotlibとseabornを扱いましたが、今回は一風変わった可視化を扱いました。確かに解釈しやすいので決定木は便利ですよね。
コメント