【集成算法专题】:Boosting与AdaBoost
1. Boosting的基本思想和基本元素
装袋法Bagging:降低方差来降低整体泛化误差
提升法Boosting:降低整体偏差来降低泛化误差
- Bagging PK Boosting:
装袋法 Bagging | 提升法 Boosting | |
---|---|---|
弱评估器 | 相互独立,并行构建 | 相互关联,按顺序依次构建 先构建弱分类器的预测效果影响后续模型的构建 |
建树前的抽样方式 | 样本有放回抽样 样本无放回抽样 |
样本有放回抽样 样本无放回抽样 先构建弱分类器的效果可能会影响抽样细节 |
集成的结果 | 回归平均 分类众数 |
每个算法具有自己独特的规则: (1)表现为某种分数的加权平均 (2)使用输出函数 |
目标 | 降低方差 提高模型整体的稳定性来提升泛化能力 本质是从“平均”这一数学行为中获利 |
降低偏差 提高模型整体的精确度来提升泛化能力 相信众多弱分类器叠加后可以等同于强分类器 |
单个评估器容易过拟合的时候 | 具有一定的抗过拟合能力 | 具有一定的抗过拟合能力 |
单个评估器的效力比较弱的时候 | 可能失效 | 大概率会提升模型表现 |
代表算法 | 随机森林 | 梯度提升树、AdaBoost |
Bagging与 Boosting弱评估器区别:
- Bagging算法是一次性建立多个平行独立的弱评估器,并让所有评估器并行运算。弱评估器的独立性越强,该算法性能越好。
- Boosting算法是逐一建立多个弱评估器(基本上决策树),并且下一个弱评估器的建立方式依赖于上一个弱评估器的结果,最终综合多个弱评估器的结果进行输出,因此Boosting算法中的弱评估器不仅不是相互独立的,反而是强相关的,同时该算法也不依赖于弱分类器之间的独立性来提升结果。
- Bagging不同算法之间的核心区别:以不同的方式实现“独立性”(随机性)
- Boosting不同算法之间的核心区别:上一个弱评估器的评估结果具体如何影响下一个弱评估器的建立过程。(使用何种方法)
Boosting解答的两个关键问题:
-
如何改变训练样本权重或者概率分布?
- 提高前一轮被弱分类器分类错误样本的权重,并且降低分类正确的样本权重
-
如何将多个弱分类器组合成一个强分类器?
- 对多个弱分类器进行线性组合,提高分类效果好的弱分类器的权重,降低分类误差率高的弱分类器的权重
Bossting算法的三大特色:降低偏差、逐一建树、以独特规则输出结果
Boosting算法的三大基本元素:
- 损失函数:用以衡量模型预测结果与真是结果的差异
- 弱评估器:(一般为)决策树,不同的boosting算法使用不同的建树流程
- 综合集成结果:集成算法具体如何输出集成结果
Bossting算法的自适应建模基本流程:
- 依据上一个弱评估器的结果,计算损失函数Loss
- 使用上一个输出结果的Loss自适应地影响下一个弱评估器的构建
- 集成模型输出的结果,受到整体所有弱评估器的影响
周志华老师2017年提出的深度森林算法既不是Boosting也不是Bagging,而是以深度学习思路重新集成决策树后得到的独特算法,算是模型融合的一部分
2. AdaBoost(AdaBoost的损失函数值域必须在0~1
)
基本思想及流程:
Adaboost目的:从训练数据中学习一系列弱分类器,然后将其按一定权重累加起来得到强分类器。
Adaboost流程:
- 刚开始每个样本对应的权重是相等的,在全样本分布下训练一个基本分类器c1,根据该基分类器的结果和损失函数值,对于c1错分的样本增加其权重,对正确分类的样本降低其权重。这样使得错分的样本突出出来,并得到一个新的样本分布;
- 同时根据分类情况赋予c1一个权重,表示其重要程度,分类正确率越高权重越大;
- 然后在新的样本分布下对分类器进行训练,得到c2及其权重。
- 依此类推,得到M个基本分类器及其权重。
AdaBoost三要素:加性模型、指数函数为损失函数、前向分布算法
- 加性模型:模型由多个基模型求和的形式构造起来的
- 前向分布算法:针对加性模型的特点,从前往后每次只优化一个基模型的参数,每一步叠加之后便可逐步逼近目标函数
AdaBoost两大贡献:
- 首次根据之前弱评估器的结果自适应的影响后续建模过程
- 在Boosting算法中,首次实现考虑全部弱评估器结果的输出方式
在上述过程中,上一个基分类器的结果通过影响样本权重,即影响数据分布来影响下一个基分类器的建立,整个过程是自适应的。当全部弱评估器都被建立后,集成算法的输出等于所有弱评估器输出值的加权平均,加权所有的权重在建树过程中被自适应的计算出来。
ADBoost升级版本:在建立每棵树之前,允许随机抽样特征,这使得ADBoost中的决策树行为更加接近Bagging中的决策树。
AdaBoost一些参数:
参数 | 参数含义 |
---|---|
base_estimators | 弱评估器 |
n_estimators | 集成算法中弱评估器的数量 |
learning_rate | 迭代中所使用的学习率 |
algorithm(分类器专属) | 用于指定分类ADB中使用的具体实现方法 |
loss(回归器专属) | 用于指定回归ADB中使用的损失函数 |
random_state | 用于控制每次建树之前随机抽样过程的随机数种子 |
- 参数
base_estimator
,属性base_estimaors_
与estimators_
base_estimaors_
可以指定为任意一个类型的弱评估器
ADB分类器的弱评估器是最大深度为1的树桩。回归器的弱评估器是最大深度为3的树苗
base_estimaors_
查看当前弱评估器
estimators_
查看当前集成模型中所有弱评估器的数量
在ADB中分类任务对应分类树,回归任务对应回归树;但是从GBDT开始所有任务的弱分类器都是回归树。
- 参数
learning_rate
在Boosting集成算法中,集成算法的输出H(x)
往往是多个弱评估器的输出结果的加权(树的权重)平均结果。
该学习率参数控制Boosting集成过程中弱评估器的增长速度。
当学习率很大,弱评估器增长的更快,我们所需的n_estimators更少。