XGBoostを理解する Part 1
XGBoostについて調べたのでメモ.
Boostingは,弱学習器を順番に学習させていく手法であり,XGBoostもその一種である.入力をx∈Rd, 出力をy∈Rとし,以下のモデルを考える.
y^(x)=k=1∑Kfk(x)
fkが弱学習器であり,K個の弱学習器を使って最終的な予測を行うようなモデルになっている.fkにはよく決定木が用いられる.
t個目の弱学習器ftを学習させるにあたり,次のような目的関数を考える.
L(t)=i=1∑nℓ(yi,y^i(t−1)+ft(xi))+Ω(ft)
ここで,ℓは損失関数であり,Ωは正則化項である.
F(y′)=ℓ(y,y′)として,Fを以下のようにy^(t−1)まわりで二次のテイラー展開する.
F(y′)=ℓ(y,y^(t−1))+F′(y^(t−1))(y′−y^(t−1))+21F′′(y^t−1)(y′−y^(t−1))2
これを用いると,L(t)は以下のように近似できる.
L(t)≈i=1∑n[ℓ(y,y^(t−1))+gift(xi)+21hift(xi)2]
ただし,gi=ℓ′(yi,y^i(t−1)),hi=ℓ′′(yi,y^i(t−1))とした.
定数項を除き,Ω(ft)=+γT+21∑j=1Twj2とすると,最終的には以下の目的関数の最小化を目指す.
L~(t)=i=1∑n[gift(xi)+21hift(xi)2]+γT+21j=1∑Twj2=j=1∑T[wjGj+21wj2Hj]+γT+21j=1∑Twj2
ここで,Gj=∑i:q(xi)=jgi,Hj=∑i:q(x)=jhiとした.この最適解は以下を満たす.
wj=−Hj+λGj
これで,重みの学習は終わり.しかしながら,GjやHjを求めるにはq(正確にはqt)を求めなければならない.この続きは次回.