全称:eXtreme Gradient Boosting (极限梯度提升)
作者:陈天奇(华盛顿大学博士)
基础:GBDT
所属:boosting迭代型、树类算法。
适用范围:分类、回归
优点:速度快、效果好、能处理大规模数据、支持多种语言、支 持自定义损失函数等等。
缺点:发布时间短(2014),工业领域应用较少,待检验
算法3.1 梯度提升算法
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T=\{\left(x_1,y_1\right),\left(x_2,y_2\right),\dots,\left(x_N,y_N\right)\} T={(x1,y1),(x2,y2),…,(xN,yN)}; 损失函数 L ( y , f ( x ) ) L\left(y,f\left(x\right)\right) L(y,f(x)) ,最大迭代次数即基回归树的总个数。
输出:强学习器 f ( x ) f(x) f(x)
(1)初始化
f 0 ( x ) = arg min c ∑ i = 1 N L ( y i , c ) f_0\left(x\right)=\mathop{\arg\min}\limits_{ c}\sum_{i=1}^N L\left(y_i,c\right) f0(x)=cargmini=1∑NL(yi,c)
(2)对 m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,…,M,其中 M M M 为基回归树的总个数。
(a)对样本 i = 1 , 2 , … , N i=1,2,\dots,N i=1,2,…,N,计算负梯度
r m i = − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-\left[\frac{\partial L\left(y,f\left(x_i\right)\right)}{\partial f\left(x_i\right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)} rmi=−[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)
(b)利用 ( x i , r m i ) , i = 1 , 2 , ⋯ , m (x_i,r_{mi}),i=1,2,⋯,m (xi,rmi),i=1,2,⋯,m ,拟合一棵CART回归树,得到第m棵回归树,其对应的叶结点区域 R m j , j = 1 , 2 , ⋯ , J R_{mj},j=1,2,⋯,J Rmj,j=1,2,⋯,J。其中 J 为叶子结点的个数。
(c)对叶子区域 j = 1 , 2 , … , J j=1,2,\dots,J j=1,2,…,J,计算最佳拟合值
c m j = arg min c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\mathop{\arg\min}\limits_c\sum_{x_i\in R_{mj}} L\left(y_i, f_{m-1}\left(x_i\right)+c\right) cmj=cargminxi∈Rmj∑L(yi,fm−1(xi)+c)
(d)更新强学习器 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m\left(x\right)=f_{m-1}\left(x\right)+\sum_{j=1}^J c_{mj} I\left(x\in R_{mj}\right) fm(x)=fm−1(x)+j=1∑JcmjI(x∈Rmj)
(3)得到回归梯度提升决策树即强学习器
f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f}\left(x\right)=f_M\left(x\right)=\sum_{m=1}^M \sum_{j=1}^J c_{mj} I\left(x\in R_{mj}\right) f^(x)=fM(x)=m=1∑Mj=1∑JcmjI(x∈Rmj)
回归树的分裂结点对于平方损失函数,拟合的就是残差;对于一般损失函数(梯度下降),拟合的就是残差的近似值,分裂结点划分时枚举所有特征的值,选取划分点。
最后预测的结果是每棵树的预测结果相加。
\quad \quad XGBoost是在GBDT的基础上对boosting算法进行的改进,对比原算法GBDT,XGBoost主要从下面三个方面做了优化:
一是算法本身的优化:在算法的弱学习器模型选择上,对比GBDT只支持决策树,还可以直接很多其他的弱学习器。在算法的损失函数上,除了本身的损失,还加上了正则化部分。在算法的优化方式上,GBDT的损失函数只对误差部分做负梯度(一阶泰勒)展开,而XGBoost损失函数对误差部分做二阶泰勒展开,更加准确。算法本身的优化是我们后面讨论的重点。
二是算法运行效率的优化:对每个弱学习器,比如决策树建立的过程做并行选择,找到合适的子树分裂特征和特征值。在并行选择之前,先对所有的特征的值进行排序分组,方便前面说的并行选择。对分组的特征,选择合适的分组大小,使用CPU缓存进行读取加速。将各个分组保存到多个硬盘以提高IO速度。
三是算法健壮性的优化:对于缺失值的特征,通过枚举所有缺失值在当前节点是进入左子树还是右子树来决定缺失值的处理方式。算法本身加入了L1和L2正则化项,可以防止过拟合,泛化能力更强。
\quad \quad 在上面三方面的优化中,第一部分算法本身的优化是重点也是难点。现在我们就来看看算法本身的优化内容。
未完待续
https://www.cnblogs.com/pinard/p/10979808.html
https://blog.csdn.net/zgcr654321/article/details/88414369
https://blog.csdn.net/sumaliqinghua/article/details/86745651