高级算法梳理(三)XGB算法

高级算法梳理(三)XGB算法算法原理 XGBoost eXtremeGradi 是工业界逐渐风靡的基于 GradientBoos 算法的一个优化的版本 可以给预测模型带来能力的提升 其算法思想就是不断地添加树 不断地进行特征分裂来生长一棵树 每次添加一个树 其实是学习一个新函数 去拟合上次预测的残差 当我们训练完成得到 k 棵树 我们要预测一个样本的分数 其实就是根据这个样本的特征 在每棵树中会落

算法原理

XGBoost(eXtreme Gradient Boosting)是工业界逐渐风靡的基于GradientBoosting算法的一个优化的版本,可以给预测模型带来能力的提升。其算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。

注:w_q(x)为叶子节点q的分数,f(x)为其中一棵回归树

损失函数

对于回归问题,我们常用的损失函数是MSE,即:

对于分类问题,我们常用的损失函数是对数损失函数:

XGBoost目标函数定义为:

同时,可以将目标函数改写成:

很明显,我们接下来就是要去找到一个f_t能够最小化目标函数。XGBoost的想法是利用其在f_t=0处的泰勒二阶展开近似它。所以,目标函数近似为:

其中g_i为一阶导数,h_i为二阶导数:

由于前t-1棵树的预测分数与y的残差对目标函数优化不影响,可以直接去掉。简化目标函数为:

上式是将每个样本的损失函数值加起来,我们知道,每个样本都最终会落到一个叶子结点中,所以我们可以将所以同一个叶子结点的样本重组起来,过程如下图:

因此通过上式的改写,我们可以将目标函数改写成关于叶子结点分数w的一个一元二次函数,求解最优的w和目标函数值就变得很简单了,直接使用顶点公式即可。因此,最优的w和目标函数公式为:

正则化

xgboost使用了如下的正则化项:

这里出现了γ和λ,这是xgboost自己定义的,在使用xgboost时,你可以设定它们的值,显然,γ越大,表示越希望获得结构简单的树,因为此时对较多叶子节点的树的惩罚越大。λ越大也是越希望获得结构简单的树。

对缺失值处理

xgboost模型能够处理缺失值,模型允许缺失值存在。关于缺失值的处理将其看与稀疏矩阵的处理看作一样。在寻找split point的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point的时间开销。在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。

优缺点

优点:

sklearn参数

(1)objective [ default=reg:linear ] 定义学习任务及相应的学习目标,可选的目标函数如下:

本篇为转载

原文链接:https://blog.csdn.net/weixin_/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225794.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午8:32
下一篇 2026年3月17日 上午8:32


相关推荐

  • Android 结合实例学会AsyncTask的使用方法

    Android 结合实例学会AsyncTask的使用方法

    2021年12月13日
    44
  • JNZ是什么指令_pushf指令

    JNZ是什么指令_pushf指令书中127页有这么一段,movdx,0x1f7.waits:inal,dxandal,0x88cmpal,0x08jnz.waits最后一句的jnz完全可以用jne代替,那jnz/jne,jz/je区别到底是什么呢?刚想到这个问题时候我有点懵,明明都是由ZF标志位决定的啊,有啥不一样啊QAQjnz指令,if(ZF!=0)则跳转,在

    2025年8月8日
    5
  • 电商新宠—广告电商,转化产品的流量聚体地「建议收藏」

    电商新宠—广告电商,转化产品的流量聚体地「建议收藏」现在市面上通过看广告赚点零花钱的项目也是片地一把抓,在各大平台看广告,间接给平台赚钱,却不能给自己带来一些好处;而真正的并没有让消费者能长期的去坚持去做,一个月下来看广告收益也就十多二十元块钱,使大多数平台变得暗淡下去,最后无人问津。目前又听说在市面上流传了一个很火热的广告变现模式——广告电商,结合了“社交电商+广告分佣”,通过在平台购买商品,赠送同等或者一定量的积分,达到不同的门槛,可以根据不同的积分门槛看不同的广告(每天3分钟),实现广告变现,提现到微信、支付宝和对接的第三方支付服务平台。最终实现广告主

    2022年6月22日
    39
  • 16天记住7000考研单词

    16天记住7000考研单词16天记住7000考研单词(第一天)1.WithmyownearsIclearlyheardtheheartbeatofthenuclearbomb.我亲耳清楚地听到原子弹的心脏的跳动。2.Nextyearthebeardedbearwillbearadearbabyintherear.明年,长胡子的熊将在后方产一头可爱的小崽.

    2022年5月29日
    37
  • currentStyle

    currentStyle用js的style属性可以获得html标签的样式,但是不能获取非行间样式。解决方法:在IE下可以用currentStyle;在FF下用getComputedStyle;然而,为了让其兼容,解决

    2022年7月1日
    24
  • SEH学习

    SEH学习以前觉得加技术的QQ群作用只有一个:闲聊,浪费时间现在想找5,6个长期有时间学习逆向的朋友,在一个小群里面,有问题互相讨论(只讨论技术上的问题)为了保持群的活跃,有要求如下群成员要求1懂C语言汇编,基础windows知识2懂得最基本的脱壳激活成功教程知识3乐于助人4群成员之间互相认识,了解各自水平有兴趣加我的QQ315,1028,21(逗号是为了避免

    2025年6月13日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号