Adaboost算法说实话看文章看见过好多好多次,非常有名的一个算法,这次找到一个讲解非常详细以及清晰的随笔,所以不要脸的转载了,分享给大家!!!
集成学习按照个体学习器之间是否存在依赖关系可以分为两类:
- 第一个是个体学习器之间存在强依赖关系;
- 另一类是个体学习器之间不存在强依赖关系。
前者的代表算法就是提升(boosting)系列算法。在boosting系列算法中, Adaboost是最著名的算法之一。Adaboost既可以用作分类,也可以用作回归。本文就对Adaboost算法做一个总结。
一 回顾boosting算法的基本原理
AdaBoost是典型的Boosting算法,属于Boosting家族的一员。在说AdaBoost之前,先说说Boosting提升算法。Boosting算法是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法。加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下:
前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式:
由于采用的损失函数不同,Boosting算法也因此有了不同的类型,AdaBoost就是损失函数为指数损失的Boosting算法。
boosting算法系列的基本思想,如下图:
从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重D(1)训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
在上图中有几个具体的问题我们没有详细说明。
- 如何计算分类误差率e?
- 如何得到弱学习器权重系数αα(即上式中的βk)?
- 如何更新训练数据的样本权重D?
- 使用何种结合策略?
只要是boosting大家族的算法,都要解决这4个问题。那么Adaboost是怎么解决的呢?
二 Adaboost算法的基本思想
我们这里讲解Adaboost是如何解决上面4个问题的。
假设我们的训练集样本是:
训练集的在第k个弱学习器的样本权重系数为:
注意:在初始化第一个弱分类器输出权重时,我们假设训练集样本具有均匀的权值分布,即每个训练样本在第一个弱分类器的学习中作用相同,这一假设保证可以在训练集样本上学习第一个弱分类器G1(x)。
首先我们看看Adaboost的分类问题。
分类问题的误差率很好理解和计算。由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器Gk(x)在训练集上的分类误差率为:
接着我们看弱学习器权重系数,对于二元分类问题,第k个弱分类器的权重系数为:
为什么这样计算弱学习器权重系数?从上式可以看出,如果分类误差率越大,则对应的弱分类器权重系数越小。也就是说,误差率小的弱分类器权重系数越大。具体为什么采用这个权重系数公式,我们在讲Adaboost的损失函数优化时再讲。
第三个问题,如何更新样本权重D。假设第k个弱分类器的样本集权重系数为,则对应的第k+1个弱分类器的样本权重系数为:
这里是规范化因子:
从计算公式可以看出,如果第i个样本分类错误,则,导致样本的权重在第k+1个弱分类器中增大,如果分类正确,则权重在第k+1个弱分类器中减少.不改变所给的训练集数据,通过不断的改变训练样本的权重,使得训练集数据在弱分类器的学习中起不同的作用。具体为什么采用这个样本权重更新公式,我们在讲Adaboost的损失函数优化时再讲。
最后一个问题是集合策略。Adaboost分类采用的是加权平均法,最终的强分类器为:
接着我们看看Adaboost的回归问题。由于Adaboost的回归问题有很多变种,这里我们以Adaboost R2算法为准。
我们先看看回归问题的误差率的问题,对于第k个弱学习器,计算他在训练集上的最大误差:
然后计算每个样本的相对误差
三 AdaBoost分类问题的损失函数优化
上面我们讲到了分类Adaboost的弱学习器权重系数公式和样本权重更新公式。但是没有解释选择这个公式的原因,让人觉得是魔法公式一样。其实它可以从Adaboost的损失函数推导出来。
从另一个角度讲,Adaboost是模型为加法模型,学习算法为前向分步学习算法,损失函数为指数函数的分类问题。
模型为加法模型好理解,我们的最终的强分类器是若干个弱分类器加权平均而得到的。
前向分步学习算法也好理解,我们的算法是通过一轮轮的弱学习器学习,利用前一个弱学习器的结果来更新后一个弱学习器的训练集权重。也就是说,第k-1轮的强学习器为: