Boosting算法

转载 2012年03月30日 15:01:29

Boosting算法

一、Boosting算法的发展历史

     Boosting是一种提高任意给定学习算法准确度的方法。它的思想起源于 Valiant提出的 PAC ( ProbablyApproxi mately Cor2rect)学习模型。Valiant Kearns提出了弱学习和强学习的概念 ,识别错误率小于1 /2,也即准确率仅比随机猜测略高的学习算法称为弱学习算法;识别准确率很高并能在多项式时间内完成的学习算法称为强学习算法。同时 ,Valiant Kearns首次提出了 PAC学习模型中弱学习算法和强学习算法的等价性问题,即任意给定仅比随机猜测略好的弱学习算法 ,是否可以将其提升为强学习算法 ? 如果二者等价 ,那么只需找到一个比随机猜测略好的弱学习算法就可以将其提升为强学习算法 ,而不必寻找很难获得的强学习算法。1990, Schap ire最先构造出一种多项式级的算法 ,对该问题做了肯定的证明 ,这就是最初的 Boosting算法。一年后 ,Freund提出了一种效率更高的Boosting算法。但是,这两种算法存在共同的实践上的缺陷 ,那就是都要求事先知道弱学习算法学习正确的下限。1995 , Freund schap ire改进了Boosting算法 ,提出了 AdaBoost (Adap tive Boosting)算法[ 5 ],该算法效率和 Freund 1991年提出的 Boosting算法几乎相同 ,但不需要任何关于弱学习器的先验知识 ,因而更容易应用到实际问题当中。之后 , Freund schap ire进一步提出了改变 Boosting投票权重的 AdaBoost .M1,AdaBoost . M2等算法 ,在机器学习领域受到了极大的关注。

Boosting算法是一种把若干个分类器整合为一个分类器的方法,在boosting算法产生之前,还出现过两种比较重要的将多个分类器整合为一个分类器的方法,即boostrapping方法和bagging方法。我们先简要介绍一下bootstrapping方法和bagging方法。

1bootstrapping方法的主要过程

  主要步骤:

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

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

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

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

2bagging方法的主要过程

  主要思路:

i)训练分类器

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

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

  但是,上述这两种方法,都只是将分类器进行简单的组合,实际上,并没有发挥出分类器组合的威力来。直到1989年,Yoav Freund Robert Schapire提出了一种可行的将弱分类器组合为强分类器的方法。并由此而获得了2003年的哥德尔奖(Godel price)。

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

i)从样本整体集合D中,不放回的随机抽样nn 个样本,得到集合 D1

  训练弱分类器C1

ii)从样本整体集合D中,抽取 nn 个样本,其中合并进一半被 C1 分类错误的样本。得到样本集合 D2

  训练弱分类器C2

iii)抽取D样本集合中,C1  C2 分类不一致样本,组成D3

  训练弱分类器C3

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

  到了1995年,Freund andschapire提出了现在的adaboost算法,其主要框架可以描述为:

i)循环迭代多次

  更新样本分布

  寻找当前分布下的最优弱分类器

  计算弱分类器误差率

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

  在下图中可以看到完整的adaboost算法:

1.1  adaboost算法过程

  现在,boost算法有了很大的发展,出现了很多的其他boost算法,例如:logitboost算法,gentleboost算法等等。在这次报告中,我们将着重介绍adaboost算法的过程和特性。

二、Adaboost算法及分析

  从图1.1中,我们可以看到adaboost的一个详细的算法过程。Adaboost是一种比较有特点的算法,可以总结如下:

1)每次迭代改变的是样本的分布,而不是重复采样(re weight)

2)样本分布的改变取决于样本是否被正确分类

  总是分类正确的样本权值低

  总是分类错误的样本权值高(通常是边界附近的样本)

3)最终的结果是弱分类器的加权组合

  权值表示该弱分类器的性能

  简单来说,Adaboost有很多优点:

1)adaboost是一种有很高精度的分类器

2)可以使用各种方法构建子分类器,adaboost算法提供的是框架

3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单

4)简单,不用做特征筛选

5)不用担心overfitting

  总之:adaboost是简单,有效。

  下面我们举一个简单的例子来看看adaboost的实现过程:

  图中,“+”“-”分别表示两种类别,在这个过程中,我们使用水平或者垂直的直线作为分类器,来进行分类。

  第一步:

  根据分类的正确率,得到一个新的样本分布D,一个子分类器h1

  其中划圈的样本表示被分错的。在右边的途中,比较大的“+”表示对该样本做了加权。

  第二步:

  根据分类的正确率,得到一个新的样本分布D3,一个子分类器h2

  第三步:

  得到一个子分类器h3

  整合所有子分类器:

  因此可以得到整合的结果,从结果中看,及时简单的分类器,组合起来也能获得很好的分类效果,在例子中所有的。

Adaboost算法的某些特性是非常好的,在我们的报告中,主要介绍adaboost的两个特性。一是训练的错误率上界,随着迭代次数的增加,会逐渐下降;二是adaboost算法即使训练次数很多,也不会出现过拟合的问题。

  下面主要通过证明过程和图表来描述这两个特性:

1)错误率上界下降的特性

  从而可以看出,随着迭代次数的增加,实际上错误率上界在下降。

2)不会出现过拟合现象

  通常,过拟合现象指的是下图描述的这种现象,即随着模型训练误差的下降,实际上,模型的泛化误差(测试误差)在上升。横轴表示迭代的次数,纵轴表示训练误差的值。

而实际上,并没有观察到adaboost算法出现这样的情况,即当训练误差小到一定程度以后,继续训练,返回误差仍然不会增加。

  对这种现象的解释,要借助margin的概念,其中margin表示如下:

  通过引入margin的概念,我们可以观察到下图所出现的现象:

  从图上左边的子图可以看到,随着训练次数的增加,test的误差率并没有升高,同时对应着右边的子图可以看到,随着训练次数的增加,margin一直在增加。这就是说,在训练误差下降到一定程度以后,更多的训练,会增加分类器的分类margin,这个过程也能够防止测试误差的上升。

三、多分类adaboost

  在日常任务中,我们通常需要去解决多分类的问题。而前面的介绍中,adaboost算法只能适用于二分类的情况。因此,在这一小节中,我们着重介绍如何将adaboost算法调整到适合处理多分类任务的方法。

  目前有三种比较常用的将二分类adaboost方法。

1adaboost M1方法

  主要思路: adaboost组合的若干个弱分类器本身就是多分类的分类器。

  在训练的时候,样本权重空间的计算方法,仍然为:

  在解码的时候,选择一个最有可能的分类

2adaboost MH方法

  主要思路:组合的弱分类器仍然是二分类的分类器,将分类label和分类样例组合,生成N个样本,在这个新的样本空间上训练分类器。

  可以用下图来表示其原理:

3、对多分类输出进行二进制编码

  主要思路:对Nlabel进行二进制编码,例如用m位二进制数表示一个label。然后训练m个二分类分类器,在解码时生成m位的二进制数。从而对应到一个label上。

四、总结

  最后,我们可以总结下adaboost算法的一些实际可以使用的场景:

1)用于二分类或多分类的应用场景

2)用于做分类任务的baseline

  无脑化,简单,不会overfitting,不用调分类器

3)用于特征选择(featureselection)

4Boosting框架用于对badcase的修正

  只需要增加新的分类器,不需要变动原有分类器

  由于adaboost算法是一种实现简单,应用也很简单的算法。Adaboost算法通过组合弱分类器而得到强分类器,同时具有分类错误率上界随着训练增加而稳定下降,不会过拟合等的性质,应该说是一种很适合于在各种分类场景下应用的算法。



1、 http://hi.baidu.com/megachan/blog/item/09a24deea4c2a521acafd590.html

2、http://stblog.baidu-tech.com/?p=19


Boosting算法MATLAB实现

算法描述 从大小为n的原始样本集D中不放回得随机选取n1个样本点,得到样本集D1,根据D1训练第一个弱分类器C1。 采用掷硬币方式,如果是正面就选取D中剩余样本点一个一个送到C1中进行分类,遇到第一个...
  • gaojing919
  • gaojing919
  • 2017年03月26日 20:48
  • 1416

boosting和bagging算法学习

boosting和bagging都是集成学习(ensemble learning)领域的基本算法[2]。 集成学习是指将若干弱分类器组合之后产生一个强分类器。...
  • u010659278
  • u010659278
  • 2015年03月22日 00:30
  • 11842

Boosting & AdaBoost算法

提升和自适应提升方法 Boosting & AdaBoost 1 算法起源    在机器学习领域中,关键问题就是如何利用观测数据通过学习得到精确估计。但是,在实际应用领域中,构造一个高精度的估计...
  • NeuFace
  • NeuFace
  • 2015年12月29日 09:06
  • 3525

Gradient Boosting

1. 决策树       应用最广的分类算法之一,模型学习的结果是一棵决策树,这棵决策树可以被表示成多个if-else的规则。决策树实际上是将空间用超平面进行划分的一种方法,每次分割的时候,都将...
  • xulinshadow701
  • xulinshadow701
  • 2015年01月26日 20:39
  • 2199

Boosting原理及其应用

一、背景 故事:    某男到医院就诊,医生亲切地问了一些该男的症状,最后得出结论:“医生说我怀孕了。。。” 血淋淋的故事告诉我们:     需要一个好的诊断器:根据病人的一系列症状,得出...
  • laiqun_ai
  • laiqun_ai
  • 2015年07月05日 09:40
  • 1174

统计学习方法学习笔记《八》——Boosting方法

引言         提升()
  • Speknighter
  • Speknighter
  • 2014年10月23日 12:07
  • 829

机器学习:集成学习算法Bagging,Boosting

Bootstrap,Bagging,Boosting都属于集成学习方法,所谓集成学习方法,就是将训练的学习器集成在一起,原理来源于PAC (Probably Approximately Correct...
  • li_dongxuan
  • li_dongxuan
  • 2017年02月18日 15:36
  • 775

boosting(AdaBoost)算法

1、bagging算法 bagging算法来源于boosttrsp
  • wanrenwangxuejing
  • wanrenwangxuejing
  • 2014年04月23日 10:54
  • 2474

机器学习----集成学习(Boosting)

Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似: 先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的样本在后面受到更...
  • Love_wanling
  • Love_wanling
  • 2017年04月19日 16:05
  • 457

提升方法(boosting)详解

注:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-727-1-1.html 提升方法是基于这样一种思想:对于一个复杂任务来说,将多个专家...
  • carson2005
  • carson2005
  • 2013年03月22日 22:05
  • 9157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Boosting算法
举报原因:
原因补充:

(最多只允许输入30个字)