AdaBoost
来源:互联网 发布:淘宝访客数突然下降 编辑:程序博客网 时间:2024/05/08 11:57
注:在《Frequency-tuned taillight-based nighttime vehicle braking warning system》论文中看到使用Adaboost方法进行车灯类型的分类,通过这个方式来排除非车灯灯源。故查询了Adaboost方法的一些概念和用法:
AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上。虽然AdaBoost方法对于噪声数据和异常数据很敏感。但相对于大多数其它学习算法而言,却又不会很容易出现过拟合现象。
在具体实现上,最初令每个样本的权重都相等,对于第k次迭代操作,我们就根据这些权重来选取样本点,进而训练分类器Ck。然后就根据这个分类器,来提高被它分错的的样本的权重,并降低被正确分类的样本权重。然后,权重更新过的样本集被用于训练下一个分类器Ck。整个训练过程如此迭代地进行下去。最后,把所有的分类器Ck线性组合起来。伪代码如下图所示。
这个过程就像是做练习题,刚开始的时候对于所有题目一视同仁,一遍做完之后,对一下答案,把对的和错的分开,然后把错题转移到错题集去,下次做题的时候就不是对所有题目等同对待了,应该重点关注错题集,和错题集类似的题目应该引起更大关注,反复去做,对于简单的题目,可以简单带过。这样做了很多的题目之后,简单题目和易错题目都解决了。
看了伪代码,可能还是云里雾里的,不要紧。下面有一个很好的具体例子来解释说明AdaBoost。
首先,有正样本和负样本,分布如下图,图中,“+”和“-”分别表示正样本和负样本。显然,我们是无法直接用一条直线把两类分来的,最好的分割线,只能是曲线。在这个过程中,每次我们都使用最好的水平或者垂直的直线作为分类器,来进行分类。
第一步:初始化权值,用垂直的的直线作为分类器。根据分类的正确率,得到一个新的样本分布D2,一个子分类器h1。
然后,这里的参数是怎么计算得来的呢?这里总共有10个样本,所以每一个的权值为0.1,从上图可以看出,有三个正样本(蓝色+)被错分类负样本了(红色-),根据所以误差为三个错误样本的权值之和,即ɛ1=(0.1+0.1+0.1)=0.3。而ɑ1 的计算是根据来算的,。然后,分错的样本权值要变大才行,下次分类要引起更多的关注。所以,进行权值更新。权值更新公式如下:
正确分类的七个点,权值保持0.1不变,错误分类的三个点,权值为
也就是说,现在的权值变成了7个0.1和3个0.233,如此迭代下去。
第二步:根据新的权值,用垂直的的直线作为分类器。根据分类的正确率,得到一个新的样本分布D3,一个子分类器h2。
第三步:根据新的权值,用水平的的直线作为分类器。根据分类的正确率,得到一个新的样本分布D4,一个子分类器h3。
第四步:把所有子分类器线性组合起来。每一个的权值就是前面求出来的ɑ的值。
三、AdaBoost应用实例
关于AdaBoost的应用,最为经典就是用于人脸识别的那两篇文章,现在也已经包含在opencv里面了,人脸识别的分类器文件opencv也带了。
P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features.
R. Lienhart and J. Maydt. An Extended Set of Haar-like Features for Rapid Object Detection.
Paul Viola 和Miachael Jones等利用Adaboost算法构造了人脸检测器,称为Viola-Jones检测器,取得很好的效果。之后Rainer Lienhart和Jochen Maydt用对角特征,即Haar-like特征对检测器进行扩展。OpenCV中自带的人脸检测算法即基于此检测器,称为“Haar分类器”。
用Adaboost对Haar特征进行分类,也取得了很好地效果。也因此,Boosting的方法在十年前又变得很火,出现了很多种变种的算法。
四、总结
最后,总结一下。Adaboost是一种比较有特点的算法,可以总结如下:
1)每次迭代改变的是样本的分布,而不是重复采样(reweight);
2)样本分布的改变取决于样本是否被正确分类,总是分类正确的样本权值低,总是分类错误的样本权值高(通常是边界附近的样本);
3)最终的结果是弱分类器的加权组合,权值表示该弱分类器的性能。
简单来说,Adaboost有很多优点:
1)adaboost是一种有很高精度的分类器
2)可以使用各种方法构建子分类器,adaboost算法提供的是框架
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
4)简单,不用做特征筛选
5)不用担心overfitting!
- Adaboost
- adaBoost
- adaboost
- Adaboost
- Adaboost
- AdaBoost
- AdaBoost
- AdaBoost
- AdaBoost
- AdaBoost
- AdaBoost
- adaboost
- AdaBoost
- Adaboost
- Adaboost
- AdaBoost
- Adaboost
- Adaboost
- GPS-NMEA解析代码
- 图像显著性论文(二)—Saliency Detection: A Spectral Residual Approach
- 小议MVC模式
- 工作了以后我们究竟该如何学习PHP?
- cocos2dx-3.2(34) DrawNode 绘图API
- AdaBoost
- Java 内存泄漏总结
- MAC Tree 实现的方法(NSOutlineView) 1
- Mac OS X 配置 Apache+Mysql+PHP 详细教程
- 进程和线程
- 创建型--单态模式
- LINK : fatal error LNK1123: 转换到 COFF 期间失败(安装Parallel_Nsight_Win64_2.*在vs中出错)
- extjs 遍历TreePanel中选中的节点
- HDU 1232 畅通工程 并查集