XGBoost

XGBoost算法和GBDT的不同在于两个方面,一是在损失函数中表示树的复杂度的正则项,二是不同于GBDT采用损失函数关于树的负梯度作为残差的近似,XGBoost则在梯度基础上增加了二阶项作为损失函数的近似。

提升树更新:

损失函数可以写成:

处进行泰勒二阶展开:

其中gihi

           展开为了得到近似的损失函数,损失函数是关于的函数,为之前模型的损失,与无关,所以近似的损失函数为后面三项之和。这里也可以看出对于GBDT来说,只考虑了一阶导数项,是关于损失函数的一阶近似,而XGBoost是采用的是关于损失函数的二阶近似,会更快收敛。

正则项:

            正则项第一项为叶节点数量,第二项为叶子节点对应的值,叶子节点尽量少且值尽量小,保证值数量少而集中,减少潜在的树层次,提高精度以及计算速度?

 

对于一个确定结构的回归树来说,可以求得损失最小的情况下的最优回归值:

此时的最小损失为:

回归树的构建策略:

确定最优的树结构是NP难问题,所以不能通过先确定树结构再来求解最优回归值的方式,只能还是用贪心法,不一样的是衡量分裂节点前后的增益计算有所不同,采用打分函数:

考虑最小损失函数中的每个叶子对总体损失的贡献部分,这部分越大损失函数越小,这部分越小,损失函数越大,所以只有在这部分的值变大时,才是值得分裂的,假设选定了节点的某一个位置进行分裂,分成左边一部分,右边一部分。

Gain值越大,说明这一节点越值得分裂,遍历所有的特征/变量,计算对应的Gain,选择Gain值最大的进行分裂,分裂成多部分时,在计算Gain时要每次针对分裂点,看成两部分,从而得到多个gain值

树节点的分裂方法:

  1. 暴力枚举:遍历所有特征的所有可能的分割点,计算gain,找到最大的点去分割;
  2. 近似方法:对于每个特征,只考虑几个特定的分位点,从而减少计算量;
  3. 二阶导数(XBGoost):以二阶导数值作为参考划分点,因为二阶导数对损失函数有加权作用,所以二阶导数变化比较大时,损失函数变化也比较大,以变化较大的点作用切分点,切分形成区域内比较平稳,适合推选出回归值;
  4. 直方图算法(LightGBM);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值