0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

決定木の基礎と数学的背景

Last updated at Posted at 2025-09-13

決定木の基礎

はじめに

決定木は分類や回帰のために広く用いられるモデルである。データを特徴量に基づいて再帰的に分割し、木構造を構築することで予測を行う。シンプルで可視化が容易である点が特徴である。機械学習においては、教師あり学習の非線形モデルに該当する。本稿では、分類木を中心に解説する。回帰木の場合、エントロピーではなく分散を指標にして不純度を減らすだけの違いとなる。

1. 決定木の基本構造

決定木は入力空間を条件分岐によって分割し、それぞれの領域を葉ノードに対応させる。分類問題においては各葉ノードが特定のクラスに対応し、回帰問題においては各葉ノードが数値予測値に対応する。

ある$d$次元のサンプル $\mathbf{x} \in \mathbb{R}^d$ に対し、決定木は以下のように予測を行う。写像の形なので非常にシンプルな式であり、要は予測値は特徴量をうまくわけることで生成される。

\hat{y} = f(\mathbf{x}; \theta) ※θは各ノードで情報利得を最大化

ここで $\theta$ は木の構造(分割特徴量、しきい値、葉ノードの値)を表すパラメータである。
なお、ここでのセミコロンは「数式上の慣習的な区切り」であり、引数(入力変数)とパラメータ(モデルを決める値)を区別するために使った。


2. 不純度の定義

決定木の分割は、各ノードの「純粋さ」を最大化するように設計される。この純粋さの尺度が不純度である。代表的な不純度指標にはジニ不純度とエントロピーがある。

2.1 ジニ不純度

ジニ不純度は次の式で定義される。

\text{Gini}(t) = 1 - \sum_{k=1}^{K} p_{k}^2

ここで $p_k$ はノード $t$ におけるクラス $k$ の出現確率である。ジニ不純度は「ランダムにサンプルを一つ選んだときに誤分類される確率」に対応する直感的な指標である。


2.2 エントロピー

エントロピーは情報理論に基づく不確実性の尺度である。

S(t) = - \sum_{k=1}^{K} p_{k} \log_2 p_{k}

値が大きいほどクラスが混在しており、情報の不確実性が高いことを意味する。

ここでエントロピーの式の解釈をしたい。結論から言うと、自己情報量$log_2 p_{k}$(ある事象から得られる“驚き”の大きさ)の期待値である。解釈のためにまず、$1bit$で表すことができる状態を考える。$1bit(0または1)$で表すことができる状態は$2$通りである。$n$ $bit$の場合、$2^n$通りの状態を表すことができる。これをビット数$I$と状態$W$を数式で紐づけると

W=2^I⇔I=log_2W

となる。また、サイコロの出目のように、各状態$W$の確率は等確率であり$P$とすると、$W=1/P$であるため、

I=log_2\frac{1}{P}=-log_2P

となる。この$I$を自己情報量と呼ぶ。起こりにくい事象ほど大きな情報量が必要という理解で良い。自己情報量は各事象(サイコロで言えば、特定の目1が出る局所的な事象)に対する量であり、確率分布全体を代表するものではない。そこで、確率分布全体に対してどう表現すればよいだろうか。結論から言うと、上式の情報エントロピー$S$で表すことができる。

自己情報量と情報エントロピーの違い:「ただの平均」ではなぜダメなのか?

2.2.1 「ただ平均」と「期待値」の違い

情報エントロピーは「自己情報量の平均」であるが、平均の取り方には注意が必要である。

  • 誤りやすい考え方
    全ての事象の自己情報量を等しく平均する。
  \frac{1}{K}\sum_{i=1}^K I(x_i)
  • 正しい定義
    各事象の発生確率を重みとして平均を取る(期待値)。
  H(X) = \sum_i P(x_i) \, I(x_i) = -\sum_i P(x_i)\log P(x_i)

2.2.2 具体例:くじ引き

「当たり 1%、ハズレ 99%」のくじを考えると、なぜただの平均ではなく、期待値をとるべきか明確になる。

  • 当たりの自己情報量
  I(\text{当たり}) = -\log(0.01) \approx 6.64
  • ハズレの自己情報量
  I(\text{ハズレ}) = -\log(0.99) \approx 0.014

**(1)ただ平均した場合

\frac{6.64 + 0.014}{2} \approx 3.33

これではまるで「毎回 3.33 ビットの情報が得られる」と言っていることになるが、実際にはほとんどハズレばかりなので直感に反する。

**(2)確率で重み付けした場合(正しいエントロピー)

H = 0.01 \times 6.64 + 0.99 \times 0.014 \approx 0.080

実際には 1 回の試行から得られる平均情報量はごく小さい。したがって、期待値の形式が現実をよく反映している。

2.3 不純度まとめ

  • 自己情報量は ある事象から得られる“驚き”の大きさ を表す。
  • 情報エントロピーは 自己情報量を確率で重み付けした期待値 である。
  • 単純平均では全ての事象が等確率であると仮定してしまい、現実の確率分布を反映できない。

したがって情報エントロピーは、分布全体の不確実性を測る正しい指標となる。


3. 情報利得(Information Gain)とは何か?

3.1. 決定木と不純度

決定木は「データをできるだけ純粋に分ける」アルゴリズムである。
その純粋さがどれだけ上がったかの指標として 情報利得 が使われる。
決定木は「情報利得が最大になる分割」を選んでノードを成長させていく。

3.2. 情報利得の定義

あるノード $(t)$ を特徴量 $(X_j)$ で分割したとき、
親ノードの不純度と子ノードの不純度を比較し、改善度を次のように定義する:

Gain(t, X_j) = 不純度(t) - \Bigg( \frac{N_L}{N_t} 不純度(t_L) + \frac{N_R}{N_t} 不純度(t_R) \Bigg)
  • $(不純度(t))$:親ノードの不純度
  • $(不純度(t_L), 不純度(t_R))$:子ノードの不純度
  • $(N_t)$:親ノードのサンプル数
  • $(N_L, N_R)$:子ノードのサンプル数

3.3. なぜ重み付き平均なのか?

なぜ上式の子ノードの不純度に$N_L/N_t$と$N_R/N_t$という係数をかけるか分かりにくい。
もし重みをつけなければ、極端なケースで誤解が生じる。

例:親ノードに100サンプルがあり、分割すると

  • 左ノード:99サンプル(不純度 = 0.5)
  • 右ノード:1サンプル(不純度 = 0.0)

単純平均すると

\frac{0.5 + 0.0}{2} = 0.25

となり、「良い分割」に見えてしまう。

しかし実際には 99 サンプルがまだバラバラであるため、改善はほとんどない。

重み付き平均を使うと:

\frac{99}{100}\times 0.5 + \frac{1}{100}\times 0.0 = 0.495

となり、「改善がほとんど無い」ことを正しく反映できる。


3.4. 数値例

親ノードの不純度が 0.5 のとき、分割後に次のようなノードができたとする:

  • 左ノード(4サンプル):不純度 = 0.0
  • 右ノード(6サンプル):不純度 = 0.3

すると情報利得は

Gain = 0.5 - \Big( \frac{4}{10}\times 0.0 + \frac{6}{10}\times 0.3 \Big)
= 0.5 - 0.18 = 0.32

この分割によって不純度が 0.32 だけ減少したことを意味する。

3.5. 結局情報利得とは?

  • 情報利得 = 分割前の不純度 − 分割後の不純度の重み付き平均
  • 値が大きいほど「その特徴量で分割するとデータをきれいにできた」ことを意味する

実装する際のコードはGithubで公開済。
https://github.com/med-chem/decision-tree-sample-code-for-my-learning

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?