随机森林、AdaBoost、GBDT、XGBoost区别及联系

集成学习分类:

集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。一般情况下,集成学习中的多个学习器都是同质的"弱学习器"。

1. Boosting:

  • 训练基分类器时采取串行方式,各基分类器之间有依赖。基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本给予更高的权重,测试时根据各层分类器的结构的加权得到最终结果。
  • Boosting能够提升弱分类器性能的原因是降低了偏差。
  • 代表方法:AdaBoost、GBDT、XGBoost

2.Bagging:

  • 在训练过程中,各基分类器之间无强依赖,可以进行并行训练。
  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Boot straping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

  3. 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

  • Bagging能够提高弱分类器性能的原因是降低了方差
  • 代表方法:随机森林

AdaBoost

AdaBoost的算法流程:

                            随机森林、AdaBoost、GBDT、XGBoost区别及联系_第1张图片

从Adaboost的例子中我们可以明显地看到Boosting的思想, 对分类正确的样本降低了权重, 对分类错误的样本升高或者保持权重不变。 在最后进行模型融合的过程中, 也根据错误率对基分类器进行加权融合。 错误率低的分类器拥有更大的“话语权”。


GBDT

Gradient Boosting是Boosting中的一大类算法, 其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器, 然后将训练好的弱分类器以累加的形式结合到现有模型中。 下面算法描述了Gradient Boosting算法的基本流程, 在每一轮迭代中, 首先计算出当前模型在所有样本上的负梯度, 然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重, 最终实现对模型的更新。采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT,

                                               随机森林、AdaBoost、GBDT、XGBoost区别及联系_第2张图片
由于GBDT是利用残差训练的, 在预测的过程中, 我们也需要把所有树的预测值加起来, 得到最终的预测结果。

  • 优点

(1) 预测阶段的计算速度快, 树与树之间可并行化计算。
(2) 在分布稠密的数据集上, 泛化能力和表达能力都很好
( 3) 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系, 并且也不需要对数据进行特殊的预处理如归一化等。

  • 局限性

( 1) GBDT在高维稀疏的数据集上, 表现不如支持向量机或者神经网络。
( 2) 训练过程需要串行训练, 只能在决策树内部采用一些局部并行的手段提高训练速度


XGBoost

原始的GBDT算法基于经验损失函数的负梯度来构造新的决策树, 只是在决策树构建完成后再进行剪枝。GBDT算法只利用了一阶的导数信息,XGBoost对损失函数做了二阶的泰勒展开,并在目标函数之外加入了正则项对整体求最优解,用以权衡目标函数的下降和模型的复杂程度,避免过拟合。所以不考虑细节方面,两者最大的不同就是目标函数的定义。 XGBoost在决策树构建阶段就加入了正则项, 即

                                                        

  • GBDT与XGBoost区别及联系

( 1) GBDT是机器学习算法, XGBoost是该算法的工程实现。
( 2) 在使用CART作为基分类器时, XGBoost显式地加入了正则项来控制模型的复杂度, 有利于防止过拟合, 从而提高模型的泛化能力。正则项里包含了树的叶子节点个数、每个叶子节点上输出score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
( 3) GBDT在模型训练时只使用了代价函数的一阶导数信息, XGBoost对代价函数进行二阶泰勒展开, 可以同时使用一阶和二阶导数。
( 4) 传统的GBDT采用CART作为基分类器, XGBoost支持多种类型的基分类器, 比如线性分类器。
( 5) 传统的GBDT在每轮迭代时使用全部的数据, XGBoost则采用了与随机森林相似的策略, 支持对数据进行采样。
( 6) 传统的GBDT没有设计对缺失值进行处理, XGBoost能够自动学习出缺失值的处理策略。

  • GBDT与Adboost的区别
    GBDT与Adboost最主要的区别在于两者如何识别模型的问题。Adaboost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。GBDT通过负梯度来识别问题,通过计算负梯度来改进模型。

随机森林

随机森林在bagging的基础上更进一步:

1.  样本的随机:从样本集中用Bootstrap随机选取n个样本

2.  特征的随机:从所有属性中随机选取K个属性,选择最佳分割属性作为节点建立CART决策树

3.  重复以上两步m次,即建立了m棵CART决策树

4.  这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

 

你可能感兴趣的:(随机森林、AdaBoost、GBDT、XGBoost区别及联系)