Adaboost是广义上的提升方法(boosting method)的一个特例。广泛应用于人脸识别等领域。

它的基本思想是,“三个臭皮匠赛过诸葛亮”,即用多个弱分类器的线性加权,来得到一个强的分类器。弱分类器到底有多“弱”呢?在某些情境下,xi>v就是一个弱分类器,它只对输入特征的某一个维度做判断,真是够弱了。

首先,弱分类器是一个一个的学习的,而且,根据这些弱分类器的表现,配以不同的权重,表现好的弱分类器,权重就大一点,表现不好的弱分类器,权重就小一点。

其次,在每一次学习时,每个弱分类器其实处理的都是不一样的数据,what?因为在学习时,我们会给不同的样本配以不同的权重,若这个样本对于当前的弱分类器来说比较重要,权重就大一些,反之权重就小一些。

现在我们大概知道了,Adaboost就是通过不断调整样本权重,来学习不同的弱分类器,然后将这些弱分类器,按照它们各自的表现配以不同的权重,线性加权得到最终的分类器。看来,“权重”这个概念在Adaboost方法中显得非常重要。

具体的来说,在学习第一个弱分类器时,各样本的权重都是一样的,且加和为1。在我们学习到第一个弱分类器f1之后,计算f1的分类误差,注意,这里的分类误差是基于样本权重来计算的,然后我们根据这个分类误差,确定第一个弱分类器的权重。最后,我们需要根据当前弱分类器的分类结果,对样本权重进行调整。被正确分类的,权重调低,被错误分类的,权重调高。然后继续学习下一个弱分类器。

我们打一个比方,一群学生不服管教,校长从警官学校请来一批教员,依次给学生上课,每个教员都有自己的拿手绝活。第一个教员上完课之后,一部分学生变乖的,另一部分学生仍然不听话。于是第一个教员把不听话的学生列了一个名单,交给第二个教员,让他对这些“问题学生”格外关注,第二个教员教完后,首先,这些“问题学生”之中,有一部分变乖了,还有一部分仍然不听话,其次,之前的乖学生,也有一部分不服第二个教员,于是第二个教员把他所遇到的不听话的学生,又列了一个名单,交给了第三个教员。第三个教员拿到的名单,包含了两部分“问题学生”,一部分是仅不服第二个教员的,他们的名字用普通字体标识,另外一部分是前两个教员都不服的,他们的名字加粗显示。于是第三个教员就心中有数了,他给学生上课的时候,重点关注那些“问题学生”,尤其是对前两个教员都不服的“问题学生”。依次进行下去。最后,学期结束校长验收,当这批教员同时出现时,绝大多数学生都变成了听话的学生。

以上是Adaboost的通俗解释。我们看Adaboost算法细则时,经常会感到疑惑,为什么这个权重这样调整?为什么这个参数这样设置?看似巧妙,实际上背后有深刻的理论支撑。这个理论就是,可加性模型。可加性模型听起来高大上,但它的一个例子很亲民,就是决策树。

可加性模型可以这样表示 Fm = f1+f2+...+fm。其中fi表示一些弱分类器,我们把这些弱分类器线性组合起来,就能构成一个强分类器。但是,同时求解这些弱分类器,比较困难,因此我们通常采用前向分步算法。具体是,先求F1 = f1,在一定的损失函数下,确定f1,然后,求F2 = f1+f2,在一定的损失函数下,确定f2,依次类推。可以看出,我们每次都是在前一次学习的基础上,再学习下一个弱分类器。这里的f2,可以针对f1分错的样例进行纠错和补充,这一点是非常重要的,对比决策树,如果我们在父节点对样本的分类不够纯粹,可以在子节点进行修复和纠错,这一点上来看,决策树和可加性模型是同一个思路。事实上,可加性模型中,就有一种以决策树作为弱分类器的模型,称为提升树(boosting tree)。

对于可加性模型,我们再举一个回归树的例子。仍然假设Fm = f1+f2+...+fm,此时,我们用f2去拟合f1和y之间的残差,从而得到对y更准确的估计。这里仍然遵循了上面的思路,用后面的弱学习器对前面的弱学习器进行补充和纠错。

再回到Adaboost,如果我们把模型选作可加性模型,损失函数选作指数损失,算法选择前向分步算法,那么得到的就是Adaboost模型。

Adaboost的意义的更多相关文章

  1. 关于Adaboost——样本抽样的权值的实际意义

    看这篇文章的前提:已经看了PRML中的Adaboost的算法流程 看懂下面的内容必须牢牢记住:Adaboost使用的误差函数是指数误差 文章主要目的:理解样本抽样的权值是为什么那样变化的. 得出的结论 ...

  2. scikit-learn Adaboost类库使用小结

    在集成学习之Adaboost算法原理小结中,我们对Adaboost的算法原理做了一个总结.这里我们就从实用的角度对scikit-learn中Adaboost类库的使用做一个小结,重点对调参的注意事项做 ...

  3. PRML读书会第十四章 Combining Models(committees,Boosting,AdaBoost,决策树,条件混合模型)

    主讲人 网神 (新浪微博: @豆角茄子麻酱凉面) 网神(66707180) 18:57:18 大家好,今天我们讲一下第14章combining models,这一章是联合模型,通过将多个模型以某种形式 ...

  4. 基于MATLAB的adaboost级联形式的人脸检测实现

    很早之前就做过一些关于人脸检测和目标检测的课题,一直都没有好好总结出来,趁着这个机会,写个总结,希望所写的内容能给研究同类问题的博友一些见解和启发!!博客里面涉及的公式太繁琐了,直接截图了. 转载请注 ...

  5. 基于单决策树的AdaBoost

    ①起源:Boosting算法 Boosting算法的目的是每次基于全部数据集,通过使用同一种分类器不同的抽取参数方法(如决策树,每次都可以抽取不同的特征维度来剖分数据集) 训练一些不同弱分类器(单次分 ...

  6. 几种Boost算法的比较(Discrete AdaBoost, Real AdaBoost, LogitBoost, Gentle Adaboost)

    关于boost算法 boost算法是基于PAC学习理论(probably approximately correct)而建立的一套集成学习算法(ensemble learning).其根本思想在于通过 ...

  7. adaboost算法

    三 Adaboost 算法 AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(很多博客里说的三个臭皮匠 ...

  8. 机器学习技法-AdaBoost元算法

    课程地址:https://class.coursera.org/ntumltwo-002/lecture 重要!重要!重要~ 一.Adaptive Boosting 的动机 通过组合多个弱分类器(hy ...

  9. aggregation(2):adaptive Boosting (AdaBoost)

    给你这些水果图片,告诉你哪些是苹果.那么现在,让你总结一下哪些是苹果? 1)苹果都是圆的.我们发现,有些苹果不是圆的.有些水果是圆的但不是苹果, 2)其中到这些违反"苹果都是圆的" ...

随机推荐

  1. python学习:递归列出目录里的文件

    #!/usr/bin/python   import os import sys   def print_files(path):     lsdir = os.listdir(path)     d ...

  2. Linux系统Go开发环境搭建

    Go 语言是由谷歌的科学家开发的,并开源的新语言,被誉为"21世纪的C语言",它的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得 ...

  3. 洛谷 P1486 [NOI2004]郁闷的出纳员【Treap】题解+AC代码

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

  4. hplus--H+ V2.3 (中文版)

    一个高大上的后台模板 演示地址 http://www.zi-han.net/theme/hplus/?v=4.1 下载地址 http://download.csdn.net/detail/u01197 ...

  5. 腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:黄文俊,腾讯云高级产品经理,曾经历过企业级存储.企业级容器平台等产品的架构与开发,对容器.微服务.无服务器.DevOps等都有浓厚兴趣. ...

  6. Java经典编程题50道之十四

    输入某年某月某日,判断这一天是这一年的第几天? public class Example14 {    public static void main(String[] args) {         ...

  7. jsp去除空行的web.xml配置

    在jsp中我们引入的标签,例如jstl的标签,循环遍历等等,可能会产生很多空行,其实也没什么,不会影响展示,但是空行多多少少会影响性能,这是我们只需要在web.xml中配置一下我们就可以很简单的去掉, ...

  8. 情景linux--如何摆脱深路径的频繁切换烦恼?

    情景 通常情况下,在linux系统上切换目录的成本很低,使用cd命令就可以了.如果需要在一个目录的不同的子目录和其父目录之间切换,进入到这个目录之后,再使用相对路径会比较方便.如果要切换的目录的路径较 ...

  9. Spring初始化ApplicationContext为null

    1. ApplicationContextAware初始化 通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationConte ...

  10. 如何在模拟器里体验微软HoloLens

    众所周知,微软的HoloLens以及MR设备售价都比较高,这让不少感兴趣的朋友们望而却步,本篇教程将向大家介绍如何在模拟器里体验传说中的HoloLens. 1.需要准备的硬件: 智能手机一台(WP.A ...