2019-05-30(机器学习——集成学习)

参考原文

前言

如同人无完人,机器学习中要学习一个泛化能力完美(适用于各类数据)的模型是相当困难的,甚至是不可能的,我们只能得到有某种偏好的模型(对某些类型的数据集的泛化能力强)。集成学习的基本思想就是组合弱分类器来实现一个强分类器,不同的集成方法在具体实现上各有不同,主要体现在:数据集的采集、弱分类器的训练次序、模型的组合方式上,下面将作一个具体的介绍

集成方法

集成学习将不同的机器学习几乎通过组合的方式,得到一个效果更好的模型,以达到减少方差(bagging)、偏差(boosting)或改进预测(stacking)的效果。
集成方法一种分类方法如下:

  • 序列集成方法:若分类器按照顺序生成(AdaBoost),后训练的模型实在前置模型的基础上得到的。
  • 并行集成方法:若分类器并行生成(bagging),这种方法用通过训练多个若分类器来共同决定最终的分类结果。
    集成方法的特点总结:
  • 多个弱匪类方法聚集来提高分类准确率(可以是同种算法,也可以是不同种)
  • 多个分类器训练完后,通过投票来共同决定最终结果
  • 不是严格的分类器,而是分类器的组合
  • 通常会好于单个弱分类器的效果
    以上特征使得集成方法产生两个主要问题
  • 如何训练每个算法
  • 如何组合弱分类器

bagging(bootstrap aggregating,装袋)

  • 1、采用bootstrap方法进行有放回采样,进行k轮采样,产生k个数据集。
  • 2、采用已获得的训练集来训练模型,一共可以得到k个模型
  • 3、k个模型进行投票;对于回归问题,计算k个模型的预测结果并取平均。

总结:

  • bagging实际上是通过降低最终分类器的方差来提高模型的稳定性,达到提高泛化性能的效果
  • bagging的采样过程中每个样本被选中的概率是相同的,所以并不会有侧重地训练任何特定的样本。

典型算法

  • 随机森林是典型的bagging模型,用来训练各模型的训练集由bootstrap算法产生,这保证了训练集的独立性
  • 随机森林中各个树的随机性是通过为每棵树采用不同的特征子集进行训练达到的,这就降低了各个决策树模型的相关性,从而使最终模型相对于各个弱分类器有更小的方差,提高了模型的稳定性(当然,随机性会使模型的偏差略微增加,但从整体上看,模型的效果更好了)

boosting

boost的两个核心问题:

  • 弱分类器的每轮迭代中,对于训练集,如何调整权重来改变训练集的分布
    提高被前置模型分类错误的样例的权值,减少被前置模型正确分类的权值。
  • 通过什么方式组合弱分类器
    线性组合
    AdaBoost
    进行t轮训练,每轮训练以后,对当前模型分类错误(正确)的样本,分别提高(降低)分类权重,从而让分类器以后的学习更加注重分类错误的样本,这样一共得到t个模型。将每步生成的模型叠加,得到最终的模型
    GBDT
    每次训练都减少上一次的残差,GBDT在残差减少的方向(负梯度方向)建立一个新的模型。

Stacking

stacking是指先用bagging的方法得到多个弱分类器,然后用各个弱分类器的结果作为出入,训练一个强分类器,理论上,stacking可以表前两种集成方法(bagging、boosting),只需要采用合适的模型组合策略即可,实际中,常用的是logistic回归作为组合策略。
流程图如下:
原图

2019-05-30(机器学习——集成学习)

决策树和上述集成方法的组合

bagging + DT:随机森林
AdaBoost + DT:提升树
Gradient Boosting + DT:GBDT