基本思想
相较于直接训练出一个强分类器,在训练集中找到一个弱分类器会简单很多。提升方法就是从弱学习算法出发,反复学习,得到一系列的弱分类器(基本分类器),然后组合这些弱分类器,构成一个强分类器。
我们需要解决的问题有两个:
- 每一轮如何改变训练数据的权值或概率分布?
- 如何将弱分类器合成一个强分类器?
AdaBoost针对这两个问题,做出以下解答:
- 假设现在有M轮的弱分类器选择。在每一轮训练中,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值,使得那些没有得到正确分类的数据,由于其权值的加大而收到后一轮的弱分类器的更大关注。(注意,是样本的权值,不是分类器的权值)
- 使用加权多数表决的方法,加大分类误差率小的弱分类器的组合,使其在表决中起较大作用;减小分类误差率大的弱分类器的权值,使其在表决中起较小作用。
![](https://tva1.sinaimg.cn/large/007S8ZIlly1gji11quowzj30m80e7gn7.jpg)
AdaBoost算法
假设有训练数据集$ T=\lbrace (x_1, y_1), …, (x_N, y_N)\rbrace ,标记有\lbrace{-1, +1}\rbrace$,我们将从该数据集中学到一系列的弱分类器,最后将它们组合成一个强分类器。
输入:训练数据集
输出:最终的强分类器G(x)
具体步骤:
-
先初始化训练数据的权值分布,假设训练数据集具有均匀的权值分布,也就是认为每个训练样本此时在本次的学习过程中作用是相同的。D1表示此次的权值分布,w1i表示的是第一轮第i个样本点的权值。
D1=(w11,..,w1N),w1i=N1
-
循环M次操作,找到M个弱分类器:
-
使用当前加权分布Dm学习基本分类器Gm,并确定一个阈值,使得分类误差率最小。经过化简得,分类误差率是被Gm误分类样本的权值之和。
em=Gm(xi)=yi∑wmi
-
此时已知本轮的Gm及使得分类误差率最小的阈值em,就可以计算该分类器的系数了。可以发现,分类误差越大,系数就越小。说明这个分类器的效果比较差,给的权重就小一些。
αm=21logem1−em
-
更新训练数据集的权值分布,Dm+1=(wm+1,1...,wm+1,N)
wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2..N
Zm是规范化因子,它使得Dm+1成为一个概率分布。
Zm=i=1∑Nwmiexp(−αmyiGm(xi))
-
被基本分类器Gm误分类样本的权值将扩大,而被正确分类样本的权值将缩小。不改变所给的训练数据,而不断改变训练数据权值的分布。
-
构建基本分类器的线性组合:
f(x)=m=1∑MαmGm(x)
最终的分类器将加上sign函数
G(x)=sign(f(x))
算法定理
定理8.1 训练误差界
AdaBoost算法最终分类器的训练误差界为
N1i=1∑NI(G(xi)=yi)=m∏Zm
该定理说明,可以在每一轮选取适当的Gm使得Zm最小,从而使得训练误差下降最快。
定理8.2 二分类问题的训练误差界
m∏Zm≤exp(−2m=1∑Mγm2)γm=21−em
这表明AdaBoost的训练误差是以指数速率下降的。
定理8.3 前向分布加法算法特例
AdaBoost算法是前向分布加法算法的特例,这是模型是由基本分类器组成的加法模型,损失函数是指数函数。
提升树
以决策树为基函数的提升方法称为提升树。基本分类器可以看作是由一个根结点直接连接两个叶节点的简单决策树,也就是所谓的决策树桩。
在提升树中
fm(x)=fm−1(x)+T(x;Θm),m=1,2...M
也就是说,第m步的模型是由m-1步的模型加上下一颗决策树组合而成的。
在计算平方损失函数的时候,
L(y,f(x))=(y−f(x))2=(y−(fm−1(x)+T(x;Θm)))2=[r−T(x;Θm]2
这里r=y−fm−1(x),它是当前模型拟合数据的残差。因此对于回归问题而言,只需要在每次训练的时候,去拟合当前模型的残差即可。