|
|||||||||||||
|
|||||||||||||
|
「どの変数を,いくつで区切ると,いちばんきれいに2グループへ分かれるか」を総当たりで探し,良い区切りが見つかるたびに木を1段ずつ育てていく過程を観察できるアプリの,しくみと数式の解説.
対象アプリ:決定木学習
決定木は,「変数Xが閾値より小さいか,大きいか」という単純なYes/No の質問を繰り返すことで,データをカテゴリ(クラス)ごとに分けていく手法である.このアプリを操作すると,次のことが体感できる.
| 個体 | 表の1行.4つの変数の値と,1つのカテゴリ(クラス名)を持つ. |
| 変数 | 個体が持つ数値の項目.このアプリでは4つ固定(名前は自由に変更できる). |
| カテゴリ | 個体が属するクラス(分類先).表に自由な文字列で入力する. |
| ノード | 木の1つの節.そこに割り当てられた個体の集まりを持つ.根(root)から始まり,分割のたびに子ノードへ分かれる. |
あるノードに含まれる個体の中で,カテゴリ の割合を とすると,そのノードの「ジニ不純度」は次の式で表す.1種類のクラスしか含まれていなければ0(最も純粋),クラスが均等に混ざっているほど大きな値になる.
ジニ不純度
ある変数のある閾値でノードを左右に分割したとき,その分割がどれだけ不純度を減らせたかを「ジニゲイン」と呼ぶ.左(left)右(right)の子ノードの不純度を,それぞれの件数の比率で重みづけして平均し,分割前の不純度から差し引く.
ジニゲイン
ゲイン 親
このアプリは,ノードが持つデータについて,4つの変数それぞれの最小値〜最大値の間を24等分した点を分割候補の閾値とし,そのすべてでジニゲインを計算する.最もゲインが大きい変数・閾値の組が「最良の分割候補」として選ばれる.
すべてのノードで自動的に木全体を育てるのではなく,1回ずつ「最良の分割候補を確認してから適用する」という操作になっている点が,このアプリの特徴である.
下の図は,8個の個体(青4・オレンジ4,ジニ不純度0.500)を持つノードが,ある変数のある閾値で分割された例である.左の子は青が多く,右の子はオレンジが多くなり,どちらも分割前よりジニ不純度が下がっている.
木を深くしすぎると「過学習」の危険がある.分割を繰り返すほど,そのときの学習データにはよく合う木ができあがる.しかし細かく分けすぎると,たまたまその数件だけに当てはまる特殊な条件を「規則」として覚えてしまい,新しいデータではうまく分類できなくなることがある.このアプリが深さを3までに制限しているのは,この過学習をある程度防ぐための工夫である.
| 状況 | 木の育ち方 |
| クラスがはっきり分かれているデータ | 少ない分割回数で,ジニゲインの大きい分割が見つかりやすい |
| クラスが入り組んでいるデータ | 1回の分割で得られるゲインが小さく,深さ3まで分割しても純粋にならない葉が残りやすい |
| ある変数の値が全個体で同じ | その変数では分割できない(候補から除外される) |
| 決定木 | Yes/No の質問を繰り返してデータを分類していく,木の形をした分類モデル. |
| CART | 決定木を作る代表的なアルゴリズムの1つ.数値変数の閾値による2分割を繰り返す. |
| ジニ不純度 | ノードの中にクラスがどれだけ混ざっているかを表す指標.0なら純粋,大きいほど混ざっている. |
| ジニゲイン | ある分割によってジニ不純度がどれだけ減ったかを表す値.大きいほど良い分割. |
| 根(root) | 木の出発点となる,全データを持つ最初のノード. |
| 葉(leaf) | それ以上分割されない末端のノード.多数派のクラスがそのノードの予測結果になる. |
| 過学習 | 学習データに合わせすぎて,新しいデータへの当てはまりが悪くなること. |
この記事は 決定木学習アプリ の実装内容にもとづく解説であり,実際にアプリを操作しながら読むことを想定している.
ホーム>>カテゴリー別分類>>データ分析>>決定木(CART)をジニ不純度で育てる
最終更新日:2026年7月17日