ENSEMBLE LAB

弱学習器を積み上げる

1本では精度の低い「決定株」を1つずつ足していきます。バギングとブースティングを並べて、境界と精度がどう育つか見比べてください。

学習器の数0
1本だけのときの精度
今の差(ブースト − バギング)

バギング(並列)

まだ学習器がありません。

ブースティング(逐次)

まだ学習器がありません。
バギング ブースティング 決定株1本だけ

弱学習器は決定株(深さ1の決定木)です。1本では「ある軸のある値より大きいか」しか判定できません。

2つの積み上げ方

バギングブースティング
学習の順序並列(互いに独立)逐次(前の結果を使う)
各学習器が見るデータブートストラップ標本(復元抽出)全データ。ただし重みが違う
重みの更新なし間違えた点の重みを上げる
最終予測単純な多数決精度に応じた重み付き多数決
主に抑えるものバリアンス(ばらつき)バイアス(当てはまりの悪さ)
並列実行できる(速い)できない(順番が必要)
過学習しにくいやりすぎるとする
代表例ランダムフォレストAdaBoost、XGBoost、LightGBM

なぜ弱い学習器で足りるのか

決定株は1本では「縦か横の線1本で分ける」ことしかできません。精度は5割強から7割程度です。 しかしそれぞれが少しずつ違う間違いをするなら、多数決で誤りが打ち消し合います。 重要なのは各学習器が強いことではなく、間違え方が互いに違うことです。 全員が同じ間違いをするなら、何本集めても改善しません。

バギングはブートストラップ標本で学習させることで、この「違い」を人工的に作ります。 ランダムフォレストはさらに、各分割で使う特徴量もランダムに絞ることで、木同士をより似ないようにしています。

ブースティングの仕組み

ブースティングは前の学習器の間違いに集中します。 1本目が間違えた点の重みを上げ、2本目はその点を優先的に正解しようとします。 これを繰り返すことで、難しい領域が段階的に埋まっていきます。

α = ½ · ln( (1 − 誤り率) / 誤り率 )

AdaBoostでは、各学習器の投票の重み α を上の式で決めます。 誤り率が小さい学習器ほど、大きな発言権を得ます。 誤り率が0.5(でたらめ)なら α = 0 で無視され、 0.5を超える(当てるより外すほうが多い)なら α が負になり、答えを反転して使われます。

右のパネルで、点の大きさが重みを表しています。 学習器を追加していくと、境界付近の点だけが大きくなっていくのが見えます。 そこが「難しい点」だからです。

やりすぎると過学習する

ブースティングは学習器を増やすほど訓練データへの当てはまりが良くなり続けます。 ノイズのある点まで無理に正解しようとするため、いずれ汎化性能が落ちます。 実務ではEarly Stoppingで本数を打ち切り、学習率(各学習器の寄与を小さくする係数)で 1本あたりの影響を抑えます。 バギングにはこの問題がほとんどなく、本数を増やしても悪化しにくいという違いがあります。

詳しい解説を見る

アンサンブル学習:弱い予測器を束ねて強くする

単体で高性能なモデルを作るのは難しい。ならばそこそこの予測器を大量に作って多数決させればよい—— これがアンサンブル学習の発想です。 直感的には、専門家1人の意見より委員会の合議のほうが安定する、という話に近い。 ただし委員会が機能するには条件があります。 全員が同じ経歴で同じ考え方をしていたら、合議の意味がありません。 各予測器が互いに違う間違いをすること(多様性)が本質的な要件です。

バギングがバリアンスを下げる理由

決定木は、訓練データが少し変わるだけで構造が大きく変わる不安定な手法です。 これはバリアンスが高いということです。 バギングでは、元データから復元抽出でB個の標本を作り、それぞれで木を学習し、平均(または多数決)を取ります。 独立な予測をB個平均すると、分散は理論上 1/B に縮みます。 実際には各木が完全に独立ではないため、そこまでは下がりませんが、それでも大きな改善になります。 元の手法が不安定であるほど、バギングの効果は大きくなります。 逆に線形回帰のような安定した手法に使っても、ほとんど改善しません。

ブースティングがバイアスを下げる理由

決定株のように単純すぎる(=バイアスの高い)モデルは、 どれだけ平均しても表現力そのものは上がりません。 ブースティングは平均ではなく、残った誤りを次の学習器が埋めるという積み上げをします。 これによって、単純なモデルの和として複雑な境界を構成できます。 この考え方を一般化したのが勾配ブースティングで、 「損失関数の勾配方向に新しい学習器を足していく」と定式化されます。 XGBoostやLightGBMがこの系統で、表形式データでは今も最強クラスの手法です。

スタッキングという3つ目

バギング・ブースティングに加えてスタッキングがあります。 種類の違うモデル(ロジスティック回帰、決定木、SVM、ニューラルネットなど)を並列に学習させ、 その予測値を入力として、さらに別のモデルに最終判断を学習させる方法です。 多数決の重みを人が決める代わりに、メタモデルに学習させると言い換えられます。 Kaggleのようなコンペティションで上位解法に頻出しますが、 構成が複雑で計算コストも高いため、実務では割に合わないことも多くあります。

実務とのつながり

表形式データなら、まず勾配ブースティング(LightGBM)を試すのが定石です。 精度が高く、前処理が少なく、欠損値もそのまま扱えます。 解釈が必要な場面ではランダムフォレストの特徴量重要度が使えますが、 重要度は「よく使われた」ことしか示さず、因果を意味しません。 そこを踏み越えた説明をしないよう注意してください。

つまずいたとき

「並列か逐次か」で覚えてください。 バギングは全員が同時に、別々のデータを見て学ぶ。 ブースティングは前の人の失敗を見てから、次の人が学ぶ。 この違いから、並列実行できるかどうか、何を抑えるのかが自動的に導けます。