SiriBlog

siriyang的个人博客


  • 首页

  • 排行榜

  • 标签115

  • 分类37

  • 归档318

  • 关于

  • 搜索

贪心学院xgboost细节讲解

发表于 2020-05-26 更新于 2022-09-30 分类于 计算机 , 理论 , 机器学习 阅读次数: Valine:
本文字数: 4.4k 阅读时长 ≈ 4 分钟

Bagging vs Boosting

共同点:
  Bagging和Boosting都是集成模型,都是由很多个弱分类器(base/weak learners)构成的。

不同点:

  • Bagging:由过拟合的弱分类器集成。
  • Boosting:由欠拟合的弱分类器集成。

提升树

  提升树——基于残差的训练。
  残差——真实值减去预测值的差值。


XGBoost

算法优点:

  1. 算法可以并行、训练效率高
  2. 比起其他的算法,实际效果好
  3. 由于可控参数多,可以灵活调整

如何构造目标函数?
  目标函数非连续型,难以优化,使用近似的方法。

目标函数直接优化难,如何近似?
  使用泰勒展开近似目标函数。

如何把树的结构引入到目标函数?

仍然难优化,要不要使用贪心算法?

构造目标函数

使用多棵树来预测

  假设已经训练了K颗树,则对于第i个样本的(最终) 预测值为所有树权值之和:

目标函数的构建

  • $\sum_{i=1}^n l(y_i,\widehat{y_i})$:损失函数
  • $\sum_{k=1}^K \Omega(f_k)$:正则项
  • $\Omega(f_k)$:第k棵树的复杂度

树的复杂度

  • 叶节点个数
  • 树的深度
  • 叶节点值:将叶节点的值限制的越小,树的复杂度降低,要达到目标结果就需要更多的树进行累加
  • …

叠加式的训练(Additive Training)

  已训练k-1棵树,现在要训练第k棵树:

给定:$x_i$
   $\widehat{y_i}^{(0)}=0\longleftarrow$ Default Case
   $\widehat{y_i}^{(1)}=f_1(x_i)=\widehat{y_i}^{(0)}+f_1(x_i)$
   $\widehat{y_i}^{(2)}=f_1(x_i)+f_2(x_i)=\widehat{y_i}^{(2)}+f_2(x_i)$
   $\vdots$
   $\widehat{y_i}^{(k)}=f_1(x_i)+f_2(x_i)+\dots+f_k(x_i)$
     $\ =\sum_{j=1}^{k-1}f_j{x_i}+f_k(x_i)=\widehat{y_i}^{(k)}+f_k(x_i)$

损失函数:$l(y_i,\widehat{y_i})$

目标函数:$Obj=\sum_{i=1}^n l(y_i,\widehat{y_i}^{(k)})+\sum_{j=1}^k\Omega(f_j)$

优化目标函数:$minimize Obj=\sum_{i=1}^n l(y_i,\widehat{y_i}^{(k-1)}+f_k(x_i))+\sum_{j=1}^{k-1}\Omega(f_j)+\Omega(f_k)$

当训练第k棵树时,仅需最小化:$\sum_{i=1}^n l(y_i,\widehat{y_i}^{(k-1)}+f_k(x_i))+\Omega(f_k)$

  • $y_i$:真实值
  • $\widehat{y_i}^{(k-1)}$:前k-1棵树的预测值(constant)
  • $f_k(x_i)$:第k棵树的预测值
  • $\Omega(f_k)$:第k棵树的复杂度

使用泰勒展开近似目标函数

  使用近似的方法是为了把常数项抽取出来。

$Obj_k=\sum_{i=1}^n l(y_i,\widehat{y_i}^{(k-1)}+f_k(x_i))+\Omega(f_k)$

Taylor Expansion:$f(x+\Delta x)\approx f(x)+f’(x)\cdot\Delta x+\frac{1}{2}f’’(x)\cdot \Delta x^2$

令:

  • $f(x)=l(y_i,\widehat{y_i}^{(k-1)})$
  • $f(x+\Delta x)=l(y_i,\widehat{y_i}^{(k-1)}+f_k(x_i))$

所以:
$Obj_k=\sum_{i=1}^n l(y_i,\widehat{y_i}^{(k-1)}+f_k(x_i))+\Omega(f_k)$
  $\ \\,=\sum_{i=1}^n \left [ l(y_i,\widehat{y_i}^{(k-1)})+\partial_{\widehat{y_i}^{(k-1)}}\\,l(y_i,\widehat{y_i}^{(k-1)})\cdot f_k(x_i)+\frac{1}{2}\partial_{\widehat{y_i}^{(k-1)}}^2 \\,l(y_i,\widehat{y_i}^{(k-1)})\cdot f_k^2(x_i) \right ]+\Omega(f_k)$
  $\ \\,=\sum_{i=1}^n \left [ l(y_i,\widehat{y_i}^{(k-1)})+g_i f_k(x_i)+\frac{1}{2}h_i f_k^2(x_i) \right ]+\Omega(f_k)$

注:当训练第k棵树时,{$h_i,g_i$}是已知的,$h_i$、$g_i$代表了前k-1棵树的残差。


新的目标函数

树的参数化

参数化:

  • $W=(w_1,w_2,w_3)=(15,12,20)$:叶子权重向量
  • $q(x);\ q(x_1)=1、q(x_2)=3、q(x_3)=1、q(x_4)=2、q(x_5)=3$:样本x的位置
  • $I_j=\\{j|q(x_i)=j\\};\ I_1=\\{1,3\\}、I_2=\\{4\\}、I_3=\\{2,5\\}$:第j个节点里面有哪些样本。使用这种组织方式方便后面去掉参数下标

树的复杂度:

  • $T$:叶节点个数
  • $\sum_{j=1}^T w_j^2$:叶节点权值
  • $\gamma、\lambda$:超参数(hyperparameter),用于控制模型对叶节点个数或权值的侧重。

新的目标函数
(假设树的形状已知的情况下)

$\sum_{i=1}^n \left [ g_i f_k(x_i)+\frac{1}{2}h_i f_k^2(x_i) \right ]+\Omega(f_k)$
$=\sum_{i=1}^n \left [ g_i\cdot W_{q(x_i)}+\frac{1}{2}h_i W_{q(x_i)}^2 \right ]+\gamma T+\frac{1}{2}\lambda\sum_{j=1}^T w_j^2$

按照样本去组织:$g_1\cdot W_{q(x_1)}+g_2\cdot W_{q(x_2)}+g_3\cdot W_{q(x_3)}+g_4\cdot W_{q(x_4)}+g_5\cdot W_{q(x_5)}$
按照叶节点组织:$\underline{g_1\cdot W_{q(x_1)}+g_3\cdot W_{q(x_3)}}+\underline{g_4\cdot W_{q(x_4)}}+\underline{g_2\cdot W_{q(x_2)}+g_5\cdot W_{q(x_5)}}$
        $=\underline{g_1\cdot w_1+g_3\cdot w_1}+\underline{g_4\cdot w_2}+\underline{g_2\cdot w_3+g_5\cdot w_3}=\sum_{j=1}^3\sum_{i\in I_j} g_i\cdot w_j$

$minimize=\sum_{j=1}^T \left [ (\sum_{i\in I_j} g_i)\cdot w_j+\frac{1}{2}(\sum_{i\in I_j} h_i+\lambda)\cdot w_j^2 \right ]+\gamma T$

$G_j=(\sum_{i\in I_j} g_i)$与$H_j+\lambda=(\sum_{i\in I_j} h_i+\lambda)$均为常量,所以上式形似于$ax^2+bx+c$,所以有最优解$x^*=-\frac{b}{2a}$。

$w^*_j=-\frac{G_j}{H_j+\lambda}$

$Obj^*=-\frac{1}{2}\frac{G_j^2}{H_j+\lambda}+\gamma T$

  在树的结构已知的情况下,我们能一下就计算出最优解。在树结构未知的情况下,我们的问题就是如何去寻找使目标函数最小的那个树。


寻找最优的树的形状

如何寻找树的形状?

  1. 暴力搜索(Brute-Force Search),把所有形状的最小值都求一遍再比较。复杂度为$O(p^n)$,在资源有限的情况下,该方法不可能。
  2. 贪心的方法。

决策树:
  在某一节点按某一特征做子节点的划分,之后子节点再按别的特征继续划分下去。
  每次划分选择特征的标准是特征的score:原(不确定性)-之后(不确定性),称之为信息增益(Information Game),不确定性称为熵(Entropy),我们的目的就是要使信息增益最大。

XGBoost:
  我们用决策树计算信息熵的方法来进行计算 $Obj$ 。我们在每次树分裂前后计算 $Obj_k^{*(old)}$ 和 $Obj_k^{*(new)}$ ,使两者的差值最大,每次分裂都采用最优的特征进行分裂。其实除了将信息熵替换为了 $Obj$ ,其他计算过程和决策树都是一样的。

-------- 本文结束 感谢阅读 --------
相关文章
  • 中医药天池大数据竞赛--中药说明书实体识别挑战
  • NLP综合实践(三)
  • NLP综合实践(二)
  • NLP综合实践(一)
  • 2020华为云大数据挑战赛-正式赛(2)
觉得文章写的不错的话,请我喝瓶怡宝吧!😀
SiriYang 微信支付

微信支付

SiriYang 支付宝

支付宝

  • 本文标题: 贪心学院xgboost细节讲解
  • 本文作者: SiriYang
  • 创建时间: 2020年05月26日 - 19时05分
  • 修改时间: 2022年09月30日 - 14时09分
  • 本文链接: https://blog.siriyang.cn/posts/20200526195028id.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习笔记 机器学习 XGBoost
2020华为云大数据挑战赛-正式赛遇到的问题
寻找无向图最小着色方案
  • 文章目录
  • 站点概览
SiriYang

SiriYang

努力搬砖攒钱买镜头的摄影迷
318 日志
33 分类
88 标签
RSS
GitHub E-Mail
Creative Commons
Links
  • 友情链接
  • 作品商铺

  1. Bagging vs Boosting
  2. 提升树
  3. XGBoost
    1. 构造目标函数
    2. 使用泰勒展开近似目标函数
    3. 新的目标函数
    4. 寻找最优的树的形状
蜀ICP备19008337号 © 2019 – 2025 SiriYang | 1.7m | 25:40
0%