Adaboost

Adaboost的主要优点有:
1. Adaboost作为分类器时,分类精度很高
2. 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
3. 作为简单的二元分类器时,构造简单,结果可理解。
4. 不容易发生过拟合

Adaboost的主要缺点有:对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

Adaboost是boost提升算法中的一种,Boosting算法是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法。加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下:

                                  

其中,h(x;am) 就是一个个的弱分类器,am是弱分类器学习到的最优参数,βm就是弱学习在强分类器中所占比重,P是所有am和βm的组合。这些弱分类器线性相加组成强分类器。

前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式:

                                 

由于采用的损失函数不同,Boosting算法也因此有了不同的类型,AdaBoost就是损失函数为指数损失的Boosting算法。

Adaboost算法流程

Adaboost每次选择一个二分类算法,然后计算当前误差,将错误的样本的权值提高,分类正确的样本权值降低,这个算法有一个权重alpha作为这个分类算法最后的权重,然后再次迭代下一次算法模型,遇到m个算法模型或者分类误差率为0时退出算法。

AdaBoost算法的解释

AdaBoost还有一种解释,即可认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。

前向分布算法

加法模型 additive model
                             [公式]
其中, [公式] 为基函数, [公式] 为基函数系数, [公式] 为基函数参数。

在给定训练数据及损失函数 [公式] 的条件下,学习加法模型 [公式] 成为经验风险极小化问题
              [公式]

学习加法模型,从前向后每一步只学习一个基函数及其系数,即每步只优化
                           [公式]

前向分布算法 forward stagewise algorithm:
输入:训练数据集 [公式] ,损失函数 [公式] ;基函数集 [公式]
输出:加法模型 [公式]
1. 初始化 [公式]
2. 对 [公式]
2.1 极小化损失函数
[公式]
得到参数 [公式]
2.2 更新
[公式]
3. 得到加法模型
[公式]

定理:AdaBoost算法是前向分布加法算法的特例。这时模型是由基本分类器组成的加法模型,损失函数是指数函数。

证明:

加法模型等价于AdaBoost的最终分类器

[公式]

由基本分类器 [公式] 及其系数 [公式] 组成, [公式] 。前向分布算法逐一学习基本函数,这一过程与AdaBoost算法逐一学习基本分类器的过程一致。下面证明前向分布算法的损失函数是指数损失函数(exponential loss function)

[公式]

时,其学习的具体操作等价于AdaBoost算法学习的具体操作。

假设经过m-1轮迭代前向分布算法已经得到 [公式] :

[公式]

在第 [公式] 轮得到 [公式] 和 [公式] .

[公式]

目标是使前向算法得到的$\alpha {m}$和$G{m}$使$f_{m}(x)$在训练数据集$T$上的指数损失最小,即:

[公式]

可以表示成:

[公式]

其中, [公式] ,因为 [公式] 不依赖于 [公式] ,也不依赖于 [公式] 。

首先求 [公式] ,进一步展开:

[公式][公式] [公式]

所以最小化 [公式] 由下式得到:

[公式]

之后我们求解 [公式] :

[公式]

[公式]

对 [公式] 求导:

[公式]

[公式]

即得:

[公式]

其中 [公式] 是分类错误率:

                           [公式]

原式 =

                   (e^α + e^(-α)) / (e^(-α)) = 1 / em

                    e^(2*α)  = 1 / em - 1 = (1 - em) / em

  [公式]

这里的 [公式] 与AdaBoost算法的 [公式] 完全一致。

再看一下每一轮的权值更新,由:

[公式]

以及 [公式] ,可得:

[公式]

这与AdaBoost算法的样本权值的更新,只相差规范会因子,因此等价。

AdaBoost算法的正则化 

为了防止AdaBoost过拟合,我们通常也会加入正则化项。AdaBoost的正则化项可以理解为学习率(learning rate)。

AdaBoost的弱学习器迭代:

加入正则化项:

v的取值范围为:0 < v < 1。因此,要达到同样的训练集效果,加入正则化项的弱学习器迭代次数增加,由上节可知,迭代次数增加可以提高模型的泛化能力。

参考链接:

【1】https://www.cnblogs.com/ScorpioLu/p/8295990.html

【2】https://zhuanlan.zhihu.com/p/39972832

【3】《统计学习方法》李航

【4】https://baijiahao.baidu.com/s?id=1620745039073344218&wfr=spider&for=pc

posted @ 2019-09-14 22:41  啦啦啦天啦噜  阅读(490)  评论(0编辑  收藏  举报