一、引言
本人在看周志华老师编写的《机器学习》一书的AdaBoost推导部分的内容时,总感觉内容有点跳跃,思路不太流畅,并且书中的一些操作也不是很能理解(例如8.13的泰勒展开),故在参考了书上内容的基础上自己尝试着推导了一遍,梳理了一下算法的思路,希望能对大家有所帮助。
二、理论推导
Adaboost算法最终得到的一个模型是一个“加性模型”,即多个基学习器的线性组合:
那如何评价学习得到的模型的性能呢?当然是设计一个评价函数,在书中,这个评价函数就是指数损失函数:
书中证明了,当该损失函数取得最小值时,此时的刚好就是一个最小化分类错误率的贝叶斯最优分类器,它在样本
属于正例的概率大于其属于反例的概率时输出1,在属于反例的概率大于其属于正例的概率时输出-1,符合书上式(7.6)的定义。那么接下来我们的任务就是如何最小化该指数损失函数,也即如何确定每一个
及其相应的系数
。
首先可以确定的是,第一个基分类器是通过直接将基学习算法用于初始训练数据分布而得到的,那如果假设AdaBoost算法就在第一步停止了,即只有一个基学习器,则此时的指数损失函数
注意在计算模型的指数损失时,都是在初始的训练数据分布上进行的。根据书中式(8.9)的推导,可以进一步得出:
其中是基分类器
在初始数据分布
上的分类错误率,由基学习算法的性能和初始训练数据的好坏决定,我们所能控制的是系数
,因此我们应该将
取为能使指数损失最小的那个值,由基本不等式或求导我们不难得到,
取得最小值时,
该最小值为。
现在我们假设某一时刻,我们已知了以及其在初始训练数据分布
上的指数损失:
由于该指数损失为一个常数,因此我们不妨设其为A。那么我们接下来的任务是获得最优的基分类器及其对应的系数
,使得
在初始训练数据分布
上的指数损失最小,即:
而其中
可以等价于下面这种表达形式:
将上式代入到的表达式中,可得:
其中常数A是上文中定义的的指数损失。而根据数学期望的定义(数理统计知识),若令
表示一个新的分布:
那么就有:
因此的表达式可以进一步简化为:
而其中
式中称为示性函数,当括号内的条件成立时结果为1,不成立时结果为0;
表示在基分类器
在
上的分类错误率。可以看出,当
越小,即
在
上的分类错误率越小时,指数损失
越小,那么该如何训练基分类器
,使得
尽可能的小呢?既然
是在数据分布
上的分类错误率,那么我们就干脆在数据分布
上去用基学习算法训练出一个基分类器,而不是在初始数据分布
上或者是其他的数据分布上去训练基分类器。
训练得到基学习器以及分类错误率
之后,我们下一步就是求最优的系数
。经过上述一系列的化简,我们最终得到的
的指数损失表达式为:
根据基本不等式,
当且仅当 ,即
时,等号成立,此时指数损失取得最小值。
接着我们来分析一下从到
这一步,指数损失值的变化情况。前面我们说过A表示的是
在初始训练数据分布上的分类错误率,而根据上面的推导,我们得出了当
和
都是最优时,
的指数损失为
,由于我们只接受分类错误率小于0.5的基分类器,因此
的取值范围为
,而
在当
在该范围内取值时是小于1的,而且
越小,该结果越小,这说明了当我们在分类器
的基础之上增加项
变为
之后,能够减小指数损失的值,而每一步具体减小的程度,和基分类器
在
上的分类错误率大小有关。理论上来说,我们可以根据上述步骤不断地增加新的基分类器,从而不断地减小指数损失直至其逼近于0,然而实际上可能无法实现。
现在我们手里有和
(即
),又有了从
到
的递推公式,那么自然而然就能够依次获得
、
、
...一直到我们所指定的目标数目
。这便是AdaBoost算法的流程。创作不易,如果以上的内容对你理解AdaBoost算法有所帮助,请为本篇文章点一个赞,如果文中有不正确或解释不清楚的地方,也欢迎在评论区指出。