【论文笔记】XGBoost论文阅读笔记

本文深入解析XGBoost模型的工作原理,包括损失函数的二阶泰勒展开,正则化项的作用,以及如何通过梯度提升避免过拟合。同时,探讨了XGBoost的优化策略,如列采样和shrinkage,以及加速寻找切分点的方法。

2. xgboost模型

L(t)=∑i=1nl(yi,y^i(t−1)+ft(xi))+Ω(ft) L^{(t)} = \sum_{i=1}^n l(y_i, \hat y_i^{(t-1)} + f_t (x_i) ) + \Omega(f_t) L(t)=i=1nl(yi,y^i(t1)+ft(xi))+Ω(ft)
损失函数二阶泰勒展开
L(t)=∑i=1n[l(yi,y^(t−1))+gift(xi)+12hift2(xi)]+Ω(ft) L^{(t)} = \sum_{i=1}^n [ l(y_i, \hat y^{(t-1)}) + g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) ] + \Omega(f_t)L(t)=i=1n[l(yi,y^(t1))+gift(xi)+21hift2(xi)]+Ω(ft),其中 gi=∂y^(t−1)l(yi,y^(t−1))g_i = \partial_{\hat y^{(t-1)}}l(y_i, \hat y^{(t-1)})gi=y^(t1)l(yi,y^(t1))hi=∂y^(t−1)2l(yi,y^(t−1))h_i = \partial^2_{\hat y^{(t-1)}}l(y_i, \hat y^{(t-1)})hi=y^(t1)2l(yi,y^(t1))

去掉当中的常数项
L(t)=∑i=1n[gift(xi)+12hift2(xi)]+Ω(ft) L^{(t)} = \sum_{i=1}^n [ g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) ] + \Omega(f_t)L(t)=i=1n[gift(xi)+21hift2(xi)]+Ω(ft)

将正则化项展开
L(t)=∑i=1n[gift(xi)+12hift2(xi)]+γT+12λ∑j=1Twj2=∑j=1T[(∑i∈Ijgi)wj+12(∑i∈Ijhi+λ)wj2]+γT L^{(t)} = \sum_{i=1}^n [ g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) ] + \gamma T + \frac{1}{2}\lambda \sum_{j=1}^T w_j^2 \\ = \sum_{j=1}^T[ (\sum_{i \in I_j} g_i)w_j + \frac{1}{2} (\sum_{i \in I_j} h_i + \lambda)w_j^2 ] + \gamma T L(t)=i=1n[gift(xi)+21hift2(xi)]+γT+21λj=1Twj2=j=1T[(iIjgi)wj+21(iIjhi+λ)wj2]+γT
其中Ij={i∣q(xi)=j}I_j = \{i |q(x_i) = j \}Ij={iq(xi)=j} 表示一个叶子节点 j; q(xi)=jq(x_i)=jq(xi)=j 表示一个样本xix_ixi经过树结构q(x)q(x)q(x)到达了叶子节点 jjj

那么对于任何一个固定的树结构q(x)q(x)q(x),我们都能够得到叶子节点的最优的权重wj∗w_j^*wj,以及对应的最小损失
wj∗=−∑i∈Ijgi∑i∈Ijhi+λ w_j^* = - \frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda} wj=iIjhi+λiIjgi
L(t)(q)=−12∑j=1T(∑i∈Ijgi)2∑i∈Ijhi+λ+γT L^{(t)}(q) = - \frac{1}{2} \sum_{j=1}^T \frac{(\sum_{i \in I_j}g_i)^2}{ \sum_{i \in I_j} h_i + \lambda } + \gamma T L(t)(q)=21j=1TiIjhi+λ(iIjgi)2+γT

这个损失函数有多种用途,例如用来做节点的切分
Lsplit=12[(∑i∈ILgi)2∑i∈ILhi+λ+(∑i∈IRgi)2∑i∈IRhi+λ−(∑i∈Igi)2∑i∈Ihi+λ]+γT L_{split} = \frac{1}{2} [ \frac{(\sum_{i \in I_L}g_i)^2}{ \sum_{i \in I_L} h_i + \lambda } + \frac{(\sum_{i \in I_R}g_i)^2}{ \sum_{i \in I_R} h_i + \lambda } - \frac{(\sum_{i \in I}g_i)^2}{ \sum_{i \in I} h_i + \lambda } ]+ \gamma T Lsplit=21[iILhi+λ(iILgi)2+iIRhi+λ(iIRgi)2iIhi+λ(iIgi)2]+γT

2.3 xgboost避免过拟合的方法

  • 加入了正则化项
  • Shrinkage: 将新加入的树,增加一个缩放因子 η\etaη
    • 减小了单棵树的影响,将优化空间给了未来增加的树
  • Column Subsampling: 列采样,类似于随机森林当中的技术(除了避免过拟合以外,还能够并行加速计算)

3. 如何加速寻找切分点

  • Basic Exact greedy algorithm: 基本的节点分裂算法,需要遍历每一个特征的每一个位置,去计算最优的切分点
  • quantile strategy(分位点策略): 改进的切分方法:对每个特征选择一些候选的分割点,根据特征分布百分比
    • global proposal: 在数据初始化的时候,就将每个特征的分位点固定下来,每次分裂的时候使用同样的分位点
      • 优点:步骤少,但是需要更多的分位点,才能达到比较好的效果
    • local proposal: 在每次切分的时候都重新定义候选切分点集合,对更深的树比较合理
  • weighted Quantile Sketch: 这里没看懂
  • Sparsity-aware Split Finding(能加速50倍左右): 有可能有多种原因造成的数据稀疏,在该值缺失时,分到一个默认的方向,这个方向是算法自己学到的

4. 系统设计

  • 4.1 Column Block for Parallel Learning,每个block当中的feature值是排序的,这个的好处特别多
  • 4.2 Cache-aware Access: 这一块也不是很懂,不过大意是,block过小影响并行化效率,block过大导致缓存失效
  • 4.3 Blocks for Out-of-core Computation: 如何使用外存
    • Block Compression: 块数据压缩
    • Block Sharding: 块数据分片,将一块数据分散到多块硬盘,读取的时候可以同时读取,增加吞吐量

问题

  • 树的梯度如何计算?一阶梯度,二阶梯度

Demo

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值