機械学習で高い精度を達成するには様々な方法がありますよね。モデル側で精度を上げるには大きく分けると以下の2つの方法があります。
- 単一のモデルで高い精度を目指す
- 複数のモデルを組み合わせて高い精度を目指す
本記事では2つ目のアプローチである複数のモデルを組み合わせて強いモデルを作るアンサンブル学習について解説していきましょう。
アンサンブル学習とは
アンサンブル学習は複数の機械学習モデルを組み合わせて多数決的に予測を行う手法のことです。「三人寄れば文殊の知恵」という言葉のように、モデルを複数組み合わせた予測は単一のモデルの予測よりも精度が高いことが多いです。これにはノーフリーランチ定理が少なからず関与しています。
ノーフリーランチ定理
ノーフリーランチ定理とはなんでしょうか。ノーフリーランチ定理とは平たく言えばあらゆる問題に対していい性能を示すアルゴリズムが存在しないということを示しています。
アンサンブル学習の種類
アンサンブル学習には大きく分けると以下の3種類のアルゴリズムがあります。
- Bagging(バギング)
- Boosting(ブースティング)
バギング
バギングはBootstrap AGGregatINGに由来する命名で、学習データのブートストラップサンプルを利用して複数個の弱識別器の学習を行い、予測時にはそれら弱識別器の多数決で推論を行う手法です。弱識別器には決定木モデルがよく利用されます。
ブースティングとの大きな違いとして、ブートストラップサンプルを用いた学習を行うため、学習を並列に行うことができます。
しかしバギングではブートストラップサンプルのばらつきのみで弱識別器のばらつきが変化するため、弱識別器の相関が大きくなりやすいという問題を避けられません。
各弱識別器の相関が大きい場合はモデルに多様性が生じずに、アンサンブル学習をする効果がほとんど見込めなくなってしまします。それだけでなくアンサンブル学習では複数の弱識別器を利用して学習を行なっていることから、計算量がアンサンブル学習でないモデルよりも大きいにもかかわらず、性能が弱識別器単体とほとんど変わらない状態に陥ります。
この問題を解決したのがバギングの改良手法であるランダムフォレストや、次に説明するブースティングアルゴリズムでKaggle経験者なら必ず目にしている手法と言えるでしょう。
ブースティング
ブースティングとは複数の弱識別器を直列に学習し、学習された全てのモデルを用いて予測を行うアルゴリズムのことを指します。ブースティングの代表的なアルゴリズムにはAdaBoostがあり、このモデルでは直前の弱識別器がうまく予測できなかったものを次の弱識別器で優先的にフィットするように学習を進めます。そして各モデルの性能に応じて重みをつけ、各識別器の重み付きの平均で推論を行います。
ブースティングは直前の弱識別器の結果を元に次の弱識別器を構築していくため、学習が並列に行えないという問題があります。しかし学習データに対する重みが各モデルで異なるため、バギングと比較して一般的に多様性のある弱識別器を構築することが可能というメリットは注目すべきでしょう。
現在のKaggleなどのデータサイエンス系のコンペティションで流行しているXGBoostやLightGBMなどの手法は勾配ブースティングと呼ばれるアンサンブルアルゴリズムです。この勾配ブースティングはブースティングから派生したモデルで、勾配降下法を利用して学習を進めることから勾配ブースティングと呼ばれています。
まとめ
アンサンブル学習について重要な点をまとめましょう。
- 複数の識別器の予測結果を用いてひとつの予測とする手法
- 大きく分けるとバギングとブースティングという2つの手法がある
- バギングを改良した手法がブースティングとランダムフォレスト
- ブースティングを改良した手法が勾配ブースティング