经典论文阅读(2)——XGBoost

xgboost是基于梯度提升的树,公式如下:

\hat{y_i} = \phi{x_i} = \sum_{k=1}^Kf_k(x_i)

其中f_k为CART回归树,每个叶子都有一个连续分数,拟合最终目标的loss函数如下,\widetilde{y_i}为预测值,y_i为真实值,T为叶子节点个数,||w||^2为叶子节点权重平方和。
L(\phi) = \sum_{i}l(\hat{y_i},y_i) + \sum_{k}(\Omega_{f_k})
 

其中\Omega(f)=\lambda T+\frac{1}{2}\lambda||w||^2

将loss进行泰勒公式展开,可以得到:

L^{(t)} = \sum_{i=1}^nl(y_i,\hat{y_i}^{(t-1)}+f_t(x_i))+\Omega(f_t)\\ \simeq \sum_{i=1}^n[l(y_i,\hat{y}^{(t-1)})+g_if_t(x_i)+\frac{1}{2}h_if^2_t(x_i)]+\Omega(f_t)\\ \simeq \sum_{i=1}^n[g_if_t(x_i)+\frac{1}{2}h_if^2_t(x_i)]+\Omega(f_t)\\ = \sum_{i=1}^n[g_if_t(x_i)+\frac{1}{2}h_if^2_t(x_i)]+\gamma T+\frac{1}{2}\lambda\sum_{j=1}^Tw^2_j\\ = \sum_{j=1}^T[(\sum_{i \in I_j}g_iw_j+\frac{1}{2}(\sum_{i \in I_j}h_i+\lambda)w_j^2]+\gamma T\\ = \sum_{j=1}^T[(Gw_j+\frac{1}{2}(H+\lambda)w_j^2]+\gamma T

最终得到每个叶子节点的权重为w_j^*=-\frac{G}{H+\lambda},而对应第t棵树的loss为L^{(t)}(q)=-\frac{1}{2}\sum_{j=1}^T\frac{G}{H+\lambda}+\lambda T,其中G为所有样本在该叶子节点的loss的一阶导数之和,H为所有样本在该叶子节点的loss的二阶导数之和。

通常采用遍历得到树的结构,每次分裂的loss reduction:Gain = L_{split} = \frac{1}{2}[\frac{G_{I_L}^2}{H_{I_L}^2+\lambda}+\frac{G_{I_R}^2}{H_{I_R}^2+\lambda}-\frac{G_{I}^2}{H_{I}^2+\lambda}]-\gamma

XGBoost在贪心全局扫描的基础上提出了加快寻找分裂点的方案:

  • 特征预排序+缓存:在训练之前,对每个特征按照特征值大小进行排序保存为block结构,后续每次迭代重复利用该结构减少计算量。

  • 分位点近似点:对每个特征按照特征值大小排序后,采用类似分位点选取的方法,选出常数个特征值作为该特征的候选分割点并选出最优的。

  • 并行查找:由于已存block结构,支持利用多个线程并行计算每个特征的最佳分割点。

XGBoost相对于GBDT的不同:

  • 基分类器:XGBoost不仅支持CART,还支持线性分类器,相当于带L1和L2正则化项的logistic回归或者线性回归;

  • 导数信息:XGBoost对损失函数进行了二阶泰勒展开,损失函数一阶、二阶可导即可,GBDT仅用了一阶导数信息;

  • 列抽样:XGBoost支持列抽样,用于过拟合;

  • 缺失值处理:对树中的每个非叶子节点,XGBoost可以自动学习它的默认分裂方向;

  • 并行化:XGBoost预先将每个特征按照特征值大小排序存储为block结构,分裂时通过多线程并行查找每个特征的最佳分裂点;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值