xgboost算法过程推导

xgboost是机器学习集成学习boosting系列算法中的一种。现在具体讲解一下xgboost算法过程推导。

目录

    • 一.xgboost
        • 1.xgboost的原理
          • 1.1定义模型:
          • 1.2.损失函数定义
        • 2.模型学习
        • 3.树的复杂度
        • 4.枚举所有不同树结构的贪心法
        • 5.引入新叶子的惩罚项
        • 7.划分点查找算法

一.xgboost

1.xgboost的原理

xgboost是构造一棵棵树来拟合残差。

1.1定义模型:
  • 1.符号定义:
    xgboost算法过程推导_第1张图片
  • 2.模型定义
    假设我们迭代T轮,意味着我们要生成T棵残差树:
    在这里插入图片描述
    注意:
    • 1.其实一般来说,前面还要加上一个,但是作者在这里初始化的时候将设置为0,所以不用加了。
    • 2.ft(xi)表示的是第t棵残差树对xi的第t轮残差的预测值。
    • 3.每一轮残差)树的训练数据是什么呢?假如,yt表示t棵cart残差树的和,也就是最终预测值,y表示x的真实标签,那么第t+1棵树的训练数据就是(x,y-yt)
    • 4.F是残差树的函数空间。
    • 5.从函数的角度来说,每一个残差树类似一个分段函数。
1.2.损失函数定义

在这里插入图片描述
  从公式的角度,xgboost的误差来源主要是:训练误差和模型复杂度。

2.模型学习

第一部分是训练误差,第二部分是每棵树的复杂度的和。

每一次保留原来的模型不变,加入一个新的函数f到我们的模型中。
xgboost算法过程推导_第2张图片
如何选择每一轮加入什么f呢?
选取一个f来使得我们的目标函数尽量最大地降低(加入f后的预测结果与实际结果误差减少)。
xgboost算法过程推导_第3张图片
采用如下的泰勒展开近似来定义一个近似的目标函数
xgboost算法过程推导_第4张图片
移除常数项(真实值与上一轮的预测值之差),目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数
在这里插入图片描述

3.树的复杂度

以上是目标函数中训练误差的部分,接下来定义树的复杂度。
对于f的定义做一下细化,把树拆分成结构函数q(输入x输出叶子节点索引)和叶子权重部分w(输入叶子节点索引输出叶子节点分数),结构函数q把输入映射到叶子的索引号上面去,而w给定了每个索引号对应的叶子分数是什么。
在这里插入图片描述
定义一棵树的复杂度如下:
一棵树里面叶子节点的个数,以及每个树叶子节点上面输出分数的L2模平方。
在这里插入图片描述
目标函数改写:
xgboost算法过程推导_第5张图片
其中I被定义为每个叶子上面样本集合Ij = { i | q(xi) = ji} (每个叶子节点里面样本集合);
f(xi)等价于求出w(q(xi))的值(每一个样本所在叶子索引的分数) ;T为叶子节点数量。
定义Gj(每个叶子节点里面一阶梯度的和)Hj(每个叶子节点里面二阶梯度的和):
在这里插入图片描述
目标函数改写
xgboost算法过程推导_第6张图片
求偏导得出:
在这里插入图片描述
Obj代表了当我们指定一个树的结构的时候,我们在目标上面最多减少多少,可叫做结构分数

4.枚举所有不同树结构的贪心法

exact greedy algorithm 贪心算法获取最优切分点
利用这个打分函数来寻找出一个最优结构的树,加入到我们的模型中,再重复这样的操作。
常用的方法是贪心法,每一次尝试去对已有的叶子加入一个分割。对于一个具体的分割方案,计算增益:
xgboost算法过程推导_第7张图片
分裂后的改变就是叶子节点数多了一个,然后样本被划分到不同的叶子节点。这个Gain公式的原理用白话讲就是,用左节点增益加右节点增益减去未进行分裂前的那个节点的增益减去因为多增加了一个节点而产生的,那么为什么在这里插入图片描述可以表示一个节点的收益呢?由于在这里插入图片描述(刚刚计算出的当树结构确定时的最优总loss),仔细观察其结构,就是叶子节点总数乘以一个系数减去所有叶子节点的和在这里插入图片描述乘以一个系数,为了使得loss减小,那么在这里插入图片描述越大越好,因此我们可以将在这里插入图片描述当作是第k个叶子节点的增益。

5.引入新叶子的惩罚项

优化这个目标对应了树的剪枝, 当引入的分割带来的增益小于一个阀值的时候,我们可以剪掉这个分割。
这样根据推导引入了分裂节点的选取计算分数和叶子的惩罚项,替代了回归树的基尼系数与剪枝操作。

7.划分点查找算法

贪心算法
算法1 exact greedy algorithm—贪心算法获取最优切分点
xgboost算法过程推导_第8张图片
核心思想:
通过特征的分布,按照分布式加权直方图算法确定一组候选分裂点,通过遍历所有的候选分裂点来找到最佳分裂点。
在寻找split point的时候,不会枚举所有的特征值,而会对特征值进行聚合统计,然后形成若干个bucket(桶),只将bucket边界上的特征值作为split point的候选,从而获得性能提升。

来源:https://blog.csdn.net/guoxinian/article/details/79243307

你可能感兴趣的:(xgboost算法过程推导)