XGBoost
xgboost也是使用提升树相同的前向分步算法。其区别在于:xgboost通过结构风险极小化来确定下一个决策参数
Θm
Θ^m=argΘmmini=1∑NL(y~i,fm(x
i))+Ω(hm(x
))
其中
Ω(hm)为第m个决策树的正则化项。这是xgboost和GBT的一个重要区别。
L=∑i=1NL(y~i,fm(x
i))+Ω(hm(x
))为目标函数
泰勒展开式
定义:
y^i<m−1>=fm−1(x
i),gi=∂y^i<m−1>∂L(y~i,y^i<m−1>),hi=∂2y^i<m−1>∂2L(y~i,y^i<m−1>)
即:
gi为
L(y~i,y^i<m−1>)在
y^i<m−1>的一阶导数
hi为
L(y~i,y^i<m−1>)在
y^i<m−1>的二阶导数
对目标函数
L执行二阶泰勒展开:
L=i=1∑NL(y~i,fm(x
i))+Ω(hm(x
))=i=1∑NL(y~i,y^i<m−1>+hm(x
i))+Ω(hm(x
))≃i=1∑N[L(y~i,y^i<m−1>)+gihm(x
i)+21hihm2(x
i)]+Ω(hm(x
))+ constant
决策树改写
对一个决策树
hm(x
)假设不考虑复杂的推到过程,仅考虑决策树的效果
给定输入
x
该决策树将该输入经过不断的划分,最终划分到某个叶结点上去。
给定一个叶节点,该叶节点有一个输出值
因此将决策树拆分成结构部分
q(),和叶节点权重部分
w
=(w1,w2,...wT),其中T为叶节点的数量
结构部分
q(x
)的输出是叶节点编号d。它的作用是将输入的
x
映射到编号为d的叶节点
叶节点权重部分就是每个叶节点的值。它的作用是输出编号为d的叶节点的值
wd
因此决策树改写为
hm(x
)=wq(x
)
结构分
定义出具体的正则项
定义一个决策树的复杂度为
Ω(hm(x
))=γT+21λ∑j=1Twj2
其中:T为叶节点的个数,
wj为每个叶节点的输出值,
γ,λ≥0为系数,控制这两个部分的比重。
叶节点越多,则决策树越复杂
每个叶节点输出值的绝对值越大,则决策树越复杂。
L≃i=1∑N[giwq(x
i)+21hiwq(x
i)2]+γT+21λj=1∑Twj2+ constant
对于每个样本
x
i,它必然被划分到树
hm的某个叶节点。定义划分到叶节点j的样本的集合为:
Ij={i∣q(x
i)=j},则有:
L≃j=1∑T⎣⎡⎝⎛i∈Ij∑gi⎠⎞wj+21⎝⎛i∈Ij∑hi+λ⎠⎞wj2⎦⎤+γT+ constant
进一步化简
定义
Gj=∑i∈Ijgi,Hj=∑i∈Ijhi
Gj刻画了隶属于叶节点j的那些样本的一阶偏导数之和
Hj刻画了隶属于叶节点j的那些样本的二阶偏导数之和
L≃j=1∑T⎣⎡⎝⎛i∈Ij∑gi⎠⎞wj+21⎝⎛i∈Ij∑hi+λ⎠⎞wj2⎦⎤+γT+ constant
转化为
L≃j=1∑T[Gjwj+21(Hj+λ)wj2]+γT+ constant
此时如果
wj和T,
GJ,Hj都无关的话,那么损失函数实质上是一个关于
wj的一元二次方程
对于一元二次方程
ax2+bx+c=0当x= -b/2a时去极值,因而有
wj∗=−Hj+λGj
带回原式可得
L∗=−21j=1∑THj+λGj2+γT
上一步的简化,
wj和T,
Gj,Hj都无关,
wj表示树的叶子节点,所以实质是在假设已知树的结构,而事实上损失函数与T是相关的,甚至和树的结构相关,所以定义L*为一种scoring function,来衡量已知树结构情况下目标函数的最小值。