← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:決定木(束ねる部品) | 土台:汎化と過学習・バイアスバリアンス分解

要点(BLUF)

1. アンサンブルとは

アンサンブル(ensemble)は「合奏団」の意味で、複数のモデルを協調させて1つの予測を作る手法の総称です。個々のモデルを 弱学習器(weak learner)/基学習器(base learner) と呼びます。「弱い」とは、単体では精度がそこそこ(場合によってはランダムよりわずかに良い程度)という意味です。

flowchart LR
    Data["訓練データ"] --> M1["弱学習器 1"]
    Data --> M2["弱学習器 2"]
    Data --> M3["弱学習器 3"]
    Data --> Mdots["…"]
    Data --> MM["弱学習器 M"]
    M1 --> Agg["集約(多数決 / 平均)"]
    M2 --> Agg
    M3 --> Agg
    Mdots --> Agg
    MM --> Agg
    Agg --> Pred["最終予測"]

直感的には「1人の専門家より、多少クセのある複数人の合議のほうが当たる」という話です。ただしただ束ねれば良いわけではありません。後で見るように、効果が出るには「メンバーがそれぞれ違う間違い方をする(多様性がある)」ことが不可欠です。同じ間違いをする人を100人集めても合議の意味がありません。

要するに:アンサンブルは「弱い部品を束ねて強い予測器を作る」枠組みで、効くかどうかは部品どうしの誤りが相関していないかにかかっています。

2. なぜ束ねると効くのか(その1:多数決の数理)

まず分類を考えます。「誤り率がそこそこ低い判定器を多数決すると、全体の誤り率はさらに下がる」ことが、コンドルセの陪審定理(Condorcet’s jury theorem, 1785) で保証されます。もとは投票の理論ですが、機械学習のアンサンブルにそのまま当てはまります。

設定と主張

MM 個(MM は奇数とします)の二値判定器があり、それぞれが

とします。最終判定は単純多数決。このとき多数決が正しい確率 PmajP_{\text{maj}} は、過半数 M/2\lceil M/2 \rceil 人以上が正解する確率なので、二項分布で

Pmaj=k=M/2M(Mk)pk(1p)MkP_{\text{maj}} = \sum_{k=\lceil M/2 \rceil}^{M} \binom{M}{k} p^{k}(1-p)^{M-k}

と書けます。コンドルセの定理が言うのは次の2点です。

要するに:個々が「ランダムよりほんの少しでも良い(p>0.5p>0.5)」なら、多数決で限りなく正解に近づけます。これがブースティングで「ランダムよりわずかに良いだけの弱学習器」を束ねて強くできる理論的根拠です。逆に p<0.5p<0.5 の学習器を素直に多数決するのは有害です。

数値で見る

正解率 p=0.6p=0.6(ランダムよりわずかに良い)の判定器を多数決したときの全体の正解率は、MM を増やすとはっきり上がります。

xychart-beta
    title "多数決の正解率(個々の正解率 p=0.6)"
    x-axis "判定器の数 M" [1, 5, 11, 21, 51, 101]
    y-axis "多数決の正解率" 0.5 --> 1.0
    line [0.60, 0.68, 0.75, 0.83, 0.93, 0.98]

p=0.6p=0.6 の単体が、101個束ねると正解率 0.98 まで上がります。ただしこれは「独立」という強い仮定の下の話です。現実の学習器は同じデータから作るので誤りが相関し、ここまで理想的には上がりません(だから次節の脱相関が鍵になります)。

flowchart TB
    P{"個々の正解率 p"}
    P -->|"p > 0.5(competent)"| Up["M を増やすと正解率 → 1<br/>束ねるほど良くなる"]
    P -->|"p = 0.5(ランダム)"| Flat["束ねても 0.5 のまま<br/>情報がない"]
    P -->|"p < 0.5"| Down["M を増やすと正解率 → 0<br/>束ねると悪化"]

3. なぜ束ねると効くのか(その2:平均によるバリアンス低減)

次に回帰(あるいは確率の平均) を考えます。こちらは 汎化と過学習・バイアスバリアンス分解バリアンスに直接効きます。結論を先に書くと、予測を平均すると、それぞれが相関していない分だけバリアンスが下がる、です。

独立な場合:1/M に下がる

MM 個の予測 f1,,fMf_1,\dots,f_M があり、それぞれ同じバリアンス σ2\sigma^2 を持つとします。これらを単純平均した予測 fˉ=1Mm=1Mfm\bar f = \frac{1}{M}\sum_{m=1}^{M} f_m のバリアンスを考えます。

まず各予測が互いに独立なら、分散の加法性(独立なら和の分散=分散の和)から

Var(fˉ)=1M2m=1MVar(fm)=1M2Mσ2=σ2M\mathrm{Var}(\bar f) = \frac{1}{M^2}\sum_{m=1}^{M}\mathrm{Var}(f_m) = \frac{1}{M^2}\cdot M\sigma^2 = \frac{\sigma^2}{M}

要するに:独立な予測を MM 個平均すると、バリアンスは 1/M1/Mまで下がります。10個平均すれば 1/10。バイアス(平均が真値からどれだけずれるか)は平均しても変わらないので、バイアスはそのまま、バリアンスだけ削れるわけです。

現実:相関があると下げ止まる

ところが現実の学習器は同じ訓練データから作るので、予測どうしは正の相関を持ちます。各ペアの相関係数を ρ\rho0ρ10\le\rho\le 1、共通のバリアンスは σ2\sigma^2)とすると、平均のバリアンスは次のようになります。

Var(fˉ)=ρσ2+1ρMσ2\mathrm{Var}(\bar f) = \rho\,\sigma^2 + \frac{1-\rho}{M}\,\sigma^2

導出は分散の展開から出ます。Var(fˉ)=1M2[mVar(fm)+ijCov(fi,fj)]\mathrm{Var}(\bar f)=\frac{1}{M^2}\big[\sum_m \mathrm{Var}(f_m) + \sum_{i\ne j}\mathrm{Cov}(f_i,f_j)\big] で、対角項が MM 個の σ2\sigma^2、非対角項が M(M1)M(M-1) 個の Cov=ρσ2\mathrm{Cov}=\rho\sigma^2。よって

Var(fˉ)=1M2[Mσ2+M(M1)ρσ2]=σ2M+M1Mρσ2\mathrm{Var}(\bar f)=\frac{1}{M^2}\Big[M\sigma^2 + M(M-1)\rho\sigma^2\Big]=\frac{\sigma^2}{M}+\frac{M-1}{M}\rho\sigma^2

これを整理すると上式(ρσ2+1ρMσ2\rho\sigma^2 + \frac{1-\rho}{M}\sigma^2)に一致します。

ここで MM\to\infty の極限を取ると、第2項は消えて

Var(fˉ)   M   ρσ2\mathrm{Var}(\bar f)\ \xrightarrow{\;M\to\infty\;}\ \rho\,\sigma^2

要するに:いくら学習器を増やしても、バリアンスは ρσ2\rho\sigma^2下げ止まる。第1項 ρσ2\rho\sigma^2MM に依存しないからです。MM を増やして消せるのは「平均できる部分(第2項)」だけで、相関 ρ\rho そのものが下限を決めます

xychart-beta
    title "平均後のバリアンス(σ²=1, 相関 ρ 別)"
    x-axis "学習器の数 M" [1, 2, 5, 10, 20, 50, 100]
    y-axis "Var(平均予測)" 0 --> 1.0
    line [1.0, 0.55, 0.28, 0.19, 0.145, 0.118, 0.109]
    line [1.0, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01]

上の線が ρ=0.1\rho=0.1(下限 0.1 で頭打ち)、下の線が ρ=0\rho=0(独立なので 1/M1/M でゼロへ)。相関が残ると、いくら木を増やしても 0.1 より下げられないことが見て取れます。

だから「脱相関」が鍵

この式が、アンサンブル設計の最重要メッセージを与えます。

graph TB
    Goal["平均後バリアンスを下げたい"]
    Goal --> A["M を増やす<br/>(第2項を削る)"]
    Goal --> B["ρ を下げる = 脱相関<br/>(第1項の下限を下げる)"]
    A --> A1["頭打ちあり<br/>ρσ² より下げられない"]
    B --> B1["下限そのものを引き下げる<br/>本質的に効く"]

ランダムフォレストが「ブートストラップ標本」だけでなく特徴のランダム部分集合まで使って木をバラけさせるのは、まさにこの ρ\rho を下げるためです(バギングとランダムフォレスト)。

4. 多様性(diversity)こそ源泉

ここまでの2つの数理は同じことを別の角度から言っています。

視点効果の源泉同じ誤りをすると
多数決(コンドルセ)判定が独立であること過半数が同時に誤り、多数決が外す
平均(バリアンス低減)相関 ρ\rho小さいこと第1項 ρσ2\rho\sigma^2 が大きく、下げ止まる

どちらも結論は 「メンバーの誤りが相関していないこと(多様性, diversity)」が効果を生む、です。逆に言えば、まったく同じ学習器をコピーして束ねても無意味ρ=1\rho=1 なら Var(fˉ)=σ2\mathrm{Var}(\bar f)=\sigma^2 で単体と同じ)。多様性を作る代表的な仕掛けは次のとおりです。

graph LR
    Div["多様性を作る仕掛け"]
    Div --> D1["データを変える<br/>(ブートストラップ標本)"]
    Div --> D2["特徴を変える<br/>(ランダム部分集合)"]
    Div --> D3["モデル種類を変える<br/>(スタッキング)"]
    Div --> D4["重みを変えて順に作る<br/>(ブースティング)"]

ただし多様性と個々の精度はトレードオフになりがちです。バラけさせすぎると個々の学習器が弱くなりすぎ、束ねても精度が出ません。「個々がそこそこ正確で、かつ互いに違う誤りをする」バランスが理想です。なお、この「多様性」を分散・相関の言葉でどこまで厳密に分解できるかは長く研究テーマで、近年は統一的な分解理論も提案されています(A Unified Theory of Diversity in Ensemble Learning, JMLR 2023)。

要するに:アンサンブルの効き目は「束ねる数」より「束ねる相手がどれだけ違う間違いをするか」で決まります。

5. 二本柱:バギング系とブースティング系

束ね方には大きく2つの系統があり、汎化と過学習・バイアスバリアンス分解 のどちら側を削るかで対照的です。

graph TB
    Ens["アンサンブルの束ね方"]
    Ens --> Bag["バギング系(並列)"]
    Ens --> Boost["ブースティング系(逐次)"]
    Bag --> BagA["低バイアス・高バリアンスな<br/>強い学習器を独立に学習"]
    BagA --> BagB["平均/多数決で<br/>バリアンスを下げる"]
    Boost --> BoostA["高バイアスな<br/>弱い学習器を順番に学習"]
    BoostA --> BoostB["前の誤りを次が補正し<br/>バイアスを下げる"]

バギング系(並列・バリアンスを下げる)

ブースティング系(逐次・バイアスを下げる)

観点バギング系ブースティング系
学習の順序並列(独立)逐次(前の結果に依存)
部品の性質低バイアス・高バリアンス高バイアス(弱い)
主に削るものバリアンスバイアス
過学習しにくい(増やしても安全)しやすい(反復数の調整が要る)
並列化容易難しい(逐次のため)

要するに:同じ「アンサンブル」でも、バギングは暴れる学習器を平均でなだめ、ブースティングは鈍い学習器を重ねて鋭くする。バイアス-バリアンス分解のどちら側を攻めているかで覚えるのが一番すっきりします。

⚠️ よくある誤解

対応するシミュレーション

simulations/ensemble_decorrelation.py:(1) 相関 ρ\rho をもつ MM 個の予測を平均したときのバリアンス ρσ2+1ρMσ2\rho\sigma^2+\frac{1-\rho}{M}\sigma^2MM に対して描き、ρ\rho が小さい(脱相関した)ほど低い下限まで下げられることを、(2) 各自が確率 pp で正しい独立な投票者の多数決の正解率が p>0.5p>0.5 なら人数とともに1へ近づく(コンドルセの陪審定理)ことを可視化します。

平均のバリアンス低減と多数決(コンドルセ)

関連ノート