TL

決定木の分割基準とCART/ID3の内部

決定木のハイパーパラメータ調整やライブラリ選定で迷うのは、分割基準の中身を知らないからです。ジニ・エントロピー・分散減少と剪定の原理を押さえれば、なぜ過学習するか・どう抑えるかが根拠を持って判断できます。

応用決定木CARTID3ジニ不純度エントロピー機械学習最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.決定木は再帰的二分割で成長する。各ノードで全特徴量・全しきい値の候補を試し、子の不純度の加重和が最小(=不純度の減少が最大)になる分割を貪欲に選ぶ。分類はジニ不純度かエントロピー、回帰は分散(二乗誤差)を不純度に使う。
  • 2.ID3 は情報利得で分割するが多値特徴量に偏る。C4.5 はこれを分割情報で割った情報利得比で補正し、欠損値や連続値も扱う。CART は常に二分木で、分類はジニ・回帰は分散減少を使い、scikit-learn の実装基盤でもある。
  • 3.木を伸ばし切ると訓練データに過学習する。CART はコスト複雑度剪定で、葉数にペナルティ alpha を課した評価が悪化しない範囲で部分木を切り戻す。alpha を上げるほど木は小さくなり、交差検証で最適な alpha を選ぶ。

決定木は「再帰的二分割」で育つ

決定木(decision tree) は、特徴量に対する条件分岐を木構造で連ねて予測する教師あり学習モデルです。学習の本質は単純で、データを最もよく分離する1つの分割を選び、できた部分集合に対して同じ手続きを再帰的に繰り返すことにあります。この貪欲(greedy)かつトップダウンな成長を 再帰的二分割(recursive binary splitting) と呼びます。

各ノードでアルゴリズムがやることは、概念的には総当たりです。

全特徴量 j について:
  特徴量 j の取りうるしきい値(分割点)t をすべて試す:
    分割「x_j <= t か否か」で左右の子に分ける
    左右の子の「不純度の加重和」を計算する
最も不純度の加重和が小さい (j, t) を採用する
→ できた左右の子について同じ手続きを再帰

「不純度(impurity)」とは、そのノードに含まれるサンプルのラベルがどれだけ混ざっているかの尺度です。すべて同じクラスなら不純度ゼロ、半々に混ざると最大になります。よい分割とは、分割後の子ノードがそれぞれ「純粋」に近づく分割であり、これを定量化するのが分割基準です。

なぜ貪欲法なのか

全データに対して最適な木を構成する問題はNP困難です。そこで実用の決定木は、各ノードでその場の不純度減少が最大の分割を選ぶ貪欲法を採ります。木全体としての最適性は保証しませんが、計算量が現実的で、後述の剪定と組み合わせれば十分に良い木が得られます。

分類の不純度:ジニとエントロピー

分類木で使う代表的な不純度が ジニ不純度(Gini impurity)エントロピー(entropy) です。ノード内のクラス k の割合を p_k とすると、それぞれ次で定義します。

ジニ不純度:     Gini = 1 - Σ_k (p_k)^2
エントロピー:    H    = - Σ_k p_k · log2(p_k)

どちらも、すべて1クラスなら 0、クラスが均等に混ざるほど大きくなります。2クラスで陽性率を p とすると、ジニは 2p(1-p)、エントロピーは -p·log2(p) - (1-p)·log2(1-p) で、どちらも p = 0.5 で最大、p = 0p = 1 で最小という同じ形の凸関数です。実用上、両者で得られる木はほぼ同じになります。

分割の良し悪しは、親の不純度から子の不純度の加重和を引いた減少量で測ります。エントロピーを使った場合、この減少量が 情報利得(information gain) です。

情報利得 = H(親) - [ (N_L/N)·H(左) + (N_R/N)·H(右) ]
  N    = 親ノードのサンプル数
  N_L, N_R = 左右の子のサンプル数(重み = サンプル割合)

情報利得は情報理論の言葉で言えば「その特徴量を知ることでクラスについての不確実性がどれだけ減るか」、すなわち相互情報量に相当します。ジニ不純度を使う場合も同じ式の H をジニに置き換えるだけで、不純度の加重和が最小になる分割=減少量が最大になる分割を選ぶ点は変わりません。

ジニとエントロピーの実務的な選択

ジニは2乗で済むのに対しエントロピーは対数を含むため、ジニの方がわずかに計算が軽く、scikit-learn の既定も gini です。両者の最大の違いは結果ではなく計算コストで、精度差はほとんどのデータセットで無視できます。迷ったらジニで十分です。

ID3・C4.5・CARTの系譜

決定木のアルゴリズムは大きく3系統あり、分割基準と木の形が異なります。

アルゴリズム分割基準木の形・対応
ID3情報利得(エントロピー減少)多分木。離散特徴量のみ。各特徴量はパスで一度だけ使う
C4.5情報利得比(gain ratio)多分木。連続値・欠損値・後処理剪定に対応した ID3 の改良版
CART分類=ジニ / 回帰=分散減少常に二分木。分類・回帰の両方。コスト複雑度剪定を内蔵

ID3 は情報利得が最大の特徴量で分割します。しかしここに弱点があります。情報利得は取りうる値が多い特徴量を不当に優遇するのです。極端な例として「ID番号」のような全行で異なる特徴量は、各子が1サンプルずつの純粋なノードになり情報利得が最大化されますが、当然まったく汎化しません。

C4.5 はこの偏りを 情報利得比(gain ratio) で補正します。分割そのものが生む情報量(分割情報, split information)で情報利得を割り、値が多い特徴量にペナルティをかけます。

分割情報:  SplitInfo = - Σ_v (N_v/N)·log2(N_v/N)   v は特徴量の各値
情報利得比: GainRatio = 情報利得 / SplitInfo

分割の枝が多いほど SplitInfo が大きくなるので、多値特徴量の見かけ上の利得が割り引かれます。C4.5 はさらに連続値のしきい値分割・欠損値処理・学習後の剪定を備え、ID3 を実用レベルに引き上げた版です。

CART(Classification And Regression Trees) は思想が異なり、常に二分木を作ります。多値・連続を問わずすべての分割を「x_j <= t か否か」という二択に落とすため、ID3 の多値バイアス問題が構造的に起きにくくなります。scikit-learn の DecisionTreeClassifier / DecisionTreeRegressor はこの CART を基盤に実装されており、勾配ブースティング(GBDT)やランダムフォレストの弱学習器もこの二分木です。

回帰木:不純度を「分散」に置き換える

CART の強みは、不純度の定義を差し替えるだけで回帰にも使える点です。回帰木では各ノードの予測値をそこに属するサンプルの平均とし、不純度を**二乗誤差(=分散の N 倍)**で測ります。

ノードの予測:   c = (1/N) Σ y_i             (ノード内の目的変数の平均)
ノードの不純度:  Σ (y_i - c)^2                (二乗誤差 = 分散 × N)

分割の評価: 親の二乗誤差 - [ 左の二乗誤差 + 右の二乗誤差 ]
→ この「分散減少(variance reduction)」が最大の分割を選ぶ

直感的には、分割後の左右で目的変数のばらつきが最も小さくなる切り方を探します。分類のジニ・エントロピーが「クラスの混ざり具合」を測ったのと完全に対応しており、不純度関数を分散に置き換えただけで同じ再帰的二分割の枠組みが回帰に拡張されます。予測時は、入力が落ち着いた葉ノードの平均値(分類なら多数決クラス)を返します。

回帰木は外挿できない

回帰木の予測は葉ごとの定数(平均)なので、出力は訓練データの目的変数の範囲内の階段関数になります。訓練データの範囲外への外挿は構造的にできず、滑らかな関数の近似も苦手です。この区分定数性こそが、単体の回帰木が弱く、ブースティングで多数の木を足す動機になります。

剪定:コスト複雑度で過学習を抑える

木を制限なく伸ばすと、最終的に各葉が1サンプルだけの完全に純粋な木になり、訓練データを丸暗記して過学習します。これを抑えるのが 剪定(pruning) です。CART が採用する コスト複雑度剪定(cost-complexity pruning, 別名 weakest-link pruning) は、木の予測誤差に葉の数へのペナルティを加えた評価量を最小化します。

評価量:  R_alpha(T) = R(T) + alpha · |T|
  R(T)  = 木 T の予測誤差(分類なら誤分類率、回帰なら二乗誤差)
  |T|   = 木 T の葉ノードの数(複雑さ)
  alpha = 複雑さへのペナルティ係数(alpha >= 0)

alpha が 0 なら誤差最小のフルツリーが選ばれ、alpha を上げるほど「葉が多い=複雑な木」が不利になり、木は小さく剪定されます。アルゴリズムは、部分木を1枚の葉に潰したときに R_alpha の増加が最も小さい(=単位ペナルティあたりの誤差増が最小の)枝から順に切り戻し、alpha を増やしながら入れ子になった部分木の列を生成します。この「最も弱いリンク」を切るのが weakest-link の名の由来です。

最終的にどの alpha を採るかは交差検証で決めます。各 alpha に対応する剪定木を検証データで評価し、汎化誤差が最小になる alpha を選びます。scikit-learn では cost_complexity_pruning_pathalpha の候補列を取得し、ccp_alpha に設定して剪定を適用します。

事前剪定と事後剪定

過学習対策には2系統あります。事前剪定(pre-pruning)は成長中に止める方式で、max_depthmin_samples_leafmin_samples_split・不純度減少のしきい値などで早めに分割を打ち切ります。事後剪定(post-pruning, コスト複雑度剪定)は一度フルに育ててから切り戻します。事前剪定は速いが「今は利得が小さいが先で効く分割」を見逃すことがあり、事後剪定はその点に強いぶん計算量が増えます。

決定木が過学習しやすいのは、深い木が高バリアンス(訓練データの小さな変化で構造が大きく変わる)だからです。剪定や深さ制限は木の複雑さを下げてバリアンスを抑える操作であり、その効きはバイアス・バリアンスの観点で整理すると一貫して理解できます。単体の木の高バリアンスを、多数の木の平均(ランダムフォレスト)や逐次補正(ブースティング)で抑えるのがアンサンブル手法の出発点です。

試験・面接で問われる勘所

「ID3 と CART の違いは」と問われたら——ID3 は情報利得で多分木を作り離散特徴量のみ・剪定なし、CART は分類でジニ・回帰で分散減少を使い常に二分木でコスト複雑度剪定を内蔵、と答えます。「情報利得は多値特徴量に偏るので C4.5 が情報利得比で補正」「ジニとエントロピーは結果がほぼ同じで違いは計算コスト」「コスト複雑度剪定は R(T) + alpha·|T| を最小化」がキーワードです。

まとめ

決定木は再帰的二分割で成長し、各ノードで子の不純度の加重和が最小(不純度の減少が最大)になる分割を貪欲に選ぶのが共通原理です。分類はジニ不純度かエントロピー(その減少が情報利得)、回帰は分散(二乗誤差)の減少を不純度に使います。ID3 は情報利得で分割しますが多値特徴量に偏るため、C4.5 が情報利得比で補正し、CART は常に二分木で分類・回帰を統一的に扱います。伸ばし切った木は過学習するので、CART はコスト複雑度剪定 R(T) + alpha·|T| で葉数にペナルティを課し、交差検証で最適な alpha を選んで切り戻します。分割基準と剪定の原理を押さえれば、ハイパーパラメータ調整は当てずっぽうではなく、不純度減少とバリアンス抑制のバランスを動かす意図的な操作になります。

AI/機械学習 Article

決定木の分割基準とCART/ID3の内部を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

決定木

比較で見る軸

難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 6

導入後に効く点

ID3 は情報利得で分割するが多値特徴量に偏る。C4.5 はこれを分割情報で割った情報利得比で補正し、欠損値や連続値も扱う。CART は常に二分木で、分類はジニ・回帰は分散減少を使い、scikit-learn の実装基盤でもある。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
AI/機械学習
タグ数
6

判断チェックリスト

  • 自社の用途が「決定木 / CART」に近いか確認する。
  • 強みである「決定木は再帰的二分割で成長する。各ノードで全特徴量・全しきい値の候補を試し、子の不純度の加重和が最小(=不純度の減少が最大)になる分割を貪欲に選ぶ。分類はジニ不純度かエントロピー、回帰は分散(二乗誤差)を不純度に使う。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

決定木CARTID3ジニ不純度エントロピー決定木CARTID3