決定木とは
Decision Tree
データの特徴量に対する条件分岐を木構造として繰り返し、分類・回帰を予測する機械学習モデル
ひとことで言うと
条件分岐を繰り返しながら答えを絞り込んでいく、木の形をしたAIモデル。
概要
決定木とは、「ある特徴量がある値より大きいか」といった条件分岐を木構造として繰り返し適用し、最終的に葉ノードで分類・回帰の予測値を出力する機械学習モデル。 各内部ノードでは、分類の場合はジニ不純度や情報利得、回帰の場合は分散の減少量などの指標に基づき、データを最もよく分割する特徴量と閾値が選ばれる。 木構造そのものが人間にとって読み解きやすく、判断根拠を条件分岐の経路として説明できる点が特徴。 単体の決定木は学習データの細部に適合しすぎる過学習を起こしやすく、これを緩和するためランダムフォレストや勾配ブースティングのようなアンサンブル学習の基礎モデルとしてもよく使われる。
背景
データを扱うモデルの中には、内部の計算過程がブラックボックス化し、判断根拠を理解しにくいものが多い。 決定木は、条件分岐という人間が直感的に理解できる形式で予測ルールを表現するために発展した。
歴史
1963年: MorganとSonquistが決定木の初期の手法であるAID(Automatic Interaction Detection)を提案。 1984年: Breimanらが、分類・回帰の両方に対応するCART(Classification and Regression Trees)を発表。 1986年: Quinlanが情報利得に基づき木を構築するID3アルゴリズムを発表。
アーキテクチャ
根ノードから始まり、各内部ノードで1つの特徴量に対する条件(閾値との大小比較等)によりデータを2つ以上の子ノードへ振り分ける。 分岐の良し悪しは、分類ではジニ不純度や情報利得、回帰では分散の減少量といった指標で評価され、これを最大化する特徴量と閾値が各ノードで選ばれる。 木が深くなりすぎるのを防ぐため、最大深さや葉に必要な最小サンプル数を制限する、または学習後に不要な枝を剪定(プルーニング)することがある。
ワークフロー
学習データ全体をルートノードに置く → 分割指標(ジニ不純度・情報利得等)が最良となる特徴量と閾値を探す → 条件に従いデータを子ノードへ分割 → 停止条件(最大深さ・最小サンプル数等)を満たすまで再帰的に繰り返す → 予測時は根から葉まで条件分岐をたどり、葉ノードの値を出力する。
コード例
scikit-learnで決定木を学習する
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = DecisionTreeClassifier(max_depth=3)
model.fit(X_train, y_train)
print(model.score(X_test, y_test))利点
- 条件分岐の経路として判断根拠を説明でき、モデルの解釈性が高い
- 特徴量のスケーリングなど前処理の必要性が比較的低い
- 数値データとカテゴリデータの両方を扱いやすい
欠点
- 木を深くしすぎると学習データに過剰適合しやすく、汎化性能が低下する
- 学習データのわずかな変化だけで木の構造が大きく変わってしまう不安定さを抱える
- 分割が軸に平行な条件の繰り返しになるため、斜めの決定境界を表現しにくい
比較
関連用語
よくある質問
決定木の深さはどう決める?
深さを制限しないと学習データに過剰適合しやすいため、検証データでの性能を見ながらmax_depth等のハイパーパラメータで制限することが多い。