決定木(CART)をジニ不純度で育てる
「どの変数を,いくつで区切ると,いちばんきれいに2グループへ分かれるか」を総当たりで探し,良い区切りが見つかるたびに木を1段ずつ育てていく過程を観察できるアプリのしくみと数式の解説.
01 - 概要
このアプリで学べること
決定木は,「変数Xが閾値より小さいか,大きいか」という単純なYes/No の質問を繰り返すことで,データをカテゴリ(クラス)ごとに分けていく手法である.このアプリを操作すると,次のことが体感できる.
- 「どの変数の,どの閾値で区切るのが良いか」を,4つの変数すべてについて機械的に総当たりし,数値(ジニゲイン)で比較して選んでいる様子.
- 1回の区切り(分割)で,ノードの中身がどれだけ「純粋」(1種類のクラスに近づく)になるかというジニ不純度の変化.
- 木を深く育てるほど学習データにはよく合うが,必ずしも良いことばかりではないという,決定木ならではの注意点.
- 自分で用意したデータ(表への入力,またはCSV読み込み)に対して,実際に木がどう育つかを試せること.
02 - モデル化
個体・変数・カテゴリ・ノード
| 個体 |
表の1行.4つの変数の値と,1つのカテゴリ(クラス名)を持つ. |
| 変数 |
個体が持つ数値の項目.このアプリでは4つ固定(名前は自由に変更できる). |
| カテゴリ |
個体が属するクラス(分類先).表に自由な文字列で入力する. |
| ノード |
木の1つの節.そこに割り当てられた個体の集まりを持つ.根(root)から始まり,分割のたびに子ノードへ分かれる. |
03 - 数式
ジニ不純度とジニゲイン
あるノードに含まれる個体の中で,カテゴリ
の割合を
とすると,そのノードの「ジニ不純度」は次の式で表す.1種類のクラスしか含まれていなければ0(最も純粋),クラスが均等に混ざっているほど大きな値になる.
ある変数のある閾値でノードを左右に分割したとき,その分割がどれだけ不純度を減らせたかを「ジニゲイン」と呼ぶ.左(left)右(right)の子ノードの不純度を,それぞれの件数の比率で重みづけして平均し,分割前の不純度から差し引く.
ジニゲイン
ゲイン
親
このアプリは,ノードが持つデータについて,4つの変数それぞれの最小値~最大値の間を24等分した点を分割候補の閾値とし,そのすべてでジニゲインを計算する.最もゲインが大きい変数・閾値の組が「最良の分割候補」として選ばれる.
ジニーゲインについては次のアプリで学習できる.⇒
04 - 手順
分割候補の探索とツリーの成長
- 根ノード(root)に全データを割り当てる.
- 選んだノードについて,4つの変数それぞれで24通りの閾値候補を試し,ジニゲインを計算する.
- ゲインが最大となる変数・閾値の組を「最良の分割候補」とする.
- 「この分割を適用」を押すと,その閾値で個体を左(閾値未満)・右(閾値以上)に振り分け,2つの子ノードを作る.
- 子ノードを選び,深さが3に達するか,ノードが純粋(1種類のクラスのみ)になるまで,手順2~4を繰り返す.
すべてのノードで自動的に木全体を育てるのではなく,1回ずつ「最良の分割候補を確認してから適用する」という操作になっている点が,このアプリの特徴である.
05 - 図解
分割で不純度が下がる様子
下の図は,8個の個体(青4・オレンジ4,ジニ不純度0.500)を持つノードが,ある変数のある閾値で分割された例である.左の子は青が多く,右の子はオレンジが多くなり,どちらも分割前よりジニ不純度が下がっている.
分割前は青とオレンジが混ざっていた(不純度0.500)が、分割後はどちらの子ノードも一方の色が多くなり不純度が0.375に下がっている。このときのジニゲインは 0.500 − 0.375 = 0.125 である。
06 - 観察
観察ポイント
- 木の図に残る内訳: 分割済みのノードにも,採用した分割条件・件数・ジニゲイン・クラス分布がそのまま表示され続けるので,木全体を見渡すだけで各階層の判断がわかる.
- 4本のゲイン曲線: ノードを選ぶと,4つの変数それぞれについて「閾値を変えたときのジニゲイン」の曲線が表示される.山になっている場所が良い閾値の候補である.
- 純粋ノードでの停止: 1種類のクラスしか含まないノード(ジニ不純度0)は,それ以上分割しても意味がないため,自動的に分割対象から外れる.
木を深くしすぎると「過学習」の危険がある.分割を繰り返すほど,そのときの学習データにはよく合う木ができあがる.しかし細かく分けすぎると,たまたまその数件だけに当てはまる特殊な条件を「規則」として覚えてしまい,新しいデータではうまく分類できなくなることがある.このアプリが深さを3までに制限しているのは,この過学習をある程度防ぐための工夫である.
| 状況 |
木の育ち方 |
| クラスがはっきり分かれているデータ |
少ない分割回数で,ジニゲインの大きい分割が見つかりやすい |
| クラスが入り組んでいるデータ |
1回の分割で得られるゲインが小さく,深さ3まで分割しても純粋にならない葉が残りやすい |
| ある変数の値が全個体で同じ |
その変数では分割できない(候補から除外される) |
07 - 実験
やってみよう
- 「サンプルデータを入力」で3クラスの例を読み込み,「この内容で決定木を開始」を押す.root ノードで4本のゲイン曲線を見比べ,どの変数が最も良い分割になるか確認する.
- 「この分割を適用」を1回だけ押し,できた2つの子ノードのクラス分布とジニ不純度を親ノードと比べる.
- 子ノードを選び,深さ3に達するかクラスが純粋になるまで分割を続け,最終的な木の形を確認する.
- 表のカテゴリの値をわざと1つだけ書き換えて再度学習し,木の形やゲインの値がどう変わるかを観察する.
- 自分のCSVデータを読み込み,実際のデータでどのような木が育つかを試す.
08 - 用語
用語ミニ辞典
| 決定木 |
Yes/No の質問を繰り返してデータを分類していく,木の形をした分類モデル. |
| CART |
決定木を作る代表的なアルゴリズムの1つ.数値変数の閾値による2分割を繰り返す. |
| ジニ不純度 |
ノードの中にクラスがどれだけ混ざっているかを表す指標.0なら純粋,大きいほど混ざっている. |
| ジニゲイン |
ある分割によってジニ不純度がどれだけ減ったかを表す値.大きいほど良い分割. |
| 根(root) |
木の出発点となる,全データを持つ最初のノード. |
| 葉(leaf) |
それ以上分割されない末端のノード.多数派のクラスがそのノードの予測結果になる. |
| 過学習 |
学習データに合わせすぎて,新しいデータへの当てはまりが悪くなること.
|
ホーム>>カテゴリー別分類>>データ分析>>決定木(CART)をジニ不純度で育てる
最終更新日:2026年9月22日