集成学习面试整理

什么是集成学习?

构建并结合多个学习器来完成学习任务;

主要分为两类:

  1. 基本学习器之间存在强依赖关系,必须串行执行的序列化方法——Boosting

  2. 基本学习器之间不存在强依赖关系,可同时生成的并行化方法——Bagging,随机森林

Boosting

1. 介绍 Boosting

Boosting 通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合。

Boosting 主要关注两个问题:

  1. 每一轮如何改变训练数据的权重

    提高在前一轮被错误分类的样本的权重,降低在前一轮被正确分类的样本的权重

  2. 如何将多个弱分类器组合成一个强分类器

    • AdaBoost 通过加权多数表决
    • 提升树是在每一步将模型进行叠加

2. 介绍 Boosting 的代表算法:AdaBoost

训练数据的过程:将训练数据集中的每个样本赋予一个权值,开始的时候,权重都初始化为相等值;1)首先,在整个数据集上训练一个弱分类器,并计算错误率;2)在同一个数据集上再次训练一个弱分类器,在训练的过程中,权值重新调整,其中在上一次分类中分对的样本权值将会降低,分错的样本权值将会提高。3)重复上述过程,串行的生成多个分类器,为了从所有弱分类器中得到多个分类结果,为每个分类器分配一个权值alpha,这些alpha值是基于每个弱分类器的错误率计算的。

优缺点

  • 优点:泛化错误率低,易编码,可以应该在大部分分类器上,无参数可调
  • 缺点:对离群数据点敏感

3. 介绍 GBDT

3.1 回归树(DT:Decision Tree)

GBDT中的树全部都是回归树(不是分类树),核心就是累加所有树的结果作为最终结果。

GBDT调整之后可以用于分类问题,但是内部还是回归树。(回归树与分类树主要的区别在于特征选择,回归树用的是最小化均方误差,分类树用的是最小化 Gini 指数)

3.2 梯度迭代(GB:Gradient Boosting)

提升树(Boosting Tree)是一种加法模型,逐个学习每一个模型,每一次学习的数据是上一个模型的残差,GBDT的核心就是,每一棵树学习的是上一个模型的负向梯度

梯度 Gradient 体现在:无论前面一棵树的 cost funtion 是什么,是均方差还是方差,是要它以误差作为衡量标准,那么负向梯度就是它的全局最优方向。

3.3 缩减(Shrinkage)

Shrinkage 是 GBDT 算法的一个重要的演进分支,目前大部分源码都是基于这个版本的。

核心思想:Shrinkage 认为每次走一小步来逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易防止过拟合。也就是说,它不信任每次学习到的残差,它认为每棵树只学习到了真理的一小部分,累加的时候只累加一小部分,通过多学习几棵树来弥补不足。

具体做法:仍然以 gradient 作为学习目标,但是对于 gradient 学习出来的结果,只累加一小部分(step*梯度)逐步逼近目标,step 一般都比较小(0.01 ~ 0.001),导致各个树的 gradient 是渐变而不是陡变的。

本质上,Shrinkage 为每一棵树设置了一个 weight,累加时要乘以这个 weight,但和 gradient 没有关系。这个 weight 就是 step。跟 AdaBoost 一样,Shrinkage 能减少过拟合是经验证明的,目前还没有理论证明。

3.4 GBDT 适用范围

  • GBDT 可以用于回归问题(线性和非线性),相对 LR 仅能用于线性回归,GBDT 适用面更广
  • GBDT 也可以用于二分类问题(设定阈值,大于为正,否则为负)和多分类问题

3.5 GBDT 相关问题

  1. GBDT 相比于决策树有什么优点

    泛化性能更好!GBDT 的最好的好处在于,每一步的 gradient 计算其实就是变相的增加了分类错误的权重,而已经分对的样本的 gradient 则都趋近于 0. 这样后面更加专注于那些分错的样本。

    1. 与传统 Boosting 的区别

    不是对样本进行权值改变,而是改变么一轮的回归目标(上一个模型的预测残差)

    1. GBDT 的优缺点

    优点

    1. 能够灵活处理各种类型的数据,不需要特征归一化(LR 需要)
    2. 在相对较少的调参情况下,预测的准确率相对较高(相对 SVM)
    3. 与传统决策树相比,每一步的 gradient 计算相当于沿着最优的防线过去学习,变相增大了分类错误样本的权重,使用更少特征来进行决策,防止过拟合

    缺点

    是一个串行过程,不能并行化,不适合线性模型

    1. GBDT 如何防止过拟合

    限制树的棵树、设置学习率、设置每个叶子结点的最小节点数、增加惩罚想、基于 Bagging 思想进行抽样

Bagging

1. 介绍 Bagging

Bagging (bootstrap aggregating),套袋法,算法过程如下:

  1. 假设训练集中共有 N 个样本,每次从中有放回的抽取 N 次,这样就得到一个有 N 个样本的数据集;然后我们这样抽取 S 次,就得到 S 个有 N 个样本的数据集(一般来说取出的样本包含了 63% 的原始数据,有 36% 的数据没有被采样到)
  2. 对这 S 个数据集,训练 S 个模型
  3. 最后的结果:
    • 分类问题:对 S 个模型采用投票表决的方式
    • 回归问题:对 S 个模型的结果求均值

Bagging 的代表算法:随机森林

2. Bagging 的优点

  1. 高效。Bagging 集成与直接训练集学习器的复杂度同阶
  2. Bagging 能不经修改的适用于分类、回归任务
  3. 包外估计(out-of-bag estimate)。使用剩下来的 32% 的样本作为验证集

3. 介绍 Bagging 的代表算法:随机森林

随机森林(Random Forest)是 Bagging 的一个变体。它是以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入随机属性选择。

原来的决策树从所有属性中,选择最优属性。Random Forest 的每一颗决策树中的每一个节点,先从该节点的属性集中随机选择 K 个属性的子集,然后从这个属性子集中选择最优属性进行划分。 K 控制了随机性的引入程度,是一个重要的超参数。

最后的预测结果:

  • 分类问题:简单投票法
  • 回归问题:简单平均法

4. 随机森林的优缺点

优点

  1. 由于每次不再考虑全部的属性,而是一个属性子集,所有相比 Bagging 计算开销更小,训练效率更高
  2. 由于增加了属性的扰动,随机森林中基学习器的性能降低,使得随机森林在起始时性能较差,但是随着基学习器的增多,随机森林通常会收敛于相比 Bagging 更低的泛化误差
  3. 两个随机性的引入,使得随机森林不容易过拟合,具有很好的抗噪声能力
  4. 对数据的适应能力强,可以处理离散和连续的值,不需要规范化
  5. 可以得到变量的重要性,基于 oob 误分类率和基于 Gini 系数的变化

缺点

  1. 在噪声较大的时候容易过拟合

Boosting 与 Bagging

1. Boosting 与 Bagging 的区别

区别主要在这 5 个方面:

  1. 样本选择上

    • Boosting:每一轮训练集不变,只是训练数据的权重发生变化,权值是根据上一轮的分类结果进行调整的
    • Bagging:训练集是在原始数据集中有放回选取的,从原始数据集选出的各轮训练集之间是独立的
  2. 样本权重

    • Boosting:根据错误率不断调整样本的权值,错误分类的样本的权重更大
    • Bagging:每个样本的权值一样
  3. 预测函数

    • Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器有更大的权重
    • Bagging:所有若分类器权重相等
  4. 并行计算:

    • Boosting:串行执行,因为后一个模型的样本权重需要前一轮模型的结果

GBDT 与 随机森林

相同点

  1. GBDT 和 随机森林 都是有多棵树组成
  2. 最终的结果都由多棵树共同决定

不同点

  1. 组成随机森林的树可以是分类树或者回归树;GBDT 只能是回归树
  2. 组成随机森林的树可以并行生成(Bagging);GBDT 只能串行生成(Boosting)
  3. 对于最终的输出结果而言,随机森林使用多数投票或者简单平均;GBDT 通常是累加,或者加权累加
  4. 随机森林对异常值不敏感;GBDT 对异常值非常敏感
  5. 随机森林对训练集一视同仁权值一样;GBDT 是基于权值的弱分类器的集成
  6. 随机森林通过减小方差提高性能;GBDT 通过减少偏差提高性能

注:

Bagging + 决策树 = 随机森林

AdaBoost + 决策树 = 提升树

Gradient Boosting + 决策树 = GBDT

从偏差方差去对boosting和bagging进行理解

https://www.cnblogs.com/earendil/p/8872001.html

Reference

http://www.cnblogs.com/dudumiaomiao/p/6361777.html (基本介绍和区别)

http://gitbook.cn/books/5a31eb9a7cdec87af6d848a0/index.html#undefined (RF,GBDT)

https://blog.csdn.net/qq_34896915/article/details/73771287 (GBDT,XGBOOST)