文章:Chen T , Guestrin C . XGBoost: A Scalable Tree Boosting System[C]Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2016.
1.简介
Xgboost是一种基于决策树(CART)的分布式的高效的梯度提升算法,它可被应用到分类、回归、排序等任务中,与一般的GBDT算法相比,XGBoost主要有以下几个优点:
- 对树模型的复杂度进行了惩罚,分别引入了关于叶节点数与叶节点权重正则项,防止过拟合;
- XGBoost的目标函数利用了损失函数关于待求函数的二阶导数信息,而GBDT只利用了一阶导数信息;
- 类似于学习率,Xbg在学习到一棵树后,对其权重进行缩减,从而降低该棵树对后续的树模型的影响,提升可学习空间;
- XGBoost借鉴了RF的列采样,构建每棵树时对特征进行采样,防止过拟合,提高了训练速度;
- Xgboost构建树的算法包括精确的算法和近似的算法,近似的算法对每维特征加权分数进行分桶,具体的算法利用到了损失函数关于待求树的二阶导数;
- 稀疏数据的处理,当数据的某个特征缺失时,Xgboost将该数据划分到默认的子节点,并提出了一种缺失值处理算法来求解这个默认方向;
- 可并行的近似直方图算法,分裂节点时,数据在block中按列存放,而且已经经过了预排序,因此可以并行计算,即同时对各个属性遍历最优分裂点。
2.梯度提升树
2.1正则化目标
对于给定的具有n个样本,m维特征的数据集 D = { [ x i , y i ] } ( ∣ D ∣ = n , x i ∈ R m , y i ∈ R ) \ D=\{[\textbf{x}_i,y_i]\}(|D|=n,\textbf{x}_i\in R^m,y_i\in R) D={
[xi,yi]}(∣D∣=n,xi∈Rm,yi∈R) ,集成树模型的预测结果样本在为k颗树上的预测结果相加(图2.1),
y ^ i = ∑ k = 1 K f k ( x i ) , f k ∈ F \hat{y}_i=\sum\limits_{k = 1}^K f_k(\textbf{x}_i),f_k\in F y^i=k=1∑Kfk(xi),fk∈F
F = { f ( x ) = w q ( x ) } ( q : R m → T , w ∈ R T ) F=\{f(\textbf{x})=w_{q(\textbf{x}})\}(q:R^m\to T,w\in R^T) F={
f(x)=wq(x)}(q:Rm→T,w∈RT)为回归树模型的集合;其中 T T T为树模型的复杂度,即叶节点的数量; q ( x ) q(\textbf{x}) q(x)为样本最终落在树上的叶节点; w q ( x ) w_{q(\textbf x)} wq(x)为叶节点 q ( x ) q(\textbf{x}) q(x)对应的权值,也就是样本在当前回归树上的预测结果。 f k f_k fk即代表一个完整的树结构。
图2.1 集成树模型,样本的最终预测结果为样本在两颗树上叶节点上的得分之和
那么为了确定这k颗集成树的参数 w w w与 q q q,首先定义正则化目标,
L ( ϕ ) = ∑ i = l ( y ^ i , y i ) + ∑ k Ω ( f k ) w h e r e Ω ( f ) = γ T + 1 2 λ ∣ ∣ w ∣ ∣ 2 L(\phi) = \sum\limits_i=l(\hat{y}_i,y_i)+\sum\limits_k\Omega(f_k)\\where\quad \Omega(f)=\gamma T+\frac{1}{2}\lambda||w||^2 L(ϕ)=i∑=l(y^i,yi)+k∑Ω(fk)whereΩ(f)=γT+21λ∣∣w∣∣2
y ^ i \hat{y}_i y^i为预测值, y i y_i yi为真实值, l ( y ^ i , y i ) l(\hat{y}_i,y_i) l(y^i,yi)为损失函数, Ω ( f k ) \Omega(f_k) Ω(fk)为关于模型复杂度的惩罚项,分别对树叶节点的个数与叶节点权值的正则,防止过拟合。
由于树模型的参数不能在欧几里得空间中找到合适的解,所以应用迭代优化算法来进行求解,假设 y ^ i ( t ) \hat{y}_i(t) y^i(t)为第 i i i个样本在第 t t t次训练后得到的预测结果,那么此时模型的损失为,
L ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + Ω ( f t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) \begin{aligned} L^{(t)}&=\sum\limits_{i=1}^nl(y_i,\hat y_i^{(t)})+\Omega(f_t)\\ &=\sum\limits_{i=1}^nl(y_i,\hat y_i^{(t-1)}+f_t(\textbf x_i))+\Omega(f_t) \end{aligned} L(t)=i=1∑nl(yi,y^i(t))+Ω(ft)=