xgboost算法_xgboost算法原理学习笔记

GBDT算法还存在一些缺点,如损失函数没有进行正则化,拟合上一轮强学习器损失函数的梯度存在精度问题,每个弱学习器只能基于CART决策树生成且耗时较长,未考虑缺失值的情况。

xgboost能够很好的解决上述问题,xgboost在最小化损失函数时进行了正则化,拟合上一轮强学习器损失函数的二阶导展开,精度提高了,xgboost算法的弱学习器生成采用了并行的方式划分最优特征,提高了算法运行效率,考虑了缺失值的情况。

1. xgboost算法的损失函数推导

xgboost的损失函数在GBDT的基础上加上了正则化,正则化项如下:

78ba772994d47d26c4028c4db2e7b572.png

其中 γ 和 7d0af40915123655e52e7d611d7accb7.png是 正则项系数,J表示叶子节点个数,00c8a664c549db95df74493850fd0935.png表示第t次迭代的弱学习器第j个叶子节点的值,正则化描述了弱学习器的复杂度。

因此xgboost的损失函数为:

46fc2693c054c9db937057b00151e66a.png

其中5ef9de126542f29fa90c5d86eea14d05.png为第t次迭代的弱学习器,8c159b911ced341baa883986c93589de.png为第t-1次迭代的强学习器。

我们利用泰勒公式对上式进行二阶导展开:

042d89f8380e21d0a3dfe4ee8b7c0cb8.png

令第i个样本在第t个弱学习器的一阶导为:

2917a770005563e4ce76d6bba3b2be12.png

二阶导为:

e914c3d3500f21755a4b00cdcdc5add3.png

代入损失函数,得:

3a2ed4681db3199a86e2e1e92c48ae37.png

容易发现65228f73d505f1b480c8a9e85f87d301.png在第t次弱学习器的生成过程中为常数,因此可不用考虑。

损失函数可化简为:

6c05796f95a33cb8c4f9b5c7ace1413a.png

训练样本集输入给弱学习器中,以叶子节点的形式输出,每个样本对应特定的叶子节点。因此,损失函数等价于:

250f354c28cee3b6b08cd1d10786055d.png

记每个叶子节点区域一阶导的和为:

d3b490c19176660d44db4539e714e8de.png

其中4661733e9539ce049eb04c46f78c56f5.png表示样本落在第t个弱学习器生成的第j个叶子节点区域的一阶导和。

每个叶子节点区域二阶导的和为:

d030cd99996067192cb1cf34e0d88674.png

其中791043b51984803a3c14da44d514f8ea.png表示样本落在第t个弱学习器生成的第j个叶子节点区域的一阶导和。

损失函数最终简化为:

8e4f5266f43fcb4b8ee5af1a465b2987.png

我们的目的是要计算每次迭代后的叶子节点个数和每个叶子结点的值,这一过程通过最优化损失函数求解。

2. xgboost损失函数的最优化方法

68808797780c3b0277f22a1f92b8d8da.png

得:

8410d88526289f847e4c0e07970060b4.png

我们得到了叶子结点值的最优表达式,并代入损失函数Lt,得:

4b19d560cf15a0722071acd269ab2dda.png

每次划分节点时,选择损失函数变化最大的特征切分点进行划分。

节点划分前后的损失函数变化记为deltaT,容易知道节点划分后的叶子节点比划分前多1个,有:

842dc13cfd1c5ec88c22ffd98f21917f.png

选择deltaT变化最大的特征切分点进行划分,得到叶子结点值f59d8688cfed407672938b2525a86d2d.png,最后更新第t次迭代的强学习器,有:

3b190fa8a3f54757389b80f43c550a7a.png

每次迭代后,我们都能计算所有样本的损失函数一阶导和二阶导。因此,按照上述介绍进行切点划分,每次划分都能最大化的减小损失函数。

3. xgboost和GBDT的比较

1) GBDT得到每次迭代的弱学习器需要两个步骤,首先拟合损失函数的负梯度,确定每个样本所对应的叶子节点区域,然后对每个节点再做一次线性搜索,确定每个叶子节点区域的值。xgboost只需要一次迭代就能计算每个样本对应的叶子节点区域和相应的值。

2)GBDT拟合上一轮强学习器损失函数的负梯度(一阶展开式),xgboost拟合上一轮强学习器损失函数的二阶导展开式,精度更高。

3)xgboost的损失函数包含了正则项,泛化能力更强。

4)xgboost每次迭代过程中,采用并行切分特征的方式,提高了算法运行效率。

5)xgboost处理特征缺失值时,根据缺失值样本放在左边或右边的损失函数的下降量,来决定缺失值的处理方式。

总之,xgboost是一种非常强大的模型构建方法,是kaggle算法竞赛中最热门的的算法,小编强烈推荐使用它。

参考

https://www.cnblogs.com/pinard/p/10979808.html

欢迎扫码关注:

04f3a6ee7ad9ab1f3cb2525f2b0cb46b.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值