アンサンブル学習のブースティングとバギングの違いについて

どっちがどっちで何しているんだっけ?

ブースティングとバギングの区別がようやくつくようになってきた(気がする)がさらにそれぞれのアルゴリズムになるとまだ混乱する。というわけで、今のところの自分の認識を書いてみる。

アンサンブル学習とは

アンサンブル学習とはようするに「1回で決めるよりたくさんやって平均取った方がいいんじゃね?」というアプローチということであると理解している。たしかにその方がより正しそうな結論がでそうだし、異常値などに引っ張られることも少なくなったりするだろうと想像はつく。細かいやり方は違うけどやっていることは至極自然な発想。

バギング

1つの方法として、データ全てを使うのではなくその一部を使って学習し、それを何度も繰り返して最後に合わせる方法が考えられる。それがバギングである。

ランダムフォレスト

バギングの1つの方法。学習に決定木を使うのでこの名前らしい。抽出の際に説明変数もランダムに抜き出し、決定木を作る際に剪定を行わない。どれぐらいの説明変数を抜き出すかは説明変数の数pに対して「分類ではpの平方根、回帰の場合は3分のpをランダムフォレストの提案者は推奨」と『統計的学習の基礎』にあるが、経験的にそうなるのか、あるいは証明が存在するが割愛したのか理由は不明。

ブースティング

データの一部を抽出してそれで弱学習機を作り、最後に合わせるのはバギングと同様。違いは前回の結果を利用するのがブースティング。なので並列処理はできない。

アダブースト

前回の結果で誤分類された値の重みを大きくするように更新する。ブースティングと単に言えばこれを指すことが多いらしい。

マダブースト・ロジットブースト

アダブーストの損失関数が違うバージョンみたい。『イラストで学ぶ機会学習』に出ていたが他では見た記憶がない。

勾配ブースティング

勾配降下法を使ったブースティングのこと。正直なところアダブーストとの違いがいまいちよくわからない。

GBDT(Gradient Boosting Decision Tree)

弱学習機に決定木を使った勾配ブースティングのこと。かっこよく聞こえる。

LightGBM

もっと早くてすごいらしい。もう何がなんだか…

で、結局どれを使えばいいいの?

この手の「手法がいろいろ紹介されるけれどもどれを使えばいいのかは示されない」というパターンに漏れず、アンサンブル学習も同様にどれを使えばいいのかよくわからない。が、教師なし学習と違って評価できるのが救いでやれるだけやって一番いいのを選べばよさそう。と考えると、いずれは計算はDataRobotみたいのに任せるのが主流になり、専門家はアルゴリズムの開発の方にシフトしていくのかも。

あとは手を動かす

さしあたり何がなんだかさっぱりわからないので言葉だけまとめてはみたものの、もちろんこれだけでは何も解決するわけもなく、実際に使えるようになるためにはいまのところ自分でパラメータを変えたり説明変数を追加や削除してみたりと自分で手を動かして試行錯誤が必要で、アルゴリズムの数式を理解するよりもそちらの方に時間を割くことの方が重要であり、これで何かを知った気になったりしないように気を付けよう。

分析

Posted by 管理人