知識グラフ全体

決定木(CART)をジニ不純度で育てる

「どの変数を,いくつで区切ると,いちばんきれいに2グループへ分かれるか」を総当たりで探し,良い区切りが見つかるたびに木を1段ずつ育てていく過程を観察できるアプリの,しくみと数式の解説.

対象アプリ:決定木学習


01 - 概要

このアプリで学べること

決定木は,「変数Xが閾値より小さいか,大きいか」という単純なYes/No の質問を繰り返すことで,データをカテゴリ(クラス)ごとに分けていく手法である.このアプリを操作すると,次のことが体感できる.

  • 「どの変数の,どの閾値で区切るのが良いか」を,4つの変数すべてについて機械的に総当たりし,数値(ジニゲイン)で比較して選んでいる様子.
  • 1回の区切り(分割)で,ノードの中身がどれだけ「純粋」(1種類のクラスに近づく)になるかというジニ不純度の変化.
  • 木を深く育てるほど学習データにはよく合うが,必ずしも良いことばかりではないという,決定木ならではの注意点.
  • 自分で用意したデータ(表への入力,またはCSV読み込み)に対して,実際に木がどう育つかを試せること.

02 - モデル化

個体・変数・カテゴリ・ノード

個体 表の1行.4つの変数の値と,1つのカテゴリ(クラス名)を持つ.
変数 個体が持つ数値の項目.このアプリでは4つ固定(名前は自由に変更できる).
カテゴリ 個体が属するクラス(分類先).表に自由な文字列で入力する.
ノード 木の1つの節.そこに割り当てられた個体の集まりを持つ.根(root)から始まり,分割のたびに子ノードへ分かれる.

03 - 数式

ジニ不純度とジニゲイン

あるノードに含まれる個体の中で,カテゴリ c の割合を p c とすると,そのノードの「ジニ不純度」は次の式で表す.1種類のクラスしか含まれていなければ0(最も純粋),クラスが均等に混ざっているほど大きな値になる.

ジニ不純度

Gini = 1 p c 2

ある変数のある閾値でノードを左右に分割したとき,その分割がどれだけ不純度を減らせたかを「ジニゲイン」と呼ぶ.左(left)右(right)の子ノードの不純度を,それぞれの件数の比率で重みづけして平均し,分割前の不純度から差し引く.

ジニゲイン

ゲイン = Gini n left n Gini left + n right n Gini right

このアプリは,ノードが持つデータについて,4つの変数それぞれの最小値〜最大値の間を24等分した点を分割候補の閾値とし,そのすべてでジニゲインを計算する.最もゲインが大きい変数・閾値の組が「最良の分割候補」として選ばれる.

04 - 手順

分割候補の探索とツリーの成長

  1. 根ノード(root)に全データを割り当てる.
  2. 選んだノードについて,4つの変数それぞれで24通りの閾値候補を試し,ジニゲインを計算する.
  3. ゲインが最大となる変数・閾値の組を「最良の分割候補」とする.
  4. 「この分割を適用」を押すと,その閾値で個体を左(閾値未満)・右(閾値以上)に振り分け,2つの子ノードを作る.
  5. 子ノードを選び,深さが3に達するか,ノードが純粋(1種類のクラスのみ)になるまで,手順2〜4を繰り返す.

すべてのノードで自動的に木全体を育てるのではなく,1回ずつ「最良の分割候補を確認してから適用する」という操作になっている点が,このアプリの特徴である.

05 - 図解

分割で不純度が下がる様子

下の図は,8個の個体(青4・オレンジ4,ジニ不純度0.500)を持つノードが,ある変数のある閾値で分割された例である.左の子は青が多く,右の子はオレンジが多くなり,どちらも分割前よりジニ不純度が下がっている.

06 - 観察

観察ポイント

  • 木の図に残る内訳: 分割済みのノードにも,採用した分割条件・件数・ジニゲイン・クラス分布がそのまま表示され続けるので,木全体を見渡すだけで各階層の判断がわかる.
  • 4本のゲイン曲線: ノードを選ぶと,4つの変数それぞれについて「閾値を変えたときのジニゲイン」の曲線が表示される.山になっている場所が良い閾値の候補である.
  • 純粋ノードでの停止: 1種類のクラスしか含まないノード(ジニ不純度0)は,それ以上分割しても意味がないため,自動的に分割対象から外れる.

木を深くしすぎると「過学習」の危険がある.分割を繰り返すほど,そのときの学習データにはよく合う木ができあがる.しかし細かく分けすぎると,たまたまその数件だけに当てはまる特殊な条件を「規則」として覚えてしまい,新しいデータではうまく分類できなくなることがある.このアプリが深さを3までに制限しているのは,この過学習をある程度防ぐための工夫である.

状況 木の育ち方
クラスがはっきり分かれているデータ 少ない分割回数で,ジニゲインの大きい分割が見つかりやすい
クラスが入り組んでいるデータ 1回の分割で得られるゲインが小さく,深さ3まで分割しても純粋にならない葉が残りやすい
ある変数の値が全個体で同じ その変数では分割できない(候補から除外される)

07 - 実験

やってみよう

  1. 「サンプルデータを入力」で3クラスの例を読み込み,「この内容で決定木を開始」を押す.root ノードで4本のゲイン曲線を見比べ,どの変数が最も良い分割になるか確認する.
  2. 「この分割を適用」を1回だけ押し,できた2つの子ノードのクラス分布とジニ不純度を親ノードと比べる.
  3. 子ノードを選び,深さ3に達するかクラスが純粋になるまで分割を続け,最終的な木の形を確認する.
  4. 表のカテゴリの値をわざと1つだけ書き換えて再度学習し,木の形やゲインの値がどう変わるかを観察する.
  5. 自分のCSVデータを読み込み,実際のデータでどのような木が育つかを試す.

08 - 用語

用語ミニ辞典

決定木 Yes/No の質問を繰り返してデータを分類していく,木の形をした分類モデル.
CART 決定木を作る代表的なアルゴリズムの1つ.数値変数の閾値による2分割を繰り返す.
ジニ不純度 ノードの中にクラスがどれだけ混ざっているかを表す指標.0なら純粋,大きいほど混ざっている.
ジニゲイン ある分割によってジニ不純度がどれだけ減ったかを表す値.大きいほど良い分割.
根(root) 木の出発点となる,全データを持つ最初のノード.
葉(leaf) それ以上分割されない末端のノード.多数派のクラスがそのノードの予測結果になる.
過学習 学習データに合わせすぎて,新しいデータへの当てはまりが悪くなること.

 

この記事は 決定木学習アプリ の実装内容にもとづく解説であり,実際にアプリを操作しながら読むことを想定している.

ホーム>>カテゴリー別分類>>データ分析>>決定木(CART)をジニ不純度で育てる

最終更新日:2026年7月17日

[ページトップ]

金沢工業大学

利用規約,誤植や誤りなどがございましたら、こちらからご連絡ください。

google translate (English version)