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. iterm2 快捷键大全

    Mac 原来自带的终端工具 Terminal 不好用是出了名的,虽然最近几个版本苹果稍微做了些优化,功能上,可用性方面增强不少,无奈有个更好用的 Iterm2 摆在那,基本上也就没有多少出场机会了 I ...

  2. intellij idea maven 工程生成可执行的jar

    新建maven 工程 写hello world 修改pom.xml 文件 <build> <pluginManagement> <plugins> <plug ...

  3. web自动化一(selenium+python+pycharm环境搭建)

    年前公司刚刚搭起了web自动化测试框架的环境,趁着过完年还没全部忘掉,准备把如何搭建环境的方法和大家分享下,有哪里不对的地方,请批评指正,共同进步,共勉! 为此我把搭建环境所需的软件打包上传到百度云, ...

  4. vue——安装并新建项目

    一.对于vue的安装: 1.安装vue之前先安装node,https://nodejs.org/zh-cn/download/,我装的是windows64位的: 2.下载好了之后就可以按照正常顺序安装 ...

  5. python+flask:实现POST接口功能

    1.首先需要安装python和flask,这个是必须的嘛. 2.我们这里实现的是一个POST功能的简单接口. from flask import Flask, request, jsonify imp ...

  6. 第十八章 DjangoWeb开发框架

    第十八章 DjangoWeb开发框架 第一课 内容概要: 1.JS正则 -登录注册验证 2.组件 1.BootStrap -css -js 学习BootStrap规则 2.jQueryUI -css ...

  7. CodeForces-749A

    要求组成n的素数最多,根据n的奇偶讨论:如果n是偶数,直接打印n/2个数字'2'就可以了:如果n是基数,则先打印一个'3',再打印(n-3)/2个数字'2'就可以了. AC代码: #include&l ...

  8. 在SpringBoot中使用FluentValidator验证插件

    前言 在我们编写项目的时候,在controller中往往离不开对一些数据的校验.这里并不是说对于这些数据业务上面的校验,而是对这些数据进行空校验或者是长度校验等. 有些时候校验可以省略,根据业务的需要 ...

  9. SIFT解析(二)特征点位置确定

    最近微博上有人发起投票那篇论文是自己最受益匪浅的论文,不少人说是lowe的这篇介绍SIFT的论文.确实,在图像特征识别领域,SIFT的出现是具有重大意义的,SIFT特征以其稳定的存在,较高的区分度推进 ...

  10. Shell 脚本实践

    1. 脚本判断命令输出是否为空 (1)判断字符串为空 if [ "$str" =  "" ]  if [ x"$str" = x ] if ...