Adaboost原理

Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器,然后把这些弱分类器集合起来,构成强分类器。adaboost算法训练的过程中,初始化所有训练样例的具有相同的权值重,在此样本分布下训练出一个弱分类器,针对错分样本加大对其对应的权值,分类正确的样本降低其权值,使前一步被错分的样本得到突显,获得新的样本分布,在新的样本分布下,再次对样本进行训练,又得到一个分类器。依次循环,得到T个分类器,将这些分类器按照一定的权值组合,得到最终的强分类器。训练的关键是针对比较难分的训练样本,在联合弱分类器时,使用加权投票,这样分类效果好的弱分类器得到较大的权重,分类效果差的则权值较小。Adaboost方法是经过调整的boosting算法,能够对弱学习得到的弱分类器的错误率进行适应性调整, 相对boosting算法,Adaboost方法使用加权后选取的训练数据代替随机选取的训练样本,训练的焦点集中在比较难分的训练数据样本上;在联合弱分类器联合时,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。

Adaboost算法的具体过程

1.初始化所有训练样例的权重为1 / N,其中N是样例数

2.for m=1,……M:

a).训练弱分类器ym(),使其最小化权重误差函数(weighted error function):

b)接下来计算该弱分类器的话语权α:

c)更新权重:

其中Zm:

是规范化因子,使所有w的和为1。(这里公式稍微有点乱)

3.得到最后的分类器:

Adaboos的过程可以用如下结构表示:

最后的分类器YM是由数个弱分类器(weak classifier)组合而成的,相当于最后m个弱分类器来投票决定分类,而且每个而且每个弱分类器的“话语权”α不一样。

  上述迭代算法中,每一次循环根据当前的权重分布对样本x定一个分布P,然后对这个分布下的样本使用弱学习算法得到弱分类器,而这个错误率的上限并不需要事先知道。每 一次迭代,都要对权重进行更新。更新的规则是:减小弱分类器分类效果较好的数据的概率,增大弱分类器分类效果较差的数据的概率。最终的分类器是个弱分类器的加权平均。

 adaboost在目标检测中的应用

        在实际应用中,adaboost基本上可以训练任何想要检测的目标比如车辆、人脸、字符、商标、建筑物等等,收集正负样本,正样本为所训练的目标,比如下图中车辆、字符、人脸等目标已经切分好的目标。

负样本可以为图像中未包含正样本的任意图像。分类器训练方法可以按照http://www.cnblogs.com/whowhoha/p/5623483.html 的方法训练分类器,训练完成后,导入分类器(openCv中为xml文件)参数对图像进行扫描检测,将扫描的多个候选框合并即可得到最终的目标位置。

另外:训练分类器参数设置示例及训练过程中的参数设置方法说明

训练级联Adaboost参数如下:

numPos: 9000

numNeg: 28000

numStages: 18

precalcValBufSize[Mb] : 1000

precalcIdxBufSize[Mb] : 1000

stageType: BOOST

featureType: HARR

sampleWidth: 24

sampleHeight: 24

boostType: DAB

minHitRate: 0.95

maxFalseAlarmRate: 0.65

weightTrimRate: 0.97

maxDepth: 1

maxWeakCount: 100

1 正负样本比例问题:比例大约1:3的样子比较好,1:3或者1:4训练出来的分类器要优于1:1或者1:9,原因是正负样本比例接近时,对负样本的命中程度低(实际中负样本肯定远远多于正样本),正负样本比例较大(比如1:9)时,重视负样本的统计特性而忽略了正样本的统计特性,造成正样本权重总和小,当权重小于一定程度的时候可能很大一部分正样本都不参与训练了(在weightTrimRate=0.95时)。

2 minHitRate:分类器的每一级希望得到的最小检测率。总的检测率大约为minHitRate ^ numStages。影响每个强分类器阈值,当设置为0.95时如果正训练样本个数为12000个,那么其中的600个就很可能被判别为负样本,第二次选择的时候必须多选择后面的600个,按照这种规律我们为后面的每级多增加numPos*minHitRate个正样本,根据训练的级数可以得到如下公式

numPos+(numStages-1)*numPos*(1-minHitRate),即需要准备的训练正样本个数

3 maxFalseAlarm:分类器的每一级希望得到的最大误检率。总的误检率大约为maxFalseAlarm ^ numStages,.影响每个强分类器中弱分类器的个数,设置较大,每级可以滤除负样本的比例就较小,这样在测试过程中虚警率就较高;设置较小,每级强分类器中弱分类器的个数就较多,检测时间就会相对要长,在可以接受的检测时间下尽量降低maxFalseAlarm是我们要追求的目标

关于负样本的选择,因为每级剩下的负样本个数低于numNeg*maxFalseAlarm,在第二轮选择的时候从之前选择的负样本后面继续选择,而不是重头开始将选择过的负样本也包含进来,只有当遍历完一遍负样本列表后才重头在扫描一遍

4 weightTrimRate:影响参与训练的样本(不管是正样本还是负样本),当更新完样本权重之后,将样本权重按照从小到大的顺序排列,从后面开始累加样本权重大于weightTrimRate时,前面的样本就不参与后面的训练了

5 maxWeakCount:决定每级强分类器中弱分类器的最大个数,当FA降不到指定的maxFalseAlarm时可以通过指定最大弱分类器个数停止单个强分类器。

6 boost参数(maxDepth、bt):影响决策树构建的法则以及权重更新策略

本文来源:http://www.cnblogs.com/whowhoha/p/5623977.html

机器学习-分类器-Adaboost原理的更多相关文章

  1. 机器学习之AdaBoost原理与代码实现

    AdaBoost原理与代码实现 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-further-further/p/9642899.html 基本思路 ...

  2. 集成学习之Boosting —— AdaBoost原理

    集成学习大致可分为两大类:Bagging和Boosting.Bagging一般使用强学习器,其个体学习器之间不存在强依赖关系,容易并行.Boosting则使用弱分类器,其个体学习器之间存在强依赖关系, ...

  3. AdaBoost原理详解

    写一点自己理解的AdaBoost,然后再贴上面试过程中被问到的相关问题.按照以下目录展开. 当然,也可以去我的博客上看 Boosting提升算法 AdaBoost 原理理解 实例 算法流程 公式推导 ...

  4. Adaboost原理及目标检测中的应用

    Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...

  5. 机器学习算法-Adaboost

    本章内容 组合类似的分类器来提高分类性能 应用AdaBoost算法 处理非均衡分类问题 主题:利用AdaBoost元算法提高分类性能 1.基于数据集多重抽样的分类器 - AdaBoost 长处 泛化错 ...

  6. 机器学习之Adaboost与XGBoost笔记

    提升的概念 提升是一个机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中:如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升(Gra ...

  7. adaboost原理与实践

    Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器).其算法本身是通过改变数据分布来实现的,它根据 ...

  8. 入门系列之Scikit-learn在Python中构建机器学习分类器

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由信姜缘 发表于云+社区专栏 介绍 机器学习是计算机科学.人工智能和统计学的研究领域.机器学习的重点是训练算法以学习模式并根据数据进行预 ...

  9. 客户续费模型 逻辑回归 分类器 AdaBoost

    客户续费模型  逻辑回归 分类器  AdaBoost

随机推荐

  1. Tomcat 负载均衡 及Session共享

    原文:https://www.sunjianhua.cn/archives/tomcat-high-availability.html 一.安装java环境 二.安装tomcat(apache-tom ...

  2. 【CentOS】centos7 稳定使用版本,centos镜像的下载

    命令: cat /etc/redhat-release 下载地址: https://wiki.centos.org/Download 下载版本:

  3. ifeq endif

    ifeq ($(PLATFORM_VERSION),4.4)$(info "________________________4.4"); LOCAL_CFLAGS += -DPLU ...

  4. Java判断多个时间段是否重叠(重叠区间个数)

    import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 判断多个时间段是否出现重叠 ...

  5. PlaceholderTextView

    PlaceholderTextView 效果 源码 https://github.com/YouXianMing/UI-Component-Collection 的 PlaceholderTextVi ...

  6. 在LaTeX中使用颜色 Using colours in LaTeX

    Using colours in LaTeX There are several elements in LATEX whose colour can be changed to improve th ...

  7. Ubuntu 查找文件的方法

    1. whereis+文件名 用于程序名的搜索,搜索结果只限于二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s),如果省略参数,则返回所有信息. 2. find / -name ...

  8. The Art of Deception

    前言 一些黑客毁坏别人的文件甚至整个硬盘,他们被称为电脑狂人(crackers)或计算机破坏者(vandals).另一些新手省去学习技术的麻烦,直接下载黑客工具侵入别人的计算机,这些人被称为脚本小子( ...

  9. css控制input标签

    逛到发现这个 个人感觉非常赞 下面是CSS样式 Js代码                           input { border:1px solid #B3D6EF; background: ...

  10. 微信小程序wxml文件中调用自定义函数

    想在微信小程序的wxml文件里自如的像vue那样调用自定义的方法,发现并不成功,得利用WXS脚本语言. WXS脚本语言是 WeiXin Script 脚本语言的简称,是JavaScript.JSON. ...