集成学习(5)——XGBoost

GBDT算法基于经验损失函数的负梯度构造新的决策树,并且在决策树构建完成后进行剪枝(后剪枝)。

XGBoost在决策树构建阶段就加入了正则项,如下为XGBoost的损失函数:

L t = i l ( y i , F t 1 + f t ( x i ) ) + Ω ( f t ) L_t=\sum_il(y_i,F_{t-1}+f_t(x_i))+\Omega(f_t)

其中 F t 1 F_{t-1} 表示现有的t-1棵树最优解。

树结构的正则项定义为 Ω ( f t ) = γ T + 0.5 λ j = 1 T w j 2 \Omega(f_t)=\gamma T+0.5\lambda\sum_{j=1}^Tw_j^2

其中T为叶子节点个数, w j w_j 表示第j个叶子节点的预测值。

对该损失函数在 F t 1 F_{t-1} 处进行二阶泰勒展开可以推导出

L t j = 1 T [ G j w j + 0.5 ( H j + λ ) w j 2 ] + γ T L_t\thickapprox\sum_{j=1}^T[G_jw_j+0.5(H_j+\lambda)w_j^2]+\gamma T

其中T为决策树 f t f_t 中叶子节点的个数, G j = i I j F t 1 l ( y i , F t 1 ( x i ) ) G_j=\sum_{i\in I_j}\nabla_{F_{t-1}}l(y_i,F_{t-1}(x_i)) H j = i I j F t 1 2 l ( y i , F t 1 ( x i ) ) H_j=\sum_{i\in I_j}\nabla^2_{F_{t-1}}l(y_i,F_{t-1}(x_i)) I j I_j 表示所有属于叶子节点 j j 的样本的索引的集合。

假设决策树的结构已知,通过令损失函数相对于 w j w_j 的导数为0可以求出在最小化损失函数的情况下各个叶子节点上的预测值

w j = G j H j + λ w_j^*=-\frac{G_j}{H_j+\lambda}

实际使用贪心方法来构建一个次优的树结构,基本思想是从根节点开始,每次对一个叶子节点进行分裂,针对每一种可能的分裂,根据特定的准则选取最优的分裂。不同的决策树采用不同的准则。

XGBoost有特定的专责来选取最优分裂

通过将预测值 w j w_j^* 代入到损失函数中可求得损失函数的最小值

L t = 0.5 j = 1 T G j 2 H j + λ + γ T L_t^*=-0.5\sum_{j=1}^T\frac{G_j^2}{H_j+\lambda}+\gamma T

然后计算出分裂前后损失函数的差值为:

G a i n = G L 2 H L + λ + G R 2 H R + λ ( G L + G R ) 2 H L + H R + λ γ Gain=\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}-\gamma

XGBoost采用最大化这个插值作为准则来进行决策树的构建,通过遍历所有特征的所有取值,寻找使得损失函数前后相差最大时对应的分裂方式。此外,由于损失函数前后存在一定为正的限制,此时 γ \gamma 起到了一定的预剪枝效果。

XGBoost和GBDT的区别与联系

1)GBDT是机器学习算法,XGBoost是该算法的工程实现;
2)在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力;
3)GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数;
4)传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器;
5)传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样;
6)传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

关于Xgboost用泰勒二阶展开的原因

主要有两点:
1、Xgboost官网上有说,当目标函数是MSE时,展开是一阶项(残差)+二阶项的形式(官网说这是一个nice form),而其他目标函数,如logloss的展开式就没有这样的形式。为了能有个统一的形式,所以采用泰勒展开来得到二阶项,这样就能把MSE推导的那套直接复用到其他自定义损失函数上。简短来说,就是为了统一损失函数求导的形式以支持自定义损失函数。这是从为什么会想到引入泰勒二阶的角度来说的。

2、二阶信息本身就能让梯度收敛更快更准确。这一点在优化算法里的牛顿法里已经证实了。可以简单认为一阶导指引梯度方向,二阶导指引梯度方向如何变化。这是从二阶导本身的性质,也就是为什么要用泰勒二阶展开的角度来说的。

发布了88 篇原创文章 · 获赞 31 · 访问量 5084

猜你喜欢

转载自blog.csdn.net/weixin_43455338/article/details/104865762
今日推荐