アンサンブル学習
アンサンブル学習
https://gyazo.com/2ede320691ca1e48412cf4ab9cdded80
要するに「三人寄れば文殊の知恵」
分類問題では多数決、回帰問題では出力の平均や重み付き平均を取るなどして、最終的な出力を得る
個々のメンバーを弱学習器、弱識別器などと呼ぶ
性能がものすごく高いモデルでなくても、「ランダム出力よりは良い」ものであれば良いという意味で「弱い」学習器と表現される
ただし、汎化能力の高いアンサンブル構築にはメンバーの精度が高いだけではなくメンバーの多様性が必要
後述のブースティングなどはそれを陽に求めようとするアルゴリズムといえる
弱学習器となるモデルに何を使うかは任意
決定木の例が多いが、決定木に限られているわけではない
ただ、決定木は学習データのちょっとした違いに影響され過学習しやすいため、単体の決定木を使うのではなく、アンサンブル手法と組み合わせることが多い
学習コストが高い(学習に時間がかかる)複雑なモデルをひとつ作るよりも、簡単なモデルを複数作るほうが全体のコストが低くなりやすくなるというメリットもある
以下のようにさまざまなアンサンブル手法がある
バギング(bootstrap aggregating)
学習データセットから、ブートストラップ法(復元抽出)によってデータセットを複数個作り、それぞれによって複数の弱学習器を学習する方法
https://gyazo.com/b7b383b27f3354c272274e6a4973af44
図は「はじめてのパターン認識(2012)」より引用
ただしランダムフォレストでは、単にバギングをするだけではなく、「ノード分割の際に、説明変数(特徴量)の部分集合をランダムに選ぶ」というランダムネスも加える
これらのランダムネスにより、なるべく互いに独立な決定木を複数作って、それらの出力を組み合わせて(多数決など)最終的な分類結果を出す、というのがランダムフォレスト
https://gyazo.com/c8093405385045c12c21128f194ff349
図は「はじめてのパターン認識(2012)」より引用
ブースティング(boosting)
学習データセットから、非復元抽出によりサブセットを作り、弱学習器を学習する
これが誤分類したデータを加えた学習データセブセットにより、次の弱学習器を学習する
といった繰り返しにより、誤分類したデータの重みを大きくするようにして学習するアルゴリズム
ブースティングを利用したアルゴリズムに、勾配ブースティング木(XGBoostなど)、Adaboostなど Adaboostのアルゴリズムのイメージ
https://gyazo.com/67200242ec4f890d59128fb224071c1b
図は「はじめてのパターン認識(2012)」より引用
scikit-learnでのアンサンブル学習のライブラリ
scikit-learnでも多くのアンサンブル手法が実装されている