決定木とランダムフォレスト — 質問を重ねて分け、森で束ねる
「x は 0.5 より大きい?」— そんな単純な質問の連鎖が、データ空間を長方形に切り分けていきます。木が1段育つと空間が1回切れるこの対応を動かして確かめ、1本の木の弱点(過学習)を森の多数決がどう克服するかまでを見ていきます。
1. 「はい/いいえ」の連鎖 — 決定木とは
決定木は、if (x < 0.52) { … } else { … } のような質問の入れ子でデータを仕分けるモデルです。プログラマにとっては最も読みやすい機械学習モデルと言えます。
幾何学的に見ると、質問1つ=軸に平行な直線で空間を2つに切ること。木にノードが1つ増えるたび、対応する領域が1回分割されます。下のデモで、左の空間分割と右の木が同時に育つ様子を確かめてください。
空間分割と木の成長 — 1分割ずつ追いかける
左=データ空間(青とオレンジの2クラス、20点)、右=対応する決定木。白い線が最新の分割、点線の丸が「次に分割される葉」。各分割はジニ不純度の減少(情報利得)が最大になる位置を貪欲に選んでいます。深さ制限を4に上げると、ノイズ点の周りに小さな「専用部屋」ができる=過学習の芽が見えます。
POINT — 決定木 = 空間の再帰的分割
葉ノード1枚 = 軸に平行な長方形領域1つ。予測はその領域内の多数決。だから決定木の境界は必ずカクカクした階段状になる。
2. 「良い質問」の選び方 — ジニ不純度
木は各ステップで「どの位置で切るのが一番良いか」をすべての候補について試し、貪欲に最良の1つを選びます。その「良さ」を測るものさしがジニ不純度 — 領域の中でクラスがどれだけ混ざっているかの指標です。
Gini(S) = 1 − Σk pk2
pk = 領域 S 内でクラス k が占める割合。2クラスなら 0(完全に純粋)〜 0.5(半々=最悪)
分割の良さは情報利得 = 分割前のジニ − 分割後の左右の重み付き平均ジニ。下のデモで分割線を左右にスライドさせ、利得が最大になる位置を探してみてください。
不純度の直感 — 分割線を動かしてジニの変化を見る
白い線=あなたの分割、緑の点線=計算上の最良位置。線を動かすと左右のジニ不純度と重み付き平均がバーで変わります。重なり領域のせいで不純度は0にできませんが、それでも「一番マシな位置」が明確に存在します。
POINT — 貪欲法で育つ
木はその場その場で最良の分割を選ぶだけで、全体として最適な木になる保証はない。それでも計算が速く実用上は十分よく働く。これが CART アルゴリズムの基本設計。
3. 切れ味の代償 — 決定木は過学習しやすい
深さを制限しなければ、決定木は訓練データを完全に暗記するまで切り続けられます。たった1つのノイズ点のために専用の小部屋を作ってしまう — 最初のデモで深さ制限を最大にすると、その様子が観察できます。
さらに厄介なのは不安定さです。データが少し変わるだけで最初の分割位置が変わり、そこから先の木全体がガラッと入れ替わります。つまり1本の木は分散が大きいモデルなのです。
注意 — 深い木は「暗記マシン」
訓練データでの正解率100%は簡単に達成できるが、それは汎化とは別物。深さ・葉の最小サンプル数などで刈り込む(剪定する)か、次に見る「森」で分散そのものを打ち消す。
4. 森で束ねる — ランダムフォレスト
不安定なら、たくさんの木を育てて多数決すればいい。ただし全員が同じ木では意味がないので、わざと木ごとに違いを作ります。
- バギング:各木には元データから復元抽出(ブートストラップ)したデータを与える。
- 特徴量ランダム性:分割のたびに使える特徴量をランダムに制限し、木同士の相関を下げる。
- 多数決(平均):各木のデタラメな切りすぎは互いに打ち消し合い、共通する本質だけが残る。
森の多数決 — 木を増やすと境界が滑らかになる
左=全データで育てた1本の深い木(過学習した境界)、右=ブートストラップした木を重ねた森。色の濃さ=票の割合で、各木の境界を薄く重ねたものに相当します。本数を1→25に増やすと、ギザギザの「暗記境界」が滑らかな境界に平均化されていきます。
Var森 ≈ ρσ2 + (1−ρ)σ2/B
B = 木の本数、σ² = 1本の木の分散、ρ = 木同士の相関。B を増やすと第2項は消えるが第1項は残る — だから特徴量ランダム性で ρ を下げる工夫が効く
一歩先へ — ブースティングという別の束ね方
ランダムフォレストは木を並列に育てて平均するが、勾配ブースティング(XGBoost / LightGBM)は前の木の誤りを直すように木を直列に足していく。表形式データのコンペではいまだにこの「木の集団」が最強クラス。並列=頑健で調整が楽、直列=高精度だが過学習に注意、と覚えておこう。
5. まとめ
- 決定木:軸平行な分割の再帰= if-then の入れ子。読みやすく、前処理(スケーリング)も不要。
- ジニ不純度:混ざり具合のものさし。情報利得が最大の分割を貪欲に選ぶ。
- 弱点:深くすると暗記し、データの揺れに弱い(高分散)。
- ランダムフォレスト:ブートストラップ+特徴量ランダム性で「違う木」を量産し、多数決で分散を打ち消す。