机器学习——AdaBoost算法
1 集成学习
1.1 基本概念
所谓的集成学习指的是通过构建多个学习器来完成学习的任务,有的时候也被称为多分类器系统。其基本框架如下图所示:
我们从统一的训练样本,通过某种算法来产生多个学习器,再通过某一种策略来将各个学习器进行组合,从而形成一个学习器系统。我们将从训练样本中产生的每一个单个的学习器称为弱学习器。目前,集成学习主要包括两种实现方式,一种是两个学习器之间是存在依赖性的,也就是说,一个新的弱学习器的生成是和之前的弱学习器是有关联的。那么所有弱学习器生成的过程是串行的。这种方式比较有代表性的是AdaBoost算法。另外一种是每一个弱学习器的生成和其他弱学习器的生成是无关的。也就是一种并行生成的方式。这种方式的代表性算法是随机森林(Random Forest)。
2 AdaBoost算法
2.1 基本介绍
上面我们描述了集成学习的基本概念和两种主要的方式,下面我们来介绍第一种方式。这里我们主要介绍的是AdaBoost算法。AdaBoost算法的基本思想是:通过前面生成的弱分类器来调节训练样本集合中的每一个样本的权重,在进行重新采样,形成新的样本集合,继续训练下一个弱分类器。
2.2 训练流程
- 首先,对于初始的训练样本集合,我们需要对其中每一个样本产生一个初始的权重,记权重集合为D1:
D1=(w11,w12,w13,....w1N)
这里,我们假设样本的数量为N,w1i表示的是第1轮中的第i个样本的权重值。w1i=N1。
- 然后,我开始生成第一个弱分类器G1,采用概率分布D1来选择N个训练样本来训练分类器G1。这里我们训练的是二分类的弱分类器,并且,采样是有放回的采样。
- 计算加权的错误率:
e1=P(G1(xi)=yi)=i=1∑Nw1iI(G1(xi)=yi)
α1=21logem1−em
其中,I表示的示性函数,
I(G1(xi)=yi)={10G1(xi)=yiG1(xi)=yi
α1表示表示分类器G1在整个分类器系统中所占的权重,我们可以看出,em越小,αm越大。
- 更新权重的分布,
Z1=i=1∑Nw1iexp{−α1yiG1(xi)}
w2i=Z1w1i=exp{−α1yiG1(xi)}
D2=(w21,.....w2n)
- 回到2进行下一步迭代,形成下一个分类器G2。
- 不断的进行2——5的步骤,知道生成我们设定的第M个分类器。
- 最终形成分类器系统:
F(X)=j=1∑MαjGj(X)
G(X)=sign(F(x))=sign(j=1∑MαjGj(X))
其中sign是符号函数:
sign(x)=⎩⎪⎨⎪⎧−101x<0x=0x>0
2.3 数学理论
- 基本定理:随着M的增加,AdaBoost最终形成的分类器集合G(X)在训练集上的错误率将会越来越小。总的错误率为:
E=N1i=1∑NI(G(xi)=yi)
- E=N1∑i=1NI(G(xi)=yi)≤N1∑i=1Nexp{−yiF(xi)}
证明:若G(xi)=yi,则I(G(xi)=yi)=0,G(xi)是F(xi)的符号函数,则yi和F(xi)符号相同,则有−yiF(xi)<0,则有exp{−yiF(xi)}>0 。
若G(xi)=yi,则I(G(xi)=yi)=1,G(xi)是F(xi)的符号函数,则yi和F(xi)符号不相同,则有−yiF(xi)>0,则有exp{−yiF(xi)}>1 。
综上所述:该不等式成立。
- N1∑i=1Nexp{−yiF(xi)}=∏j=1MZj
证明:
N1i=1∑Nexp{−yiF(xi)}=i=1∑Nw1iexp(−yij=1∑MαjGj(xi))
进一步有:
i=1∑Nw1iexp(−yij=1∑MαjGj(xi))=i=1∑Nw1ij=1∏Mexp(−yiαjGj(xi))
化简之后有:
i=1∑Nw1ij=1∏Mexp(−yiαjGj(xi))=i=1∑Nw1iexp(−yiα1G1(xi))j=2∏Mexp(−yiαjGj(xi))=i=1∑Nw2iZ1j=2∏Mexp(−yiαjGj(xi))
迭代之后有:
N1i=1∑Nexp{−yiF(xi)}=j=1∏MZj
- Zj=2ej(1−ej)
证明:根据之前的描述我们可以知道,yi的取值为±1,G(xi)=±1,则yiG(xi)=±1。则原式可以变成:
Zj=i=1∑Nwjiexp{−αjyiGj(xi)}=yi=Gj(xi)∑wjiexp(−αj)+yi=Gj(xi)∑wjiexp(αj)
将αj=21logem1−em带入之后有:
Zj=(1−ej)exp(−21logem1−em)+ejexp(21logem1−em)=2ej(1−ej)