XGBoost算法原理
XGBoost(eXtreme Gradient Boosting)是GBDT的一种改进形式,具有很好的性能,在各大比赛中大放异彩。
1 XGBoost的算法原理
经过k轮迭代后,GBDT/GBRT的损失函数可写成$L(y,f_k(\boldsymbol{x}))$,将$f_k(\boldsymbol{x})$视为变量,对$L(y,f_k(\boldsymbol{x}))$在$f_{k-1}(\boldsymbol{x})$进行二阶泰勒展开:
取$g=\frac{\partial L(y,f_{k-1}(\boldsymbol{x}))}{\partial f_{k-1}(\boldsymbol{x})},h=\frac{\partial ^2L(y,f_{k-1}(\boldsymbol{x}))}{\partial f_{k-1}^2(\boldsymbol{x})} $,代入上式,得到:
在GBDT中,利用前向分布算法,有$f_k(\boldsymbol{x})-f_{k-1}(\boldsymbol{x})=T_k(\boldsymbol{x})$,代入上式,得到:
上面的损失函数目前是针对一个样本数据而言,对于整体样本,其损失函数为:
等式右边中第一项$L(y_i,f_{k-1}(\boldsymbol{x}_i))$只与前k-1轮有关,第k轮优化中可将该项视为常数。另外,在GBDT的损失函数上再加上一项与第k轮的基学习器CART决策树相关的正则化项$\omega (T_k(x))$防止过拟合,可得到新的第k轮迭代时的等价损失函数:
上式就是XGBoost模型的损失函数。
假设第k棵CART回归树其对应的叶子区域样本子集为$D_{k1},D_{k2},…,D_{kT}$,且第j个小单元$D_{kj}$中仍然包含$N_{kj}$个样本数据,则计算每个小单元里面的样本的输出均值为:
得到:
正则化项的构造为:
其中,参数T为$T_k(x)$决策树的叶子节点的个数,参数$\bar{c}_{kj},j=1,2,…,T $是第$j$个叶子节点的输出均值,$\gamma ,\lambda $是两个权衡因子。叶子节点的数量及其权重因子一起用来控制决策树模型的复杂度。