ランダムフォレストの定義 — バギングの弱点を「ランダムな特徴量選択」で克服する

木を増やせば増やすほど精度が上がる——はずだった。 しかし、木たちが「みんな似たような構造」になってしまう問題がバギングには存在する。 各分割でm個の変数だけをランダムに使えるようにした、その一点の変更が驚くほど有効だった。

バギングの限界 — なぜ木を増やしても限界があるのか

バギングの目標は「分散を小さくすること」でした。 分散が小さいということは、予測が安定している——同じ問題に対して何度試しても似たような答えが出る——ということです。 信頼できるモデルの条件です。

N個の完全に独立した推定量(各々の分散がσ²)を平均すれば、 分散はσ²/Nになります。独立なら木を増やすほど分散は縮小します。

しかし現実は甘くありません。相関がある場合、話は変わります。

バギングの分散公式を視覚的に分解するアニメーション
赤い項(ρσ²)はBをいくら増やしても消えない。青い項だけがゼロに向かっていく

相関係数ρ(−1〜1の値)を持つB個の推定量の平均の分散は次の式で表されます:

$$\text{Var}\left(\frac{1}{B}\sum_{b=1}^{B} T_b(x)\right) = \rho\sigma^2 + \frac{1-\rho}{B}\sigma^2$$

ここでρは任意の2本の木の間の相関係数、σ²は1本の木の予測分散、Bは木の本数です。

この式の第1項(ρσ²)と 第2項((1-ρ)σ²/B)を見てください。 第2項はBを増やすにつれてゼロに近づきます。 しかし第1項(ρσ²)はBをいくら増やしても消えません

つまり、バギングの限界は「木の数が足りない」ことではなく、木たちの相関が高いことにあります。 相関ρが高いほど、どれだけ木を増やしても改善できる上限が低くなります。

なぜ木たちは「相関」してしまうのか

バギングでは、各ブートストラップサンプル(元データからランダムに復元抽出したサンプル)で決定木を成長させます。 しかし根本的な問題があります。

もし予測に特に強い変数(例えば「年収」)が1つあると、 p個すべての変数から選べる状況では、ほぼすべての木が同じ変数で最初に分割しようとします。 10本の木が全員「年収で最初に分割」すれば、それらの木はほぼ同じ構造になります。

支配的な変数があると全ての木が同じ分割を選ぶアニメーション
支配的なX1があると、全ての木が同じルート変数を選ぶ。木の間の相関係数ρは高いまま残る

相関係数ρは高いまま——第1項ρσ²は大きく残り続けます。

これはちょうど、同じ教科書を読んだ学生10人に同じ試験を解かせるようなもの。 みんな似たような答えを出すので、平均しても精度は大して上がりません。 それぞれ異なる専門知識を持つ10人の方が、集合的な判断として遥かに有効です。

ランダムフォレストの解決策は驚くほどシンプルです——各分割の前に、使える変数をランダムに絞り込むのです。

解決策 — 各分割でm個の変数をランダムに選ぶ

ランダムフォレストのアイデアは明快です。 各ノードを分割するとき、p個の変数すべてから選ぶのではなく、m個の変数をランダムに選んでその中から最良の分割を探すのです。

p個の全変数からランダムにm個を選び最良の分割変数を探すアニメーション
6個の変数のうちランダムに3個(青)が選ばれ、その中から最良変数(黄)でノードを分割する

典型的にはm = √p が使われます(pが変数の総数)。 この値は理論的根拠より実験的に良いとされる経験則です。

なぜこれが効くのか?強い変数X1がランダムに選ばれないこともあるからです。 選ばれなければ他の変数で分割され、木の構造が多様になります。 木たちの相関係数ρが下がり、分散公式の第1項(ρσ²)も小さくなります。

m を小さくする → 木が多様になる → ρ が小さくなる → 分散が小さくなる

mとρのトレードオフ — どこまで絞れるか

mを小さくすると相関ρが下がり分散が減ります。では、mを1にすれば最高でしょうか?

そう単純ではありません。バイアスと分散のトレードオフがあります。

ここで確認:バイアス(偏差)とは「予測の体系的なズレ」、バリアンスとは「予測のばらつき」です。

重要な事実:ランダムフォレストはバイアスを改善しません。 ランダムフォレストの期待値(平均的な予測値)は個々の木と同じです。改善するのは分散だけです。

mの値を変化させたときの相関ρとテストエラー率の関係グラフ
左:mが増えるとρも上昇(赤)。右:最適なmの前後でテストエラー(青)はU字を描く。√pの位置(黄破線)が最適点付近

mとρの関係を整理すると:

mを減らすと木の多様性(相関の低下)は増すが、各木の精度も低下します。 平均の分散はρσ² + (1-ρ)/B × σ²なので、 ρが小さくなっても各木の精度(σ²)が大きくなれば、トータルでは悪化することもあります。

実践的には、m = √p(分類)または m = p/3(回帰)から始めて、クロスバリデーションで調整します。

アルゴリズム全体の流れ

ランダムフォレストの全体像をまとめましょう。バギングと比べると、違いは「各分割時にm個から選ぶ」という一点だけです。 たった1行の変更が、劇的な改善をもたらします。

ランダムフォレストのアルゴリズム全体フロー図
元データ → 3つのブートストラップサンプル → 各々から決定木が成長 → 予測値を集約して最終答えを得る

Algorithm 15.1(ランダムフォレスト)

b = 1からBまで繰り返す:

  1. 訓練データからサイズNのブートストラップサンプル Z* を抽出
  2. Z* に対して決定木を成長させる。各ノードで:
    • p個の変数からm個をランダムに選択
    • m個の中から最良の変数・分割点を選ぶ
    • ノードを2分割
    • 最小ノードサイズ n_min に達するまで継続

B個の木 {T_b(x)} を出力。

予測:

回帰では各木の予測値の平均を計算します:

$$\hat{f}^B(x) = \frac{1}{B}\sum_{b=1}^{B} T_b(x)$$

分類では各木 C_b(x) の多数決でクラスを決定します。

このシンプルさが驚きです。 特徴量をランダムに絞るというだけで、現実の問題で優秀な性能を発揮します。

実際のパフォーマンス — スパムデータでの比較

スパムデータ(p=57変数、N=4601サンプル)での実験結果を見てみましょう。 2500本の木で3つの手法を比較しました。

3手法のテストエラー率を木の本数に対して比較する折れ線グラフ
RFの青い線は急速に下降し、約200本の木で安定する。バギング(オレンジ)より明確に低い水準で収束

4601件のテストデータで0.52%の差は約24件の分類ミスの削減を意味します。 スパムフィルターなら毎日1000通を処理するとして、1日5通余分に正しく分類できる—— 小さいようで現実の影響は積み重なります。

ランダムフォレストは約200本の木で安定しており、それ以上木を増やしても精度はほぼ変化しません (バギングと違い、過学習の心配がほぼない)。

もう一つの魅力はチューニングがほぼ不要なことです。 m = √p で始めれば、多くの場合で良い結果が得られます。 Breimanは「最も強力なブラックボックス機械学習手法の一つ」と評しています。

まとめ — シンプルなランダム性の力

ランダムフォレストが教えてくれることは、機械学習の深い真理の一つです。

バギングとランダムフォレストの対比図
バギング(左):全木が同じX1で分割し、相関が高い。RF(右):変数がバラバラになり、相関が低下する
手法変更点効果
バギングなし(全変数から選択)木の相関ρが高い
ランダムフォレスト各分割でm個に限定木の相関ρが低下

変更点はたった一つ:「全変数から選ぶ」を「m個からランダムに選ぶ」にするだけ。

この小さなランダム性の導入が:

重要な点:ランダムフォレストバイアス(偏差)を改善しません。 改善するのはバリアンスのみです。 バイアスが大きい問題には、別の手法(ブースティングなど)が向いています。

機械学習のエレガントさはこういうところに宿っています—— 「どの変数を使うか分からなければ、ランダムに決めてしまえばいい」。 その単純な発想が、実用的には最強に近い予測器を生み出したのです。

次のチャプター(15.3)では

OOBサンプルによる汎化誤差の推定、変数重要度の計算、過学習との関係など、 より詳細な実装の側面を見ていきます。