机器学习笔记 -- 集成学习 Ensemble Learning

集成学习(Ensemble Learning)

  • 一、Bagging(Bootstrap Aggregating)
      • 随机森林
  • 二、Boosting
      • AdaBoost(Adaptive boosting)
      • GBDT(Gradient Boosting Decision Tree)
  • 三、XGBoost(eXtreme Gradient Boosting)
  • 四、Stacking



集成学习方法是将几种机器学习技术组合成一个预测模型的元算法,以达到减小方差(bagging)、偏差(boosting)或改进预测(stacking)的效果(bagging是减少variance,而boosting是减少bias)。集成方法可分为两类:

  • 并行集成方法,其中参与训练的基础学习器并行生成(例如 Random Forest)。并行方法的原理是利用基础学习器之间的独立性,通过平均可以显著降低错误。
  • 序列集成方法,其中参与训练的基础学习器按照顺序生成(例如 AdaBoost)。序列方法的原理是利用基础学习器之间的依赖关系。通过对之前训练中错误标记的样本赋值较高的权重,可以提高整体的预测效果。

集成学习法的特点:

  1. 将多个分类方法聚集在一起,以提高分类的准确率。(这些算法可以是不同的算法,也可以是相同的算法。)
  2. 集成学习法由训练数据构建一组基分类器,然后通过对每个基分类器的预测进行投票来进行分类
  3. 严格来说,集成学习并不算是一种分类器,而是一种分类器结合的方法。
  4. 通常一个集成分类器的分类性能会好于单个分类器
  5. 如果把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。

两个问题:

  1. 怎么训练每个算法?
  2. 怎么融合每个算法?

一、Bagging(Bootstrap Aggregating)

Bagging 的主要步骤:

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中;n足够大时,每轮被抽中的样本大约占 0.632 ( 1 − 1 e 1- \frac{1}{e} 1e1) )。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  3. 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

机器学习笔记 -- 集成学习 Ensemble Learning_第1张图片

随机森林

随机森林是Bagging的一个扩展变体,RF在以决策树为基础学习器构建Bagging集成的基础上,进一步在决策树训练过程中引入了随机属性选择。对每个节点,先从该节点的属性集合中随机选择k个,再从这k个属性里面选取一个最优属性进行划分。(一般推荐 k = log ⁡ 2 d k=\log_2{d} k=log2d。——《机器学习》)


二、Boosting

机器学习笔记 -- 集成学习 Ensemble Learning_第2张图片

关于Boosting的两个核心问题:

  1. 在每一轮如何改变训练数据的权值或概率分布?
    通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
  2. 通过什么方式来组合弱分类器?
    通过加法模型将弱分类器进行线性组合。

AdaBoost(Adaptive boosting)

AdaBoost是典型的Boosting算法,属于Boosting家族的一员。由于采用的损失函数不同,Boosting算法也因此有了不同的类型,AdaBoost就是损失函数为指数损失的Boosting算法。 
AdaBoost算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练 t 轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。将每一步生成的模型叠加得到最终模型。
机器学习笔记 -- 集成学习 Ensemble Learning_第3张图片

GBDT(Gradient Boosting Decision Tree)

GBDT同为Boosting家族的一员,它和Adaboost有很大的不同。Adaboost 是利用前一轮弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去,简单的说是Boosting框架+任意基学习器算法+指数损失函数。GBDT也是迭代,也使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同,简单的说Boosting框架+CART回归树模型+任意损失函数
GBDT每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。

Boosting的最大好处在于,每一步的残差计算其实变相地增大了分错instance的权重,而已经分对的instance则都趋向于0。这样后面的树就能越来越专注那些前面被分错的instance。

梯度提升树(GBDT)原理小结


三、XGBoost(eXtreme Gradient Boosting)

XGBoost全名极端梯度提升,XGBoost是集成学习方法的王牌,在Kaggle数据挖掘比赛中,大部分获胜者用了XGBoost,XGBoost在绝大多数的回归和分类问题上表现的十分顶尖,本文较详细的介绍了XGBoost的算法原理。

XGBoost算法原理小结
一文读懂机器学习大杀器XGBoost原理
机器学习算法总结(四)——GBDT与XGBOOST
梯度提升决策树(GBDT)与XGBoost、LightGBM



四、Stacking

Stacking方法是指训练一个模型用于组合其他各个模型。首先我们先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。理论上,Stacking可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,我们通常使用logistic回归作为组合策略。

如下图,先在整个训练数据集上通过bootstrap抽样得到各个训练集合,得到一系列分类模型,然后将输出用于训练第二层分类–器。

机器学习笔记 -- 集成学习 Ensemble Learning_第4张图片



参考
机器学习–集成学习(Ensemble Learning)

你可能感兴趣的:(机器学习)