从决策树、GBDT到XGBoost和LightGBM总结

一、决策树

决策树的构建还是基于我们传统的数据结构与算法的基础上面延伸而来的,下面的思维导图简单的总结了一下决策树的部分知识:

决策树的知识要点

这部分的知识,在李航的统计学习方法上面总结的非常好。

二、集成学习

集成学习的思路是通过合并多个模型来提升机器学习性能。一般就是分为三类

方式 训练方式 基分类器之间关系 模型代表 作用
Boosting 串行 有依赖关系 Adaboost 减少偏差
Bagging 可以并行 无强依赖关系 随机森林 减少方差
Stacking 提升预测结果

下面是针对串行和并行的一个解释和区别。他们本质的区别就是是利用了基础模型之间的依赖关系还是利用了基础模型的独立性。

  • 串行集成方法,这种方法串行地生成基础模型(如AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。
  • 并行集成方法,这种方法并行地生成基础模型(如Random Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。
2.1、Bagging(装袋)

Bagging是bootstrap aggregating的简写。先说一下bootstrap,bootstrap也称为自助法,它是一种有放回的抽样方法,目的为了得到统计量的分布以及置信区间。具体步骤如下
1)、采用重抽样方法(有放回抽样)从原始样本中抽取一定数量的样本
2)、根据抽出的样本计算想要得到的统计量T
3)、重复上述N次(一般大于1000),得到N个统计量T
4)、根据这N个统计量,即可计算出统计量的置信区间
在Bagging方法中,利用bootstrap方法从整体数据集中采取有放回抽样得到N个子数据集,在每个子数据集上学习出一个模型,最后的预测结果利用N个子模型的输出得到,具体地操作方式:分类问题采用N个模型预测投票的方式,回归问题采用N个模型预测平均的方式。
针对方差和偏差的分析如下:
1、在bias层面上:
由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance,本质上各个子模型虽然近似,但是并不是独立的,所以有了下面的公式:

从这里,我们就呢能看出bagging后的bias和单个子模型的接近,一般来说不能显著降低bias。
2、在variance层面上思考
1)、在各个子模型是相互独立的情况下,这个时候,是可以显著的降低variance的。

2)、要是各个子模型完全相同,这个情况下面的话,就不会降低variance了。

bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。
进一步用公式进行说明,假设我们有n个随机变量,方差为σ^2,两两变量之间的相关性为ρ,

那么bagging降低就是第二项的值,二随机森林降低的就是两厢的值。

2.2、 Boosting

提升方法(Boosting)是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。在提升算法里面,有非常经典的算法比如Adaboost,梯度提升树算法里面有我们最为常用的XGBoost、LightGBM、CATBoost。这里不对XGBoost之类的算法进行严格的推荐,好的文章,我会放到后面的参考文献里面,这里就是将一些重要的部门给说明了。
Boosting这种从优化的角度来说,还是采用了前向分步算法这种贪心算法的思路去最小化损失函数。损失函数求解参数如下:

(1)提升树方法
对于回归问题来说,我们就是需要去拟合一下当前的一个参数,具体的公式:

具体的残差如下

(2)梯度提升树
提升树方法里面的损失函数是平方损失函数或者指数损失函数的时候,虽然每一步的优化是非常简单的,但是实际上来说每一步的优化都是非常不容易的。梯度提升树的方式就利用了最速下降法的近似方法,利用了损失函数的负梯度在当前模型的值来作为提升树算法中的残差的近似值。

在决策树中,每个被放入模型的任意样本 最终一个都会落到一个叶子节点上。而对于回归树,每个叶子节点上 的值是这个叶子节点上所有样本的均值。在GBDT中,每个样本的预测结果可以表示为所有树上结果的一个加权的求和:

这里
(3)XGBoost
XGBoost的推导过程中,主要是利用到了泰勒展开到了二阶导数的位置。这里XGBoost的推导过程还是有长,建议大家看看原来的论文吧。这里主要是说明一下XGBoost里面存在的很多特点:
1、XGBoost背后也是CART树作为基学习期,这个就意味着XGBoost中生成的树都是二叉树。
2、XGBoost作为了GBDT的一个改进,在对每个样本进行预测的时候,每个叶子节点上会有一个预测的分数,也就是叶子权重。这个叶子权重就是所有在这个叶子节点上的样本在这一棵树上的回归取值。

3、XGBoost的目标函数=传统损失函数 + 模型复杂度,所以从这个角度,来看问题的话,目标函数已经考虑到了模型的复杂度,需要防止过拟合的出现。

这里提下XGBoost里面的一些参数

参数 集成算法 弱评估器 其他过程
n_estimators y
learning_rate y
silent y
subsample y
objective y
boosterth y
gamma y
min_child_weight y
max_delta_step y
colsample_bytree y
colsample_bylevel y
reg_alpha y
reg_lambda y
n_thread y
n_jobs y
scale_pos_weight y
abse_score y
seed y
random_state y
missing y
importance_type y
2.3、Stacking

Stacking是通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。

三、XGBoost、LightGBMt总结和比较

LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。

3.1、XGBoost和LightGBM对比

在XGBoost的基础上面,LightGBM做出了一下的几个优化方式:

  • 基于Histogram的决策树算法
  • 带深度限制的Leaf-wise的叶子生长策略
  • 直方图做差加速直接
  • 支持类别特征(Categorical Feature)
  • Cache命中率优化
  • 基于直方图的稀疏特征优化多线程优化。
    这里的详细的几个说明,请见https://zhuanlan.zhihu.com/p/73045333。
3.2、XGBoost和LightGBM的参数对比
参数 XGBoost LightGBM
正则化 L1/L2 L1/L2
列采样 yes yes
Exact Gradient yes yes
近似算法 yes no
稀疏数据 yes yes
分布式并行 yes yes
缓存 yes no
out of core yes no
加权数据 yes yes
dropout no yes
bagging yes yes
最大深度控制
GPU支持 no yes
用途 回归、分类、rank 回归、分类、lambdrank
网络通信 point-to-point collective-communication
树增长方式 level-wise leaf-wise
基于算法 pre-sorted histgram
CategoricalFeatures 无优化 优化
Continued train with inputGBDT model no yes
Continued train with inputl no yes
early stopping training and predctionl no yes

思考题

参考资料

1、https://item.jd.com/46963766055.html
2、https://blog.statsbot.co/ensemble-learning-d1dcd548e936
3、https://zhuanlan.zhihu.com/p/27689464
4、https://www.zhihu.com/question/41354392/answer/98658997
5、https://zhuanlan.zhihu.com/p/73045333

你可能感兴趣的:(从决策树、GBDT到XGBoost和LightGBM总结)