Adaboost 总结的很好

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

wiki  http://en.wikipedia.org/wiki/AdaBoost

一、Boosting算法的发展历史

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

  1)bootstrapping方法的主要过程

  主要步骤:

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

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

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

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

  2)bagging方法的主要过程  -----bagging可以有多种抽取方法

  主要思路:

  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 and schapire提出了现在的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方法。

  1、adaboost M1方法

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

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

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

  2、adaboost MH方法

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

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

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

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

四、总结

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

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

  2)用于做分类任务的baseline

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

  3)用于特征选择(feature selection)

  4)Boosting框架用于对badcase的修正

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

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

时间: 2024-09-30 16:39:29

Adaboost 总结的很好的相关文章

独家 | 一文读懂集成学习(附学习资源)

集成算法(Ensemble Algorithms)综述 严格意义上来说,这不算是一种机器学习算法,而更像是一种优化手段或者策略,它通常是结合多个简单的弱机器学习算法,去做更可靠的决策.有人把它称为机器学习中的"屠龙刀",非常万能且有效,集成模型是一种能在各种的机器学习任务上提高准确率的强有力技术,集成算法往往是很多数据竞赛关键的一步,能够很好地提升算法的性能.哲学思想为"三个臭皮匠赛过诸葛亮".拿分类问题举个例,直观的理解,就是单个分类器的分类是可能出错,不可靠的,

机器学习基础(七)Adaboost

Adaboost也是一种原理简单,但很实用的有监督机器学习算法,它是daptive boosting的简称.说到 boosting算法,就不得提一提bagging算法,他们两个都是把一些弱分类器组合起来来进行分类的方法,统称 为集成方法(ensemble method),类似于投资,"不把鸡蛋放在一个篮子",虽然每个弱分类器分类的不那么 准确,但是如果把多个弱分类器组合起来可以得到相当不错的结果,另外要说的是集成方法还可以组合不同的 分类器,而Adaboost和boosting算法的每

opencv haar+adaboost使用心得

最近在使用opencv里的haar+adaboost做检测,其实早在一年前的无锡已经看过用它做车徽检测,然后再做识别(大众,奔驰...).这次终于要自己动手做了,网上有很多这方面的资料,感谢大家分享他们的经验.重复的东西这里就不再赘述了,只简单的补充几个大家容易疏忽的东西. step1.首先是准备正负样本,正样本好说,打了标签,解析xml文件,然后做点小旋转就可以用了        负样本就复杂了,第一点要求是不能包含正样本,在我的应用场景中还需要尽可能多的提供场景的背景图,而不是网上所说的从网

人脸检测-adaboost中haar特征的积分图如何计算

问题描述 adaboost中haar特征的积分图如何计算 积分图是先将每个位置对应的区域的值相加后放到数组中吗?即第一步的值是放到数组中吗?如果一个大图片那岂不是数组要占用很大空间啊. 解决方案 Haar特征与积分图Haar特征与积分图Haar特征与积分图

【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景      上一节学习支持向量机,感觉公式都太难理解了,弄得我有点头大.不过这一章的Adaboost线比较起来就容易得多.Adaboost是用元算法的思想进行分类的.什么事元算法的思想呢?就是根据数据集的不同的特征在决定结果时所占的比重来划分数据集.就是要对每个特征值都构建决策树,并且赋予他们不同的权值,最后集合起来比较.       比如说我们可以通过是否有胡子和身高的高度这两个特征来来决定一个人的

Machine Learning in Action -- AdaBoost

初始的想法就是,结合不同的分类算法来给出综合的结果,会比较准确一些  称为ensemble methods or meta-algorithms,集成方法或元算法 集成方法有很多种,可以是不同算法之间的,也可以是同一个算法但不同参数设置之间的,也可以是将数据集分成多分给不同的分类器之间的  总的来说,有3个维度可以进行集成,算法,算法参数和数据集 下面简单介绍两种比较流行的元算法思路, 1. Building classifiers from randomly resampled data: b

独家 | 一文读懂Adaboost

本文是数据派研究部"集成学习月"的第二篇文章,本月将陆续发布关于集中学习的话题内容,月末将有答题互动活动来赢奖,欢迎随时留言讨论相关话题. 引言 在正儿八经地介绍集成学习的内容之前,我们想先介绍一下Kaggle竞赛,这是我们要介绍集成学习的初衷之一.Kaggle(https://www.kaggle.com)是由安东尼·戈德布卢姆在2010年创办的一个数据建模和数据分析平台,其目标就是使数据科学成为一项运动 .这个平台对所有的注册用户开放,企业和研究者可以在上面发布自己的数据并描述自己

数据挖掘十大经典算法——AdaBoost

数据挖掘十大经典算法(7) AdaBoost AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,是一种机器学习方法,由Yoav Freund和Robert Schapire提出.AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器.AdaBoost方法对于噪声数据和异常数据很敏感.但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象.AdaBoost方法中使用的分类器可能很弱(比如出现很

如何解决局域网传输速度很慢的问题

故障分析并列出以下几种可能: 1.黑客攻击或中蠕虫病毒 2.线路故障 3.交换机超载 4.网络适配器故障 5.连通性问题 故障排除方法: 1.任意选取几台工作站,检查它的网络配置,正确无误.能够Ping通服务器,响应时间<1ms,属于正常范围,即连通性没有问题.在其中一台计算机上安装了WINDUMP来获取数据包,结果没有发现什么问题,故排除了黑客攻击或中蠕虫病毒的可能性. 2.在排除线路故障时,我们知道是所有的电脑都出现网内计算机传输速度较慢的问题;所以最大的可能只有6类线路的布线通过率的问题.