转载自 https://blog.csdn.net/fwh_1307/article/details/122021348
1.背景
集成学习(ensemble learning)通过构建并结合多个学习器来提升性能
集成学习分为两大类:
个体分类器存在强依赖方法(Boosting)
个体学习器之间不存在强依赖关系(Bagging,随机森林)
提升方法的思路:
对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。
对于提升方法来说,有两个问题:
- 在每一轮如何改变训练数据的权值与概率分布
- 如何将若分类器组合成一个强分类器
Boosting族最著名的代表算法是Adaboost,它的做法是:
- 提高那些被前一轮若分类器错误分类样本数据的权值,降低正确分类样本的权值
- 采取加权多数表决的方法,加大分类误差率小的若分类器的权值,减小分类误差率大的弱分类器的权值。
2.基本原理
强可学习:识别准确率很高并能在多项式时间内完成的学习算法
弱可学习:识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)
将多个弱分类器进行合理的结合,使其成为一个强分类器。
Adaboost采用迭代的思想,每次迭代只训练一个弱分类器,训练好的弱分类器将参与下一次迭代的使用。也就是说,在第N次迭代中,一共就有N个弱分类器,其中N-1个是以前训练好的,其各种参数都不再改变,本次训练第N个分类器。其中弱分类器的关系是第N个弱分类器更可能分对前N-1个弱分类器没分对的数据,最终分类输出要看这N个分类器的综合效果。
两个权重:数据权重和弱分类器权重。
3.Adaboost算法
(李航老师《统计学习方法》)
输入:
训练数据集𝑇={(𝑥_1,𝑦_1 ),(𝑥_2,𝑦_2 ),(𝑥_3,𝑦_3 ),…,(𝑥_𝑁,𝑦_𝑁 )},其中x_i∈𝑋⊆ℝ^n,
y_i∈𝑌={−1,+1};
弱学习算法;
输出:
最终分类器G(x);
(1)初始化数据权值分布
4.周志华老师Boosting25周年
(以下参考周志华老师Boosting25周年,非常推荐这个视频,讲解Boosting,非常清晰连贯)
Boosting 25年(2014周志华)
Adaboost为什么影响力大?
1.简单且高效,任何需要用到机器学习的地方都可以使用。
2.Boosting算法族核心,是一个general boosting过程。简单来说就是先生成一个学习器,判断它的效果好不好,据此调整迭代。
3.理论支持,不仅给出了训练集误差范围,还给出了泛化误差范围。
Adaboost为什么不容易过拟合
1.奥卡姆剃须刀理论:如无必要,勿增实体。
2.Adaboost似乎违背了这个理论,如下图当训练到7轮左右,训练误差为0继续训练误差还是为0,轮数增加测试集损失继续下降,这就违反了奥卡姆剃刀原则,即第7轮训练的模型,根据奥卡姆剃刀原则,该模型应该是最好的,现实却是很复杂的模型比简单的好。
关于统计学和间隔理论两大流派的解释:
统计学观点看Adaboost:
将模型拆解为三个部分:优化指数函数,加性模型模型,牛顿法迭代,当优化各个成分时,可以得到一系列的模型变体,得到结果是理论和实践相违背,未解释为什么不过拟合。
间隔理论解释了Adaboost随着训练增加不过拟合?
间隔:间隔越大分类越好
训练次数增加,训练误差降到0后,误差越小,训练下去间隔增大,提高了预测性能。
5.Adaboost算法优缺点
Adaboost算法优点:
- 不易发生过拟合
- 由于AdaBoost并没有限制弱学习器的种类,所以可以使用不同的学习算法来构建弱分类器;
- AdaBoost具有很高的精度; 相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重;
- AdaBoost的参数少,实际应用中不需要调节太多的参数。
Adaboost算法缺点:
- 数据不平衡导致分类精度下降
- 训练耗时,主要由于多个弱分类器的训练耗时
- 弱分类器的数目不好设置
- 对异常样本敏感,由于adaboost对错误样本会增加其权值,异常样本会获得高权值,影响最终分类器的精度
6.Q&A
- Adaboost算法在迭代的过程中,迭代的次数怎么确定?
我们需要考虑两个指标。
1.正确率:上一轮与本轮正确率的差值低到一定程度就可以停止,这个差值的阈值根据需要来设定。
2.时间:理想情况下,分类器越多分类效果就越好,但是这也造成了需要更多的时间。 - Adaboost的各个弱学习器的权值调整过程?
其主要思想是分类错误的点在下一次会增加权值,分类正确的点会减小权值。 - 弱分类器的选择及数量
弱分类器我们可以选择很多方法选择,逻辑回归,SVM,决策树都可以。但是使用做多的就是我们之前用到的单层决策树,原因是基分类器简单好构造,且不易过拟合。迭代次数是我们手动调节的或者是模型训练到训练误差为0,与弱分类器的选择无关。 - Adaboost的核心思想是什么?
核心思想就是Adaboost是一种精度提升算法(Boosting Algorithm), 主要用来解决分类预测的问题。它会逐个训练单个的分类器,调整每个单个分类器的精度,之后把若干个单个的分类器组合成一个复合分类器。通常我们把这些单个的分类器叫做弱分类器,而把最后的复合分类器叫做强分类器。(减少泛化误差见后续过拟合问题) - 为什么Adaboost不易过拟合?
Adaboost做为一个加性模型,采用了指数损失函数。理论上而言也就是说每增加一级分类器,损失函数都会减小,也就是方差会越来越大,从这个角度来理解那么adaboost其实是更容易过拟合的。但是因为我们选择的基分类器很简单,那么在实际应用中很难过拟合,这也是我们经常选择决策树桩作为基分类器的原因。但是到目前为止,还没有一个完全清楚的答案。在许多variance-bias 分解实验中也观察到,AdaBoost不仅是减少了bias,同时也减少了variance,variance的减少往往与算法容量减少有关。ECML12上有一篇文章说boosting方法中有差异的基分类集成能减小达到预计效果的模型复杂度,一定程度也起到正则化,减小variance的作用。