バギングとブースティング、どっちも弱いモデルをたくさん組み合わせるアンサンブル学習やろ?
何が違うんか分からん
【疑問】バギングとブースティング、どっちも木をたくさん作るやつやろ?勾配ブースティングは何を「勾配」してるん【G検定】
前提のおさらい。バギングは、ブートストラップサンプリングで作った別々のデータでモデルを学ばせて、多数決や平均でまとめる。ランダムフォレストはその代表
>>1
一番の違いは順番
バギングは、モデルを互いに関係なく作る。だから並べて同時に学習できる
ブースティングは、1つ前までのモデルが間違えたところを、次のモデルが重点的に直す。前の結果を見てから次を作るから、順番に学習するしかない
>>3
効き方も違う。バギングは、ばらつきの大きいモデル(深い決定木など)を平均して、ばらつき(バリアンス)を減らす
ブースティングは、単純すぎて外しがちなモデル(浅い決定木など)を積み重ねて、外れ(バイアス)を減らす
勾配ブースティングは、次のモデルに「残り」を学ばせる
家の値段(百万円)が 10, 20, 30 の3件で、最初は全部を平均の20と予測する。残差(実際−予測)は −10, 0, 10
次の木はこの残差を当てるように学ぶ。木の予測が −8, 0, 8 やったとして、学習率0.5をかけて足すと
新しい残差は −6, 0, 6 に縮んだ。これをくり返す
>>5
それやと「残差ブースティング」やん。どこが勾配なん?
>>6
誤差を とすると、予測 で微分した値は
つまり残差は、誤差を減らす向き(勾配の逆向き)そのもの。誤差関数を変えれば、その勾配を次の木に学ばせればええ。予測そのものを少しずつ勾配の逆に動かしてるから勾配ブースティング
フリードマンの2001年の論文で、この形にまとめられた
>>5
学習率0.5って、なんで半分しか足さへんの?全部足したほうが早いやん
>>8
1本の木に頼りすぎると、その木のくせまで取りこんで過学習しやすい。少しずつ足して木の本数を増やすほうが、新しいデータでの精度がよくなることが多い
ただ、本数を増やしすぎても過学習するから、検証用のデータで誤差が下がらんくなったところで止める
>>9
表形式のデータ(売上表や顧客台帳みたいなもの)では、勾配ブースティングがいまも強い選択肢。XGBoost や LightGBM はそれを速く計算できるようにしたライブラリ
管理人のひとこと
- バギングはモデルを独立に作って並列に学べ、主にばらつき(バリアンス)を減らす。ブースティングは前のモデルの間違いを次が直す順番の学習で、主に外れ(バイアス)を減らす。
- 勾配ブースティングは残差を次の木に学ばせる。10, 20, 30 を20と予測し、残差 −10, 0, 10 に木の予測 −8, 0, 8 を学習率0.5で足すと、予測は 16, 20, 24、残差は −6, 0, 6。
- 2乗誤差 では で、残差が勾配の逆向きそのもの。フリードマンの2001年の論文でまとめられた。
- 学習率を小さくして本数を増やすと過学習しにくいが、増やしすぎも過学習になるので検証データで止める。