boosting

bagging,boosting,adboost,random forests都属于集成学习范畴.

 在boosting算法产生之前,还出现过两种比较重要的算法,即boostrapping方法和bagging方法。首先介绍一下这二个算法思路:

  1. 从整体样本集合中,抽样n* < N个样本 针对抽样的集合训练分类器Ci ,抽样的方法有很多,例如放回抽样,不放回抽样等.
  2. 对于预测样本, 众多分类器进行投票,最终的结果是分类器投票的优胜结果.

以上就是bagging的主要思想.但是,上述这两种方法,都只是将分类器进行简单的组合,实际上,并没有发挥出分类器组合的威力来。到1989年,Yoav Freund与 Robert Schapire提出了一种可行的将弱分类器组合为强分类器的方法。即boosting算法. 还有1995年,Freund and schapire提出了现在的adaboost算法:http://www.cnblogs.com/liqizhou/archive/2012/04/23/2466578.html.

以下参考别人写的boosting方法,加上自己的一点体会.

 

Boosting方法:

    Boosting这其实思想相当的简单,大概是,对一份数据,建立M个模型(比如分类),一般这种模型比较简单,称为弱分类器(weak learner)每次分类都将上一次分错的数据权重提高一点再进行分类,这样最终得到的分类器在测试数据与训练数据上都可以得到比较好的成绩。

   boosting_第1张图片

    上图(图片来自prml p660)就是一个Boosting的过程,绿色的线表示目前取得的模型(模型是由前m次得到的模型合并得到的),虚线表示当前这次模型。每次分类的时候,会更关注分错的数据,上图中,红色和蓝色的点就是数据,点越大表示权重越高,看看右下角的图片,当m=150的时候,获取的模型已经几乎能够将红色和蓝色的点区分开了。

    Boosting可以用下面的公式来表示:boosting_第2张图片

    训练集中一共有n个点,我们可以为里面的每一个点赋上一个权重Wi(0 <= i < n),表示这个点的重要程度,通过依次训练模型的过程,我们对点的权重进行修正,如果分类正确了,权重降低,如果分类错了,则权重提高,初始的时候,权重都是一样的。上图中绿色的线就是表示依次训练模型,可以想象得到,程序越往后执行,训练出的模型就越会在意那些容易分错(权重高)的点。当全部的程序执行完后,会得到M个模型,分别对应上图的y1(x)…yM(x),通过加权的方式组合成一个最终的模型YM(x)。

    我觉得Boosting更像是一个人学习的过程,开始学一样东西的时候,会去做一些习题,但是常常连一些简单的题目都会弄错,但是越到后面,简单的题目已经难不倒他了,就会去做更复杂的题目,等到他做了很多的题目后,不管是难题还是简单的题都可以解决掉了。

 

算法的流程:

  1. 给每个样本都赋予一个权重,可以使随机,也可以使相等的权重.
  2. 按照样本权重从大到小的顺序,选择n个样本训练弱分类器Ci.
  3. 在样本预测阶段, 多个分类器进行投票决定样本数据那种分类.

你可能感兴趣的:(boosting)