zoukankan      html  css  js  c++  java
  • Boosting, Online Boosting,adaboost

    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)每次分类都将上一次分错的数据权重提高一点再进行分类,这样最终得到的分类器在测试数据与训练数据上都可以得到比较好的成绩。

        image

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

        Boosting可以用下面的公式来表示:image

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

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

    算法的流程:

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

    Online Boosting

     在线 Boosting 算法重点研究如何替换弱分类器来学习时变的样本集,本文提出了一种新的在线 Boosting 算法,各弱学习器调节自身参数进而适应时变的环境。与以往直接替换学习器的方式不同,该方法随着新的样本集的到来调节弱分类器的参数,使分类正确率高的弱分类器有较高的权重,而分类正确率低的弱分类器的权重也会相应降低。

    下面讲一下Poisson重采样
    对每一训练样本,按照参数为 λ 的 Poisson分布得到一个随机数,对样本重复训练该随机数次。一个基学习器训练完毕之后将该样本继续传递给下一个基学习器。当一个基学习器误分类一个训练样本,该样本在提交给下一个基学习器时,其对应的 Poisson 分布参数 λ 增加;反之样本对应的 Poisson分布参数减少,并通过这些来更新每个基学习器的误差 ε 。从这个角度,训练样本的权重更新方法和离线 AdaBoost 相同。

    其流程如下:

    其中:λm 的作用是控制整个基分类器的误差,因为在线进来的不知一个样本。有很多样本。

    下面给出online boosting 和online adboosting的思路。

    在目标图像的目标物体附近选择正样本,离目标物体远的区域作为负样本。

    OAB1 = 在线boosting(搜索半径r=1,每帧1个正样本)
    OAB5 = 在线boosting(搜索半径r=5,每帧45个正样本)


    以上是我个人的理解,如有错误,请留言告诉我,本人感激不尽。作者:BIGBIGBOAT/Liqizhou

  • 相关阅读:
    printcap
    browser-ua
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 72 编辑距离
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode 71 简化路径
    Java实现 LeetCode70 爬楼梯
  • 原文地址:https://www.cnblogs.com/liqizhou/p/2494145.html
Copyright © 2011-2022 走看看