Boosting是一族可将弱学习器提升为强学习器的算法。
这族算法的工作机制类似:
- 【提高】那些在前一轮被弱分类器【分错】的样本的权值;
- 【减小】那些在前一轮被弱分类器【分对】的样本的权值;
使得误分的样本在后续受到更多的关注。体现了【串行】
Boosting族算法最著名的代表是AdaBoost算法,它解决的是二分类问题。
AdaBoost算法有很多推导方式,比较容易理解的是基于“加性模型”,即基学习器的线性组合:
在每一轮中,要分别记录好那些被当前弱分类器【正确分类】与【错误分类】的样本,在下一轮训练时,提高【错误分类】样本的权值,同时降低【正确分类】样本的权值,用以训练新的弱分类器。这样使得那些没有得到正确分类的数据,由于其权值加大,会受到后一轮的弱分类器的更大关注。
【加权多数表决】:加大分类误差率小的弱分类器的权值,使其在表决中起较大作用;减小分类误差率大的弱分类器权值,使其在表决中起较小的作用。
最终分类器为:
定义整个学习器的损失函数为指数损失函数,期望损失函数最小化:
其中,f为真实函数,,D表示样本的权值分布(对于错误的样本权重要高一点,正确样本的权重低一点。)
所以可以将上式写为:
要想使期望损失函数最小化,需要对其进行求偏导。即:
得出:
因此,有
这意味着若指数损失函数最小化,则分类错误率也将最小化。说明指数损失函数就是原任务的替代函数,但由于其连续可微,所以用它替代0/1损失函数作为优化目标。
在AdaBoost算法中,第一个基分类器h1是通过直接将基学习算法用于初始数据分布而得;此后迭代地生成和,当基分类器基于分布产生后,该基分类器得权重应使得最小化指数损失函数。
其中,,其实就是错误率
指得是示性函数,有一个很重要的性质是:示性函数的期望等于它下标事件发生的概率。
考虑指数损失函数的导数:
得出,这就是分类器权重更新公式。
AdaBoost算法在获得之后样本分布将进行调整,使下一轮的基学习器能纠正的一些错误。理想的能纠正的全部错误,即最小化
注意到,使得的泰勒展开式为:
于是,理想的基学习器
其中,是一个常数,令Dt表示一个分布:
根据数学期望的定义,这等价于
因为,所以有
则理想的基学习器
考虑到Dt+1和Dt的关系,有
这就是样本分布更新公式。
有了上述理论的铺垫,得出AdaBoost算法流程为:
训练集
基学习算法
训练轮数T
过程:
for t=1,2,...,T do
if then break
end for
输出: