ENSEMBLE LAB
弱学習器を積み上げる
1本では精度の低い「決定株」を1つずつ足していきます。バギングとブースティングを並べて、境界と精度がどう育つか見比べてください。
- 弱学習器を組み合わせる意味を説明できる
- バギングとブースティングの違いを説明できる
- 並列学習と逐次学習の差を説明できる
バギング(並列)
–ブースティング(逐次)
–弱学習器は決定株(深さ1の決定木)です。1本では「ある軸のある値より大きいか」しか判定できません。
2つの積み上げ方
| バギング | ブースティング | |
|---|---|---|
| 学習の順序 | 並列(互いに独立) | 逐次(前の結果を使う) |
| 各学習器が見るデータ | ブートストラップ標本(復元抽出) | 全データ。ただし重みが違う |
| 重みの更新 | なし | 間違えた点の重みを上げる |
| 最終予測 | 単純な多数決 | 精度に応じた重み付き多数決 |
| 主に抑えるもの | バリアンス(ばらつき) | バイアス(当てはまりの悪さ) |
| 並列実行 | できる(速い) | できない(順番が必要) |
| 過学習 | しにくい | やりすぎるとする |
| 代表例 | ランダムフォレスト | AdaBoost、XGBoost、LightGBM |
なぜ弱い学習器で足りるのか
決定株は1本では「縦か横の線1本で分ける」ことしかできません。精度は5割強から7割程度です。 しかしそれぞれが少しずつ違う間違いをするなら、多数決で誤りが打ち消し合います。 重要なのは各学習器が強いことではなく、間違え方が互いに違うことです。 全員が同じ間違いをするなら、何本集めても改善しません。
バギングはブートストラップ標本で学習させることで、この「違い」を人工的に作ります。 ランダムフォレストはさらに、各分割で使う特徴量もランダムに絞ることで、木同士をより似ないようにしています。
本数を増やしていくと、ブースティングだけが大きく伸び、バギングはほとんど伸びません。 これは弱学習器が決定株だからです。決定株は単純すぎてバイアスが高く、しかも安定しているため、 バリアンスを抑えるバギングには縮める余地がありません。 バギングが本領を発揮するのは、深い決定木のように不安定でバリアンスの高い手法を束ねるときです。 ランダムフォレストが「深い木」を使うのは、まさにそのためです。
ブースティングの仕組み
ブースティングは前の学習器の間違いに集中します。 1本目が間違えた点の重みを上げ、2本目はその点を優先的に正解しようとします。 これを繰り返すことで、難しい領域が段階的に埋まっていきます。
AdaBoostでは、各学習器の投票の重み α を上の式で決めます。 誤り率が小さい学習器ほど、大きな発言権を得ます。 誤り率が0.5(でたらめ)なら α = 0 で無視され、 0.5を超える(当てるより外すほうが多い)なら α が負になり、答えを反転して使われます。
右のパネルで、点の大きさが重みを表しています。 学習器を追加していくと、境界付近の点だけが大きくなっていくのが見えます。 そこが「難しい点」だからです。
やりすぎると過学習する
ブースティングは学習器を増やすほど訓練データへの当てはまりが良くなり続けます。 ノイズのある点まで無理に正解しようとするため、いずれ汎化性能が落ちます。 実務ではEarly Stoppingで本数を打ち切り、学習率(各学習器の寄与を小さくする係数)で 1本あたりの影響を抑えます。 バギングにはこの問題がほとんどなく、本数を増やしても悪化しにくいという違いがあります。
詳しい解説を見る
アンサンブル学習:弱い予測器を束ねて強くする
単体で高性能なモデルを作るのは難しい。ならばそこそこの予測器を大量に作って多数決させればよい—— これがアンサンブル学習の発想です。 直感的には、専門家1人の意見より委員会の合議のほうが安定する、という話に近い。 ただし委員会が機能するには条件があります。 全員が同じ経歴で同じ考え方をしていたら、合議の意味がありません。 各予測器が互いに違う間違いをすること(多様性)が本質的な要件です。
バギングがバリアンスを下げる理由
決定木は、訓練データが少し変わるだけで構造が大きく変わる不安定な手法です。 これはバリアンスが高いということです。 バギングでは、元データから復元抽出でB個の標本を作り、それぞれで木を学習し、平均(または多数決)を取ります。 独立な予測をB個平均すると、分散は理論上 1/B に縮みます。 実際には各木が完全に独立ではないため、そこまでは下がりませんが、それでも大きな改善になります。 元の手法が不安定であるほど、バギングの効果は大きくなります。 逆に線形回帰のような安定した手法に使っても、ほとんど改善しません。
ブースティングがバイアスを下げる理由
決定株のように単純すぎる(=バイアスの高い)モデルは、 どれだけ平均しても表現力そのものは上がりません。 ブースティングは平均ではなく、残った誤りを次の学習器が埋めるという積み上げをします。 これによって、単純なモデルの和として複雑な境界を構成できます。 この考え方を一般化したのが勾配ブースティングで、 「損失関数の勾配方向に新しい学習器を足していく」と定式化されます。 XGBoostやLightGBMがこの系統で、表形式データでは今も最強クラスの手法です。
スタッキングという3つ目
バギング・ブースティングに加えてスタッキングがあります。 種類の違うモデル(ロジスティック回帰、決定木、SVM、ニューラルネットなど)を並列に学習させ、 その予測値を入力として、さらに別のモデルに最終判断を学習させる方法です。 多数決の重みを人が決める代わりに、メタモデルに学習させると言い換えられます。 Kaggleのようなコンペティションで上位解法に頻出しますが、 構成が複雑で計算コストも高いため、実務では割に合わないことも多くあります。
実務とのつながり
表形式データなら、まず勾配ブースティング(LightGBM)を試すのが定石です。 精度が高く、前処理が少なく、欠損値もそのまま扱えます。 解釈が必要な場面ではランダムフォレストの特徴量重要度が使えますが、 重要度は「よく使われた」ことしか示さず、因果を意味しません。 そこを踏み越えた説明をしないよう注意してください。
つまずいたとき
「並列か逐次か」で覚えてください。 バギングは全員が同時に、別々のデータを見て学ぶ。 ブースティングは前の人の失敗を見てから、次の人が学ぶ。 この違いから、並列実行できるかどうか、何を抑えるのかが自動的に導けます。