机器学习之提升方法Adaboost算法

文章目录

    • 1.背景
    • 2.基本原理
    • 3.Adaboost算法
    • 4.周志华老师Boosting25周年
    • 5.Adaboost算法优缺点
    • 6.Q&A

1.背景

集成学习(ensemble learning)通过构建并结合多个学习器来提升性能
集成学习分为两大类:
个体分类器存在强依赖方法(Boosting)
个体学习器之间不存在强依赖关系(Bagging,随机森林)
提升方法的思路:
对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。
对于提升方法来说,有两个问题:

  • 在每一轮如何改变训练数据的权值与概率分布
  • 如何将若分类器组合成一个强分类器

Boosting类算法核心理念
将多个弱分类器进行合理的结合,使其成为一个强分类器,可以理解成“前人栽树,后人乘凉”。前辈创造条件,后备在前辈的基础上进行改进。即我们先训练一个弱学习器,再对这个模型进行评估,对这个模型中做对的问题,我们减小对它的注意力;做错的问题那就增大注意力,专注于克服前面模型不能解决的困难点。最后,当我们把所有的模型整合成一个大的框架的时候,里面既有处理简单问题的模型也有处理困难问题的模型,使大框架的整体模型性能有所提高。

Boosting族最著名的代表算法是Adaboost,它的做法是:

  • 提高那些被前一轮若分类器错误分类样本数据的权值,降低正确分类样本的权值
  • 采取加权多数表决的方法,加大分类误差率小的若分类器的权值,减小分类误差率大的弱分类器的权值。

2.基本原理

强可学习:识别准确率很高并能在多项式时间内完成的学习算法
弱可学习:识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)

Step1:训练每个弱分类器,计算样本困难度。
(1)初始化样本权重为1/N
(2)利用当前弱分类器的训练结果,更新所有样本的权重。正确分类的样本就降低权重,错误分类的样本就增大权重。
机器学习之提升方法Adaboost算法_第1张图片
(3)基于当前样本权重,训练下一个弱分类器。对于这个弱分类器,我们已经提高了困难样本的权重,此时会有部分困难样本分类正确,采用和2相同的策略进行训练,依次迭代,直到到达所包含模型数量的最大值。
Step2:学习每个弱分类器的权重
需要对每个弱分类器的性能进行评估,学习到每个弱分类器权值。
在这里插入图片描述
利用所得到的的权值,将所有输出整合到一起。
(详细的推导过程可看第三部分)

Adaboost采用迭代的思想,每次迭代只训练一个弱分类器,训练好的弱分类器将参与下一次迭代的使用。也就是说,在第N次迭代中,一共就有N个弱分类器,其中N-1个是以前训练好的,其各种参数都不再改变,本次训练第N个分类器。其中弱分类器的关系是第N个弱分类器更可能分对前N-1个弱分类器没分对的数据,最终分类输出要看这N个分类器的综合效果。
机器学习之提升方法Adaboost算法_第2张图片
两个权重:样本权重和弱分类器权重。
样本的权重有两个含义:第一个就是数据的重要性,第二个就是数据被选择的可能性更大。初始权重设为1/N,训练出弱学习器1,此时根据弱学习器1的学习误差率来更新样本权重,弱学习器1中误差高的样本权重变大。然后根据更新后的样本权值训练弱学习器2,依次进行迭代。
分类器权重:
分类器的权重是由最小误差计算得出分类器的权重越大说明在最后的决策时越重要。即,弱分类器错误率越低,权重就越高。

3.Adaboost算法

(李航老师《统计学习方法》)
输入:
训练数据集={(_1,_1 ),(_2,_2 ),(_3,_3 ),…,(_,_ )},其中x_i∈⊆ℝ^n,
y_i∈={−1,+1};
弱学习算法;
输出:
最终分类器G(x);
(1)初始化数据权值分布
在这里插入图片描述
机器学习之提升方法Adaboost算法_第3张图片
机器学习之提升方法Adaboost算法_第4张图片

在这里插入图片描述
机器学习之提升方法Adaboost算法_第5张图片
机器学习之提升方法Adaboost算法_第6张图片
机器学习之提升方法Adaboost算法_第7张图片

4.周志华老师Boosting25周年

(以下参考周志华老师Boosting25周年,非常推荐这个视频,讲解Boosting,非常清晰连贯)
Boosting 25年(2014周志华)

Adaboost为什么影响力大?
1.简单且高效,任何需要用到机器学习的地方都可以使用。
2.Boosting算法族核心,是一个general boosting过程。简单来说就是先生成一个学习器,判断它的效果好不好,据此调整迭代。
3.理论支持,不仅给出了训练集误差范围,还给出了泛化误差范围。
Adaboost为什么不容易过拟合
1.奥卡姆剃须刀理论:如无必要,勿增实体。
2.Adaboost似乎违背了这个理论,如下图当训练到7轮左右,训练误差为0继续训练误差还是为0,轮数增加测试集损失继续下降,这就违反了奥卡姆剃刀原则,即第7轮训练的模型,根据奥卡姆剃刀原则,该模型应该是最好的,现实却是很复杂的模型比简单的好。
机器学习之提升方法Adaboost算法_第8张图片
关于统计学和间隔理论两大流派的解释:
统计学观点看Adaboost:
将模型拆解为三个部分:优化指数函数,加性模型模型,牛顿法迭代,当优化各个成分时,可以得到一系列的模型变体,得到结果是理论和实践相违背,未解释为什么不过拟合。
间隔理论解释了Adaboost随着训练增加不过拟合?
间隔:间隔越大分类越好
训练次数增加,训练误差降到0后,误差越小,训练下去间隔增大,提高了预测性能。
机器学习之提升方法Adaboost算法_第9张图片
机器学习之提升方法Adaboost算法_第10张图片

5.Adaboost算法优缺点

Adaboost算法优点:

  1. 不易发生过拟合
  2. 由于AdaBoost并没有限制弱学习器的种类,所以可以使用不同的学习算法来构建弱分类器;
  3. AdaBoost具有很高的精度; 相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重;
  4. AdaBoost的参数少,实际应用中不需要调节太多的参数。

Adaboost算法缺点:

  1. 数据不平衡导致分类精度下降
  2. 训练耗时,主要由于多个弱分类器的训练耗时
  3. 弱分类器的数目不好设置
  4. 对异常样本敏感,由于adaboost对错误样本会增加其权值,异常样本会获得高权值,影响最终分类器的精度

6.Q&A

  1. Adaboost算法在迭代的过程中,迭代的次数怎么确定?
    我们需要考虑两个指标。
    1.正确率:上一轮与本轮正确率的差值低到一定程度就可以停止,这个差值的阈值根据需要来设定。
    2.时间:理想情况下,分类器越多分类效果就越好,但是这也造成了需要更多的时间。
  2. Adaboost的各个弱学习器的权值调整过程?
    机器学习之提升方法Adaboost算法_第11张图片
    其主要思想是分类错误的点在下一次会增加权值,分类正确的点会减小权值。
  3. 弱分类器的选择及数量
    弱分类器我们可以选择很多方法选择,逻辑回归,SVM,决策树都可以。但是使用做多的就是我们之前用到的单层决策树,原因是基分类器简单好构造,且不易过拟合。迭代次数是我们手动调节的或者是模型训练到训练误差为0,与弱分类器的选择无关。
  4. Adaboost的核心思想是什么?
    核心思想就是Adaboost是一种精度提升算法(Boosting Algorithm), 主要用来解决分类预测的问题。它会逐个训练单个的分类器,调整每个单个分类器的精度,之后把若干个单个的分类器组合成一个复合分类器。通常我们把这些单个的分类器叫做弱分类器,而把最后的复合分类器叫做强分类器。(减少泛化误差见后续过拟合问题)
  5. 为什么Adaboost不易过拟合?
    Adaboost做为一个加性模型,采用了指数损失函数。理论上而言也就是说每增加一级分类器,损失函数都会减小,也就是方差会越来越大,从这个角度来理解那么adaboost其实是更容易过拟合的。但是因为我们选择的基分类器很简单,那么在实际应用中很难过拟合,这也是我们经常选择决策树桩作为基分类器的原因。但是到目前为止,还没有一个完全清楚的答案。在许多variance-bias 分解实验中也观察到,AdaBoost不仅是减少了bias,同时也减少了variance,variance的减少往往与算法容量减少有关。ECML12上有一篇文章说boosting方法中有差异的基分类集成能减小达到预计效果的模型复杂度,一定程度也起到正则化,减小variance的作用。

你可能感兴趣的:(算法,集成学习,机器学习)