在概率近似正确学习框架中,强可学习(指存在一个多项式学习算法能够学习一个概念且正确率很高)和弱可学习(指存在一个多项式学习算法能够学习一个概念且正确率仅比随机猜测略好)是等价的。
因此AdaBoost提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,得到一个强分类器。
接下来我们分别讨论不同分类器的集成方法、boosting方法以及具有代表性的adaboost提升方法。
1.基于数据集多重抽样的分类器
1.1 bagging
bagging方法,也称为bootstrap aggregating方法,该方法从原始数据集中选择 S S S次后得到 S S S个新数据集,将某个学习方法分别作用于每个数据集,得到 S S S个分类器,如果需要对新数据进行分类,利用 S S S个分类器进行分类,选择分类器投票结果中最多的类别作为最后的分类结果。
1.2 boosting
boosting相比于bagging,会根据已经训练处的分类器性能进行下一步训练,同时会关注被已有分类器错分的数据以获得新的分类器。
boosting解决了两个问题:
- 在每一轮中,提高被前一轮弱分类器错误分类样本的权值,降低被正确分类样本的权值,从而能让后一轮分类器更加关注没有正确分类的样本;
- 加大分类误差率小的弱分类器的权值,在表决中能起较大的作用,减小分类误差率大的权值,在表决中起较小的作用,从而将一系列弱分类器组合成强分类器。
2. AdaBoost方法
基于之前提到的boosting思想,我们运行以下的AdaBoost方法:
初始化每个样本权值分布
D
1
=
(
w
11
,
⋯
,
w
1
i
,
⋯
,
w
1
N
)
w
1
i
=
1
N
D_1 = (w_{11},\cdots, w_{1i},\cdots, w_{1N})\ w_{1i} = \frac1N
D1=(w11,⋯,w1i,⋯,w1N) w1i=N1
利用具有给定权值分布的训练数据集进行学习,得到分类器
G
m
(
x
)
G_m(x)
Gm(x),计算分类器在训练数据集上的错误率
e
m
e_m
em,根据错误率确定分类器的权重:
α
m
=
1
2
l
n
1
−
e
m
e
m
\alpha_m = \frac12 ln\frac{1-e_m}{e_m}
αm=21lnem1−em然后对权值向量进行更新:
如
果
正
确
分
类
:
D
m
+
1
(
i
)
=
D
m
(
i
)
e
−
α
S
u
m
(
D
m
)
如
果
错
误
分
类
:
D
m
+
1
(
i
)
=
D
m
(
i
)
e
α
S
u
m
(
D
m
)
如果正确分类:D_{m+1}^{(i)} = \frac{D_{m}^{(i)}e^{-\alpha}}{Sum(D_m)}\\ 如果错误分类:D_{m+1}^{(i)} = \frac{D_{m}^{(i)}e^{\alpha}}{Sum(D_m)}
如果正确分类:Dm+1(i)=Sum(Dm)Dm(i)e−α如果错误分类:Dm+1(i)=Sum(Dm)Dm(i)eα不断进行迭代,最终将所有分类器按照权重进行线性组合。
3. 基于单层决策树构建弱分类器
首先建立一个单层决策树,建立这样的决策树需要我们找到一个最优切分点,使得在该切分点上分类错误率最低。
先确定分类函数,它会根据已经生成的决策树信息对数据进行分类:
然后确定决策树,决策树会在所有特征里遍历,然后选择合适的阈值(这里一般是人工选择出最优阈值,比如依次增加0.1)使得预测误差达到最小,返回最优决策树特征:
至此已经构建好了一个弱分类器,即单层决策树,接下来我们将使用多个弱分类器构建强分类器。
4.AdaBoost
之前我们已经构建出了单层决策树,并且在确定最优分类阈值时考虑了样本权重,接下来利用AdaBoost提升方法将弱分类器进行组合:
伪代码如下: