boosting、adaboost

1、boosting

Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数。他是一种框架算法,主要是通过对样本集的操作获得样本子集,然后用弱分类算法在样本子集上训练生成一系列的基分类器。

在boosting算法产生之前,还出现过两种比较重要的将多个分类器整合为一个分类器的方法,即boostrapping方法和bagging方法。

1.1 bootstrapping方法的主要过程

i)重复地从一个样本集合D中采样n个样本

ii)针对每次采样的子样本集,进行统计学习,获得假设Hi

iii)将若干个假设进行组合,形成最终的假设Hfinal

iv)将最终的假设用于具体的分类任务

1.2 bagging方法的主要过程

i)训练分类器 从整体样本集合中,抽样n* < N个样本 针对抽样的集合训练分类器Ci

ii)分类器进行投票,最终的结果是分类器投票的优胜结果

但是,上述这两种方法,都只是将分类器进行简单的组合,实际上,并没有发挥出分类器组合的威力来。直到1989年,Yoav Freund与 Robert Schapire提出了一种可行的将弱分类器组合为强分类器的方法。

Schapire还提出了一种早期的boosting算法,其主要过程如下:

i)从样本整体集合D中,不放回的随机抽样n1 < n个样本,得到集合 D1 训练弱分类器C1

ii)从样本整体集合D中,抽取 n2 < n个样本,其中合并进一半被C1 分类错误的样本。得到样本集合 D2 训练弱分类器C2

iii)抽取D样本集合中,C1C2 分类不一致样本,组成D3 训练弱分类器C3

iv)用三个分类器做投票,得到最后分类结果

到了1995年,Freund and schapire提出了现在的adaboost算法。

2、adaboost

主要框架可以描述为:

i)循环迭代多次,更新样本分布,寻找当前分布下的最优弱分类器,计算弱分类器误差率

ii)聚合多次训练的弱分类器

image

现在,boost算法有了很大的发展,出现了很多的其他boost算法,例如:logitboost算法,gentleboost算法等。

3、adaboost的收敛性证明

整个证明的核心是:

\frac{1}{m}|i:H(x_{i})\neq{y_{i}}|\leq\prod_{t=1}^{T}Z_{t},其中m表示样本总数,T表示弱分类器的总数,Z_{t}为每一级弱分类器的错误率。

证明过程:

\frac{\frac{1}{m}|i:H(x_{i})\neq{y_{i}}|}{\prod_{t=1}^{T}Z_{t}}
\leq\frac{exp(-\sum_{t=1}^{T}\alpha_{t}y_{i}h_{t}(x_{i}))}{m\prod_{t=1}^{T}Z_{t}}

=\frac{exp(-y_{i}f(x_{i}))}{m\prod_{t=1}^{T}Z_{t}}
=D_{T+1}(i)

如果H(x_{i})\neq{y_{i}}y_{i}f(x_{i})\leq0,故exp(y_{i}f(x_{i}))\geq1。所以得到上式子。

image

至此,看到AdaBoost的错误率上限,接下来的目标就是使这个上限尽可能小!

在原始AdaBoost算法中h值域是{-1,1},问题是怎么找到最佳的\alpha_{t}

image

对于原始的AdaBoost,前文讨论过其h是“定死”的,失去了“讨价还价”的余地,而在Real AdaBoost不在“定死”。

推导过程ppt下载

参考:http://blog.163.com/f_rock/blog/static/1947961312011102810164354/

4、gentle adaboost

参考:http://blog.csdn.net/wsj998689aa/article/details/42652827

posted @ 2015-10-09 11:16  侯凯  阅读(847)  评论(0编辑  收藏  举报