Adaboost的意义
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的意义的更多相关文章
- 关于Adaboost——样本抽样的权值的实际意义
看这篇文章的前提:已经看了PRML中的Adaboost的算法流程 看懂下面的内容必须牢牢记住:Adaboost使用的误差函数是指数误差 文章主要目的:理解样本抽样的权值是为什么那样变化的. 得出的结论 ...
- scikit-learn Adaboost类库使用小结
在集成学习之Adaboost算法原理小结中,我们对Adaboost的算法原理做了一个总结.这里我们就从实用的角度对scikit-learn中Adaboost类库的使用做一个小结,重点对调参的注意事项做 ...
- PRML读书会第十四章 Combining Models(committees,Boosting,AdaBoost,决策树,条件混合模型)
主讲人 网神 (新浪微博: @豆角茄子麻酱凉面) 网神(66707180) 18:57:18 大家好,今天我们讲一下第14章combining models,这一章是联合模型,通过将多个模型以某种形式 ...
- 基于MATLAB的adaboost级联形式的人脸检测实现
很早之前就做过一些关于人脸检测和目标检测的课题,一直都没有好好总结出来,趁着这个机会,写个总结,希望所写的内容能给研究同类问题的博友一些见解和启发!!博客里面涉及的公式太繁琐了,直接截图了. 转载请注 ...
- 基于单决策树的AdaBoost
①起源:Boosting算法 Boosting算法的目的是每次基于全部数据集,通过使用同一种分类器不同的抽取参数方法(如决策树,每次都可以抽取不同的特征维度来剖分数据集) 训练一些不同弱分类器(单次分 ...
- 几种Boost算法的比较(Discrete AdaBoost, Real AdaBoost, LogitBoost, Gentle Adaboost)
关于boost算法 boost算法是基于PAC学习理论(probably approximately correct)而建立的一套集成学习算法(ensemble learning).其根本思想在于通过 ...
- adaboost算法
三 Adaboost 算法 AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(很多博客里说的三个臭皮匠 ...
- 机器学习技法-AdaBoost元算法
课程地址:https://class.coursera.org/ntumltwo-002/lecture 重要!重要!重要~ 一.Adaptive Boosting 的动机 通过组合多个弱分类器(hy ...
- aggregation(2):adaptive Boosting (AdaBoost)
给你这些水果图片,告诉你哪些是苹果.那么现在,让你总结一下哪些是苹果? 1)苹果都是圆的.我们发现,有些苹果不是圆的.有些水果是圆的但不是苹果, 2)其中到这些违反"苹果都是圆的" ...
随机推荐
- 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135)
Linux 中有 cron 程序定时执行任务,Kubernetes 的 CronJob 提供了类似的功能,可以定时执行 Job.CronJob 配置文件示例如下: ① batch/v2alpha1 是 ...
- QWebSocket 客户端
QWebSocket 客户端 Public Function - QWebSocket(const QString &origin = QString(),QWebSocketProtocol ...
- handler机制面试
handler面试必问 解析: Android提供了Handler和Looper来满足线程间的通信. Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(Message E ...
- chmod 与大写 X
chmod(1) 手册页中对权限位的描述中提及到 rwxXst 六个权限标记, rwx 是几乎所有 Linux 初学者都会学到的,更进者会了解到 st 两个标记,但 X 却少有提起.所以笔者大致了解了 ...
- linux 运维 nginx服务器
nginx(web服务器) nginx是一个高性能的http和反向代理服务器,同时也是一个imap/pop3/smtp 代理服务器比apache简单官网:http://nginx.org nginx配 ...
- 3.1 PCI设备BAR空间的初始化
在PCI Agent设备进行数据传送之前,系统软件需要初始化PCI Agent设备的BAR0~5寄存器和PCI桥的Base.Limit寄存器.系统软件使用DFS算法对PCI总线进行遍历时,完成这些寄存 ...
- R︱foreach+doParallel并行+联用迭代器优化内存+并行机器学习算法
要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 接着之前写的并行算法paralle ...
- GM8180启动过程调试
1. burnin下的boot.s 0: boot start 1 ; 1: Init SMC configuration OK ; 2: Ini ...
- SystemVerilog语言简介(三)
15. 强制类型转换 Verilog不能将一个值强制转换成不同的数据类型.SystemVerilog通过使用'操作符提供了数据类型的强制转换功能.这种强制转换可以转换成任意类型,包括用户定义的类型.例 ...
- JUnit4测试出错(一)
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUn ...