決定木(Decision Tree)| 機械学習
決定木の学習の仕組み まとめ
1. 決定木とは
データを木構造で分岐させながら分類・予測を行うアルゴリズム。 質問に「はい/いいえ」で答えながら枝分かれしていく、フローチャートのようなイメージ。
2. 学習の基本ステップ
- 根(ルート)からスタート:全データが混ざった状態
- 最良の分岐を探す:全ての特徴量・全ての閾値の組み合わせを試し、「不純度が最も下がる条件」を選ぶ
- データを分割:選んだ条件で左右(またはそれ以上)のノードに分ける
- 再帰的に繰り返す:各子ノードに対して同じ処理を行う
- 停止条件で打ち切る:最大深さ、最小サンプル数、これ以上改善しない等
- 葉(リーフ)で予測値を確定:多数派クラス(分類)や平均値(回帰)
➡ 各分岐は貪欲法(その場で最良のものを選ぶ、後戻りしない)で決まる。 → 全体最適ではなく局所最適の積み重ねなので、過学習しやすい(→ランダムフォレストで補う)。
3. 「混ざり具合(不純度)」を測る指標
ジニ不純度
\(Gini = 1 - \sum_i p_i^2\)
- ランダムに2つデータを取り出したとき、クラスが違う確率のイメージ
- 0 = 完全に純粋、大きいほど混ざっている
エントロピー(2クラスの場合)
\(H(p) = -p\log_2(p) - (1-p)\log_2(1-p)\)
- 情報理論由来。Giniとほぼ同じ挙動だが計算コストがやや高い
- scikit-learnのデフォルトはGini
4. 分岐の選び方(情報利得)
分岐の良さは「親ノードの不純度」と「分割後の子ノードの不純度」の差で評価する。
\[情報利得 = 不純度(親) - \left(\frac{n_{左}}{n}\cdot不純度(左) + \frac{n_{右}}{n}\cdot不純度(右)\right)\]- 子ノードの不純度はサンプル数で加重平均する(単純平均ではない)
- 理由:少人数のノードだけを都合よく綺麗に分離しても、全体としては意味が薄いため
- この情報利得(または不純度の減少量)が最大になる特徴量と閾値を、その時点での最良の分岐として選ぶ
5. pの変化について
- 親ノードの承認割合 $p$ と、分岐後の子ノードの $p_{左}$、$p_{右}$ は基本的に異なる
- 決定木は「特定の目標pになるように」選んでいるのではなく、 「$p_{左}$、$p_{右}$ ができるだけ0か1に近づく(=不純度が下がる)ような特徴量と閾値」を探している
- 結果として、良い分岐ほど $p_{左}$、$p_{右}$ は両極端な値になる傾向がある
6. 全体像(与信審査の例)
根:承認/却下が混在(不純度 高)
│
├─ 年収400万以上? ─ はい → 勤続3年以上? ─ はい → 承認 ✅
│ └ いいえ → 借入額は年収30%以下? …
└─ いいえ → 延滞歴あり? ─ あり → 却下 ❌
└ なし → 借入額は年収20%以下? …
木を降りるごとに、承認寄り・却下寄りのグループへと徐々に純粋化していく。