決定木分析とPythonでの実装例について解説!
決定木分析の特徴と、そのメリットとデメリットをご紹介します!
決定木とは?
決定木(Decision Tree)とは、データ解析や機械学習において広く使用される、木構造を持つモデルです。回帰と分類の双方に使うことができます。
決定木は、根ノードから始まり、分岐ノードを経て葉ノードに至ります。根ノードは最も重要な特徴を表し、分岐ノードはデータの分割を示し、葉ノードは最終的な予測値(分類問題では予測クラス)を示します。分割は、入力データの特徴量に基づいた2択の質問によって行われます。(例:身長がXcmよりも大きいか否か)
以下、irisデータセットの分類を行うコードとその出力結果になります。
決定木での分析は、tree.DecisionTreeClassifier() で行うことができます。
from sklearn.datasets import load_iris
from sklearn import tree
import matplotlib.pyplot as plt
iris = load_iris()
X, y = iris.data, iris.target
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, y)
tree.plot_tree(clf)
決定木のメリット
- 直感的で理解しやすい
木を出力すると、データのパターンや意思決定のプロセスを可視化できます。ブラックボックスと言われるディープラーニングを使ったモデルなどと比較して、決定木はモデルはホワイトボックスなモデルと言われます。
- 前処理があまり必要ない
回帰分析の多くのモデルでは、データが正規分布に従うことを仮定しています。そのため、得られたデータが正規分布に従うように標準化や対数変換といった前処理を行う必要があります。一方、決定木分析では、正規分布を仮定しておらず、Yes /Noで値を分類していくため、前述のような前処理をする必要がありません。また、欠損値であるか否かを分岐に含めることができるので、欠損値の処理も必要ではありません。
決定木のデメリット
- 過学習が起こりやすい
分岐の数を増やしすぎると、学習用のデータに適合しすぎてしまいます。これを防ぐために、剪定(せんてい)という木の深さを制限する操作を施します。
決定木の応用
決定木の応用として、機械学習のコンペティションなどでよく用いられるランダムフォレストがあります。ランダムフォレストは決定木をたくさん用意してそれぞれ予測を行い、多数決のような形で予測の結果が出力されます。決定「木」をたくさん用いるので、ランダム「フォレスト」と言う名称となっています。