机器学习中集成学习知识点总结(Baggig(RF)+Boosting(AdaBoost+GBDT+XGBoost+LightGBM))

Date: 2019-08-19

机器学习岗位,集成学习是必不可少要了解的知识点,

一、 前言介绍relation:

所谓集成学习,是指构建多个分类器(弱分类器)对数据集进行预测,然后用某种策略将多个分类器预测的结果集成起来,作为最终预测结果。通俗比喻就是“三个臭皮匠赛过诸葛亮”,或一个公司董事会上的各董事投票决策,它要求每个弱分类器具备一定的“准确性”,分类器之间具备“差异性”。

集成学习根据各个弱分类器之间有无依赖关系,分为Boosting和Bagging两大流派:

Bagging流派,各分类器之间没有依赖关系,可各自并行,比如随机森林(Random Forest)

Boosting流派,各分类器之间有依赖关系,必须串行,比如传统的Boosting(Adaboost)和Gradient Boosting(GBDT、XGBoost、LightBoost)

二、Bagging流派:

2.1 原理

提到随机森林,就不得不提Bagging,Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归),同时Bagging的基学习器之间属于并列生成,不存在强依赖关系。 
Random Forest(随机森林)是Bagging的扩展变体,它在以决策树   为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括RF包括四个部分:1、随机选择样本(放回抽样);2、随机选择特征;3、构建决策树;4、随机森林投票(平均)。 
随机选择样本和Bagging相同,随机选择特征是指在树的构建中,会从样本集的特征集合中随机选择部分特征,然后再从这个子集中选择最优的属   性用于划分,这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的‘平均’特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型。 
(As a result of this randomness, the bias of the forest usually slightly increases (with respect to the bias of a single non-random tree) but, due to averaging, its variance also decreases, usually more than compensating for the increase in bias, hence yielding an overall better model.) 
在构建决策树的时候,RF的每棵决策树都最大可能的进行生长而不进行剪枝;在对预测输出进行结合时,RF通常对分类问题使用简单投票法,回归任务使用简单平均法。 
RF的重要特性是不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计,它可以在内部进行评估,也就是说在生成的过程中可以对误差进行无偏估计,由于每个基学习器只使用了训练集中约63.2%的样本,剩下约36.8%的样本可用做验证集来对其泛化性能进行“包外估计”。 
RF和Bagging对比:RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目增多,随机森林通常会收敛到更低的泛化误差。随机森林的训练效率也会高于Bagging,因为在单个决策树的构建中,Bagging使用的是‘确定性’决策树,在选择特征划分结点时,要对所有的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集。

2.2 优缺点

随机森林的优点较多,简单总结:1、在数据集上表现良好,相对于其他算法有较大的优势(训练速度、预测准确度);2、能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性;3、容易做成并行化方法。 
RF的缺点:在噪声较大的分类或者回归问题上回过拟合。

2.3  

决策树

  • ID3 信息增益:熵(数据的不确定性程度)的减少;一个属性的信息增益量越大,这个属性作为一棵树的根节点就能使这棵树更简洁。
    信息增益=分裂前的熵 – 分裂后的熵
    面对类别较少的离散数据时效果较好,但如果面对连续的数据(如体重、身高、年龄、距离等),或者每列数据没有明显的类别之分(最极端的例子的该列所有数据都独一无二),即每个值对应一类样本
  • C4.5信息增益比:克服了ID3用信息增益选择属性时偏向选择取值多的属性的不足(某个属性存在大量的不同值,在划分时将每个值分为一个结点

  • CART 使用基尼系数进行分类
    基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。

  • 分类与回归树(CART):二叉树形式,分类时:根据Gini指数选择划分特征
  • 回归时:Los为 平方损失函数,最小化均方误差选择划分特征,切分点(值)将数据切分成两部分,用平方误差最小的准则(最小二乘法)求解每个单元上的最优输出值(每个叶子节点上的预测值为所有样本的平均值)。

    用选定的对(j,s)划分区域并决定相应的输出值,每个叶子节点上的预测值为所有样本的平均值:

    可以参看该repository中的另外文章中介绍的回归树

  • 决策树的生成通常使用 信息增益最大、信息增益比最大或基尼指数最小作为特征选择的准则

2.4

随机森林

  • 是随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一决策树质检是没有关联的。在得到随机森林之后,当有一个新的样本输进的时候,就让森林中的每一棵决策树进行判断,判断样本属于哪一类,然后看哪一类被选择最多,就预测这个样本为这一类。
  • 随机采样
    • 随机行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。
      假如输入的样本为N个,那么采样的样本也是N个。这使得在训练的时候,每棵树的输入的样本都不是全部的样本,使得相对不容易出现over-fitting。

    • 随机列采样,从M个feature中,选择m个(m<<M)。
      对采样之后的数据使用完全分裂的方式建立决策树,这样的决策树的某个叶子节点要么无法继续分裂,要么里面所有的样本都是指向的同一分类。
  • 随机森林的随机性主要体现在两个方面:


    数据集的随机选取:从原始的数据集中采取有放回的抽样(bagging),构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。
    待选特征的随机选取:与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。

  • 随机森林 中同样有剪枝,限制决策树的最大深度,以及最小的样本分裂,最小的节点样本数目,样本分裂节点的信息增益或gini系数必须达到的阈值
  • 随机森林用于分类的话,划分标准是entropy或者gini系数
  • 随机森林用于回归的话,划分标准是mse(mean squared error)或者mae(mean absolute error)

    Why is it called random then?

  • 假如我们的数据有1000行,30列,随机森林的算法中,有两个不同水平的随机
  • At row level
    • 每棵树随机抽取了样本 数据的一部分,每棵树都是独立训练的,给出的预测结果也是独立的
  • At column level, feature random selection at node level of the decision tree
    • 每棵树在分支的时候,只使用了部分特征进行熵或者基尼系数的计算,比如说我们选择了3个特征进行分支,树的第一个分支的时候使用了第1,2,4个特征,然后计算这三个特征的指标(比如说Gini coefficients或者其他的一些指标来选择最佳的节点),这三个特征中某个特征用来分支,第二个分支的时候,重复就行这个操作,这个时候的特征就可能是第7,9,10个特征,然后重新计算特征选择的指标,然后寻找其中的最佳的特征进行分支

三、Boosting流派

提升方法也是集成学习中发展比较好的一个分支,其每个基分类器的学习不能进行并行,下一个基分类器行和上一个分类器是有着强依赖性的关系,只能串行(后面延伸的XGBoost的并行性是基于特征而言的,并不是基于tree(每一个基分类器))。其根据是否引入了梯度信息分为传统的Boosting方法(AdaBoost)和梯度提升树(GBDT+XGBoost+LightGBM)。前者是每一个分类器的学习是加大了上一个分类器分错样本的权重,减少上一个分类器分正确样本的权重【特征二:在最后组合最终分类器时,分类错误率大的基分类器在组合时权重较小,分类错误率小的基分类器在组合时权重较大。】。后者是基于梯度提升树的拓展方法,每次训练基分类器(学习)实际上是在减少目前的分类器组合得到的预测值和真实值之间的残差,后面有年龄预测例子解释,则因此最后的到的分类器=第一个分类器的预测值+残差1+参差2+……。GBDT是简单的提升提升树的思想,每次训练主要基于梯度的负方向(小),

而XGBoost做了如下改进:

计算梯度的二阶泰勒展式,所以考虑了梯度的一阶导数和二阶导数信息。但GBDT仅仅考虑了一阶导数信息;

在每一个基分类器的学习时加入了正则化项 (在该轮引入了降低偏差的思想,防止过拟合);

列采样(对特征进行采样);

可以自定义损失函数,只需要其满足一阶导数和二阶导数存在即可;

因为每次训练基分类器时需要对特征进行排序,所以在训练之前先将所有特征进行排序,并将结果保存在Block结构中,后续直接使用,减少时间开销!

3.1 AdaBoost

AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

具体说来,整个Adaboost 迭代算法就3步:

  1. 初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
  2. 训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
  3. 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

3.2 GBDT (Gradient Boost Decision Tree)

 

另一种boosting方法GBDT(Gradient Boost Decision Tree),则与AdaBoost不同,GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。

boosting集成学习由多个相关联的决策树联合决策,什么叫相关联?举个例子

  1. 有一个样本[数据->标签]是:[(2,4,5)-> 4]
  2. 第一棵决策树用这个样本训练的预测为3.3
  3. 那么第二棵决策树训练时的输入,这个样本就变成了:[(2,4,5)-> 0.7]
  4. 也就是说,下一棵决策树输入样本会与前面决策树的训练和预测相关

很快你会意识到,Xgboost为何也是一个boosting的集成学习了。

而一个回归树形成的关键点在于:

  • 分裂点依据什么来划分(如前面说的均方误差最小,loss);
  • 分类后的节点预测值是多少(如前面说,有一种是将叶子节点下各样本实际值得均值作为叶子节点预测误差,或者计算所得)

至于另一类集成学习方法,比如Random Forest(随机森林)算法,各个决策树是独立的、每个决策树在样本堆里随机选一批样本,随机选一批特征进行独立训练,各个决策树之间没有啥关系。本文暂不展开介绍。

说到Xgboost,不得不先从GBDT(Gradient Boosting Decision Tree)说起。而且前面说过,两者都是boosting方法(如图所示:Y = Y1 + Y2 + Y3)

 

 

 

咱们来看个年龄预测的例子。

简单起见,假定训练集只有4个人:A,B,C,D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工作两年的员工。

如果是用一棵传统的回归决策树来训练,会得到如下图所示结果:

 

 

 

 

现在我们使用GBDT来做这件事,由于数据太少,我们限定叶子节点最多有两个,即每棵树都只有一个分枝,并且限定只学两棵树。

我们会得到如下图所示结果:

 

 

 

在第一棵树分枝和图1一样,由于A,B年龄较为相近,C,D年龄较为相近,他们被分为左右两拨,每拨用平均年龄作为预测值。

  • 此时计算残差(残差的意思就是:A的实际值 - A的预测值 = A的残差),所以A的残差就是实际值14 - 预测值15 = 残差值-1。
  • 注意,A的预测值是指前面所有树累加的和,这里前面只有一棵树所以直接是15,如果还有树则需要都累加起来作为A的预测值。

残差在数理统计中是指实际观察值与估计值(拟合值)之间的差。“残差”蕴含了有关模型基本假设的重要信息。如果回归模型正确的话, 我们可以将残差看作误差的观测值。

进而得到A,B,C,D的残差分别为-1,1,-1,1。

然后拿它们的残差代替A B C D的原值-1、1、-1、1,到第二棵树去学习,第二棵树只有两个值1和-1,直接分成两个节点,即A和C分在左边,B和D分在右边,经过计算(比如A,实际值-1 - 预测值-1 = 残差0,比如C,实际值-1 - 预测值-1 = 0),此时所有人的残差都是0。

残差值都为0,相当于第二棵树的预测值和它们的实际值相等,则只需把第二棵树的结论累加到第一棵树上就能得到真实年龄了,即每个人都得到了真实的预测值。

换句话说,现在A,B,C,D的预测值都和真实年龄一致了。Perfect!

A: 14岁高一学生,购物较少,经常问学长问题,预测年龄A = 15 – 1 = 14

B: 16岁高三学生,购物较少,经常被学弟问问题,预测年龄B = 15 + 1 = 16

C: 24岁应届毕业生,购物较多,经常问师兄问题,预测年龄C = 25 – 1 = 24

D: 26岁工作两年员工,购物较多,经常被师弟问问题,预测年龄D = 25 + 1 = 26

 

3.3 XGBoost

XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进。原始的GBDT算法基于经验损失函数的负梯度来构造新的决策树,只是在决策树构建完成后再进行剪枝。而XGBoost在决策树构建阶段就加入了正则项,即
                                                                                          
                                           

XGBoost需要从所有的树结构中找出一个最优的树结构,这是一个NP-hard问题,因此在实际中通常采用贪心算法来构建一个次优的树结构,基本思想是从根节点开始,每次对一个叶子节点进行分裂,针对每一种可能的分裂,根据特定的准则选取最优的分裂。不同的决策树算法采用不同的准则,如IC3算法采用信息增益,C4.5算法为了克服信息增益中容易偏向取值较多的特征而采用信息增益比,CART算法使用基尼指数和平方误差,XGBoost也有特定的准则来选取最优分裂。

通过将预测值代入到损失函数中可求得损失函数的最小值

                                   

容易计算出分裂前后损失函数的差值为

                                   

XGBoost采用最大化这个差值作为准则来进行决策树的构建,通过遍历所有特征的所有取值,寻找使得损失函数前后相差最大时对应的分裂方式。此外,由于损失函数前后存在差值一定为正的限制,此时γ 起到了一定的预剪枝效果。

四、区别(面试常问,以上四种集成学习算法的原理和区别)

4.1 随机森林和GBDT区别

1. 随机森林采用的bagging思想[并行、降低方差],而GBDT采用的boosting思想[串行、降低偏差]。这两种方法都是Bootstrap思想的应用,Bootstrap是一种有放回的抽样方法思想。虽然都是有放回的抽样,但二者的区别在于:Bagging采用有放回的均匀取样,而Boosting根据错误率来取样(Boosting初始化时对每一个训练样例赋相等的权重1/n,然后用该算法对训练集训练t轮,每次训练后,对训练失败的样例赋以较大的权重),因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各训练集之间相互独立,弱分类器可并行,而Boosting的训练集的选择与前一轮的学习结果有关,是串行的。
2. 组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成。
3. 组成随机森林的树可以并行生成;而GBDT只能是串行生成。
4.  对于最终的输出结果而言,随机森林采用多数投票或者平均(回归)等;而GBDT则是将所有结果累加起来,或者加权累加起来。
5. 随机森林对异常值不敏感;GBDT对异常值非常敏感。
6. 随机森林对训练集一视同仁;GBDT是基于权值的弱分类器的集成。
7. 随机森林是通过减少模型方差提高性能;GBDT是通过减少模型偏差提高性能

 

4.2  AdaBoost和GBDT区别

  1. Adaboost与GBDT两者boosting的不同策略是两者的本质区别。
  2. Adaboost强调Adaptive(自适应),通过不断修改样本权重(增大分错样本权重,降低分对样本权重),不断加入弱分类器进行boosting。
  3. 而GBDT则是旨在不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。
  4. 而XGBoost的boosting策略则与GBDT类似,区别在于GBDT旨在通过不断加入新的树最快速度降低残差,而XGBoost则可以人为定义损失函数(可以是最小平方差、logistic loss function、hinge loss function或者人为定义的loss function),只需要知道该loss function对参数的一阶、二阶导数便可以进行boosting,其进一步增大了模型的泛华能力,其贪婪法寻找添加树的结构以及loss function中的损失函数与正则项等一系列策略也使得XGBoost预测更准确。
  5. XGBoost的具体策略可参考本专栏的XGBoost详述。 GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。
  6. XGBoost则可以自定义一套损失函数,借助泰勒展开(只需知道损失函数的一阶、二阶导数即可求出损失函数)转换为一元二次函数,得到极值点与对应极值即为所求。

 

4.3  GBDT 和XGBoost

1. 传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);
2. 传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;
3. XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;
4. shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);
5.  列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过   拟合,还能减少计算;
6. 对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动   学习出它的分裂方向;
7. XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

 

附上常问面试整理:

RF、GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。 
根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:即个体学习器之间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表就是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)。

1、RF

 

1.1 原理

提到随机森林,就不得不提Bagging,Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归),同时Bagging的基学习器之间属于并列生成,不存在强依赖关系。 
Random Forest(随机森林)是Bagging的扩展变体,它在以决策树   为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择,因此可以概括RF包括四个部分:1、随机选择样本(放回抽样);2、随机选择特征;3、构建决策树;4、随机森林投票(平均)。 
随机选择样本和Bagging相同,随机选择特征是指在树的构建中,会从样本集的特征集合中随机选择部分特征,然后再从这个子集中选择最优的属   性用于划分,这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的‘平均’特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型。 
(As a result of this randomness, the bias of the forest usually slightly increases (with respect to the bias of a single non-random tree) but, due to averaging, its variance also decreases, usually more than compensating for the increase in bias, hence yielding an overall better model.) 
在构建决策树的时候,RF的每棵决策树都最大可能的进行生长而不进行剪枝;在对预测输出进行结合时,RF通常对分类问题使用简单投票法,回归任务使用简单平均法。 
RF的重要特性是不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计,它可以在内部进行评估,也就是说在生成的过程中可以对误差进行无偏估计,由于每个基学习器只使用了训练集中约63.2%的样本,剩下约36.8%的样本可用做验证集来对其泛化性能进行“包外估计”。 
RF和Bagging对比:RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目增多,随机森林通常会收敛到更低的泛化误差。随机森林的训练效率也会高于Bagging,因为在单个决策树的构建中,Bagging使用的是‘确定性’决策树,在选择特征划分结点时,要对所有的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集。

1.2 优缺点

随机森林的优点较多,简单总结:1、在数据集上表现良好,相对于其他算法有较大的优势(训练速度、预测准确度);2、能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性;3、容易做成并行化方法。 
RF的缺点:在噪声较大的分类或者回归问题上回过拟合。

 

2、GBDT

提GBDT之前,谈一下Boosting,Boosting是一种与Bagging很类似的技术。不论是Boosting还是Bagging,所使用的多个分类器类型都是一致的。但是在前者当中,不同的分类器是通过串行训练而获得的,每个新分类器都根据已训练的分类器的性能来进行训练。Boosting是通过关注被已有分类器错分的那些数据来获得新的分类器。 
由于Boosting分类的结果是基于所有分类器的加权求和结果的,因此Boosting与Bagging不太一样,Bagging中的分类器权值是一样的,而Boosting中的分类器权重并不相等,每个权重代表对应的分类器在上一轮迭代中的成功度。

 

2.1 原理

GBDT与传统的Boosting区别较大,它的每一次计算都是为了减少上一次的残差,而为了消除残差,我们可以在残差减小的梯度方向上建立模型,所以说,在GradientBoost中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法,与传统的Boosting中关注正确错误的样本加权有着很大的区别。 
在GradientBoosting算法中,关键就是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。 
GBDT的会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树)。

 

2.2 优缺点

GBDT的性能在RF的基础上又有一步提升,因此其优点也很明显,1、它能灵活的处理各种类型的数据;2、在相对较少的调参时间下,预测的准确度较高。 
当然由于它是Boosting,因此基学习器之前存在串行关系,难以并行训练数据。

 

3、XGBoost

 

3.1 原理

XGBoost的性能在GBDT上又有一步提升,而其性能也能通过各种比赛管窥一二。坊间对XGBoost最大的认知在于其能够自动地运用CPU的多线程进行并行计算,同时在算法精度上也进行了精度的提高。 
由于GBDT在合理的参数设置下,往往要生成一定数量的树才能达到令人满意的准确率,在数据集较复杂时,模型可能需要几千次迭代运算。但是XGBoost利用并行的CPU更好的解决了这个问题。 
其实XGBoost和GBDT的差别也较大,这一点也同样体现在其性能表现上,详见XGBoost与GBDT的区别。

 

4、区别

 

4.1 GBDT和XGBoost区别


* 传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);
* 传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;
* XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;
* shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);
* 列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过   拟合,还能减少计算;
* 对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动   学习出它的分裂方向;
* XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行   的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

参考资料:总结的都比较全面:

RF、GBDT、XGBoost面试级整理

GBDT和XGBoost的区别

机器学习-树模型理论(GDBT,xgboost,lightBoost,随机森林)

Adaboost、GBDT与XGBoost的区别

GBDT、XGBoost、LightGBM的区别和联系

集成学习中Adaboost, 提升树,bagging和随机森林有什么区别?

随机森林和GBDT的区别

提升树,bagging与随机森林

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值