上一篇文章中,我们了解了Boosting思想的两种算法:Adboost和GBDT;其中对于GBDT算法,存在两种改进,即:
- XGBoost
- LightGBM
一. XGBoost 算法
XGBoost是GBDT(梯度提升树)的一个改进版本
能够更快的、更高效率的训练模型
X代表的就是eXtreme(极致)
学习器:
决策树
将这些决策树称为”弱学习器“,这些”弱学习器“共同组成了XGboost
算法思想:
XGBoost的决策树之间是有先后顺序
后一棵决策树的生成会考虑前一棵决策树的预测结果,即:将前一棵决策树的偏差考虑在内,也就是更改y值
数据使用:
生成每棵决策树使用的是整个数据集

1. XGBoost 算法流程
-
构造初始化常数函数,以及模型跟新
F 0 ( x ) = f 0 ( x ) = 0 F_{0}(x)=f_{0}(x)=0 F0(x)=f0(x)=0F 1 ( x ) = F 0 ( x ) + f 1 ( x ) F_{1}(x)=F_{0}(x)+f_{1}(x) F1(x)=F0(x)+f1(x)
F 2 ( x ) = F 1 ( x ) + f 2 ( x ) F_{2}(x)=F_{1}(x)+f_{2}(x) F2(x)=F1(x)+f2(x)
. . . . . . ...... ......
F 0 ( x ) = F ( k − 1 ) ( x ) + f k ( x ) F_{0}(x)=F_{(k-1)}(x)+f_{k}(x) F0(x)=F(k−1)(x)+fk(x)
我们的目标为:求出函数 f 1 ( x ) f_{1}(x) f1(x), f 2 ( x ) f_{2}(x) f2(x),…, f k ( x ) f_{k}(x) fk(x)
-
定义损失函数
XGBoost算法的损失函数:在GBDT的基础上增加了正则化项,用于限制模型的复杂度
o b j = ∑ i = 1 n L ( y i , F i ( k ) ( x ) ) + ∑ i = 1 k Ω ( f i ) o b j=\sum_{i=1}^{n} L\left(y_{i}, F_{i}^{(k)}(x)\right)+\sum_{i=1}^{k} \Omega\left(f_{i}\right) obj=i=1∑nL(yi,Fi(k)(x))+i=1∑kΩ(fi)公式解释:
o b j 函数 obj函数 obj函数 为构建 k k k棵树的总损失预测误差 + 每棵树复杂度的惩罚项
对于正则化项,我们做出以下公式优化:
f k ( x ) = w q ( x ) f_{k}(x)=w_{q(x)} fk(x)=wq(x)
Ω ( f ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f)=\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2} Ω(f)=γT+21λj=1∑Twj2公式解释:
f k ( x ) f_{k}(x) fk(x)可以表示一棵树f 是一棵决策树, f k f_{k} fk是第 k k k棵决策树
x 是一个样本,丢进 f 函数 f函数 f函数中就需要对该样本进行预测
q ( x ) q(x) q(x) 表示进入的样本x落在哪个叶子节点中
w q ( x ) w_{q(x)} wq(x) 是叶子节点 q ( x ) q(x) q(x)的值先算在哪个叶子节点上,然后根据该叶子节点的值返回
Ω ( f ) \Omega(f) Ω(f)可以表示一棵树的复杂程度
T 表示这棵决策树叶子节点的数量:叶子节点越多,决策树越复杂
w j 2 w_{j}^{2} wj2 表示所有叶子节点值的平方和w w w为叶子节点的值
由于每个弱学习器拟合的都是残差,所以 w w w不能太大
如果模型企图去拟合离群点,那么 w w w就会变大此时,目标函数可以写为
L k = ∑ i = 1 n L [ y i , F k − 1 ( x ) + f k ( x i ) ] + ∑ j = 1 K Ω ( f j ) L^{k}=\sum_{i=1}^{n} L\left[y_{i}, F_{k-1}(x)+f_{k}\left(x_{i}\right)\right]+\sum_{j=1}^{K} \Omega\left(f_{j}\right) Lk=i=1∑nL[yi,Fk−1(x)+fk(xi)]+j=1∑KΩ(fj)公式推导:
L k L^{k} Lk
= ∑ i = 1 n L [ y i , F k − 1 ( x ) + f k ( x i ) ] + ∑ j = 1 K Ω ( f j ) =\sum_{i=1}^{n} L\left[y_{i}, F_{k-1}(x)+f_{k}\left(x_{i}\right)\right]+\sum_{j=1}^{K} \Omega\left(f_{j}\right) =∑i=1nL[yi,Fk−1(x)+fk(xi)]+∑

本文介绍了基于Boosting思想对GBDT改进的两种算法。XGBoost能更高效训练模型,其损失函数在GBDT基础上增加正则化项,通过二阶展开求最优解,还介绍了计算增益和特征选择方法;LightGBM由微软开发,能处理大规模数据,采用直方图离散化特征。
最低0.47元/天 解锁文章
10万+

被折叠的 条评论
为什么被折叠?



