一文速学-XGBoost模型算法原理以及实现+Python项目实战_xgboost金融领域模型实战

  • f_{t}(x_{i})是第t颗树,也就是我们第t次迭代需要得到的树。

也就是t个模型的预测值等于前t个模型的预测值+当前正在训练第t个模型的预测值。

那么上述公式简化为:

Obj{t}=\sum_{i=1}{n}l(y_{i},\hat{y}_{i}{(t)})+\sum_{k=1}{t}\Omega (f_{k})

2.目标函数变换

我们可以讲上述公式变换:

首先将算法模型y_{i}{t}=y_{i}{t-1}+f_{t}(x_{i})带入取代y_{i}^{t},将后面基学习器树的复杂度进行拆分,拆成前t-1棵树的复杂度加上当前模型树的复杂度,又因为我们当时正在训练第t棵树,所以针对于前k棵树都是常量,所以现在我们的目标函数又可以写成:

Obj{t}=\sum_{i=1}{n}l(y_{i},\hat{y}_{i}^{(t-1)}+f_{t}(x_{i}))+\Omega (f_{t})+constant

这里我们考虑平方损失,此时目标函数又可以变形为:

Obj{(t)}=\sum_{i=1}{n}(2(y_{i}-\hat{y}_{i}{(t-1)})f_{t}(x_{i})+f_{t}(x_{i})+f_{t}(x_{i}){2})+\Omega (f_{t})+constant

根据上面我们就构造好了目标函数,但是为了将其进行简化,我们将其进行泰勒二阶展开

泰勒二阶展开式一般形式如下:

f(x+\Delta x)=f(x)+f{}'(x)\Delta x+\frac{1}{2}f{}'{}'(x)\Delta x^{2}

此时我们定义f(x)=\sum_{i=1}{n}l(y_{i},\hat{y}_{i}{(t)}),\Delta x=f_{t}.

目标函数利用泰勒展开式就可以变成:

Obj{t}=\sum_{i=1}{n}l(y_{i},\hat{y}_{i}{(t-1)}+g_{i}f_{t}(x_{i})+\frac{1}{2}h_{i}f{}'{}'(x_{i}){(2)})+\Omega (f_{t})+constant

其中

因为我们的g_{i}h_{i}都是和前t-1个学习器相关,所以都为常数,那么简化后的目标函数就为:

min\sum_{i=1}{n}[L(y_{i},y_{i}{t-1})+g_{i}f_{t}(x_{i})+\frac{1}{2}h_{i}f_{t}^{2}(x_{i})]+\Omega (f_{t})

变换优势总结
  1. 变换后的目标函数可以被二阶泰勒展开,使得目标函数在每个节点的损失函数可以被表示为关于该节点预测值的二次函数,这样可以在计算最优分裂点时,使用牛顿法或拟牛顿法等高效的优化算法来求解。
  2. 变换后的目标函数可以解决梯度爆炸和梯度消失问题,这是由于使用指数函数和对数函数进行变换,将目标函数的值范围映射到了一个合适的区间,从而避免了数值溢出和数值不稳定的情况。
  3. 变换后的目标函数可以解决分类问题的类别不平衡问题,这是由于在分类问题中,负样本数量通常远大于正样本数量,导致算法容易偏向于负样本。通过将目标函数变换为指数损失函数或对数损失函数,可以对正负样本进行加权,从而解决类别不平衡问题。

3.将树引入目标函数

那么得到了想要的目标函数,我们现在就需要将树引入到我们的目标计算函数中,去取代f_{t}(x_{i})\Omega (k_{t}),我们依旧参照GBDT的计算原理和过程,也就是XGBoost的预测原理。

使用f_{t}(x)=\omega _{q}(x),\omega \epsilon R{T},q:R{d}->{1,2,3,...,T}

  • \omega代表树中叶子节点的权重
  • q代表的是树的结构

对于决策树的例子大家可以参考我的上篇文章:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值