ML中Boosting和Bagging的比較
说到ML中Boosting和Bagging,他们属于的是ML中的集成学习,集成学习法(Ensemble Learning)
① 将多个分类方法聚集在一起。以提高分类的准确率。
(这些算法能够是不同的算法,也能够是同样的算法。)
② 集成学习法由训练数据构建一组基分类器,然后通过对每一个基分类器的预測进行投票来进行分类
③ 严格来说,集成学习并不算是一种分类器,而是一种分类器结合的方法。
④ 通常一个集成分类器的分类性能会好于单个分类器
⑤ 假设把单个分类器比作一个决策者的话,集成学习的方法就相当于多个决策者共同进行一项决策。
下图形象的表示了集成学习的思路
要掌握集成学习法,我们会提出下面两个问题:
1)怎么训练每一个算法?
2)怎么融合每一个算法?
因此,bagging方法和boosting方法应运而生
Bagging
① Bagging又叫自助聚集(BootstrapAggregating),是一种依据均匀概率分布从数据中反复抽样(有放回)的技术。
② 每一个抽样生成的自助样本集上,训练一个基分类器。对训练过的分类器进行投票。将測试样本指派到得票最高的类中。
③ 每一个自助样本集都和原数据一样大
④ 有放回抽样,一些样本可能在同一训练集中出现多次,一些可能被忽略。
图解如上所看到的
例子:
X 表示一维属性,Y 表示类标号(1或-1)測试条件:当x<=k时,y=?。当x>k时。y=?;k为最佳分裂点。
下表为属性x相应的唯一正确的y类别
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGd1bzEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
如今进行5轮随机抽样,结果例如以下
每一轮随机抽样后,都生成一个分类器 然后再将五轮分类融合
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGd1bzEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
对照符号和实际类,我们能够发现:在该例子中,Bagging使得准确率可达90%
由此,总结一下bagging方法:
① Bagging通过减少基分类器的方差。改善了泛化误差
② 其性能依赖于基分类器的稳定性。假设基分类器不稳定。bagging有助于减少训练数据的随机波动导致的误差。假设稳定。则集成分类器的误差主要由基分类器的偏倚引起
③ 由于每一个样本被选中的概率同样,因此bagging并不側重于训练数据集中的不论什么特定实例
Boosting
训练过程为阶梯状。基模型按次序一一进行训练(实现上能够做到并行),基模型的训练集依照某种策略每次都进行一定的转化。对全部基模型预測的结果进行线性综合产生终于的预測结果:
① boosting是一个迭代的过程,用于自适应地改变训练样本的分布,使得基分类器聚焦在那些非常难分的样本上
② boosting会给每一个训练样本赋予一个权值,并且能够再每轮提升过程结束时自己主动地调整权值。
開始时。全部的样本都赋予同样的权值1/N,从而使得它们被选作训练的可能性都一样。
依据训练样本的抽样分布来抽取样本,得到新的样本集。
然后,由该训练集归纳一个分类器,并用它对原数据集中的全部样本进行分类。每轮提升结束时,更新训练集样本的权值。添加被错误分类的样本的权值。减小被正确分类的样本的权值,这使得分类器在随后的迭代中关注那些非常难分类的样本。
Boosting和Bagging对照
- 模型
1)样本选择上
Bagging:训练集是在原始集中有放回选取的。从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,仅仅是训练集中每一个例子在分类器中的权重发生变化。而权值是依据上一轮的分类结果进行调整。
2)例子权重:
Bagging:使用均匀取样,每一个例子的权重相等
Boosting:依据错误率不断调整例子的权值,错误率越大则权重越大。
3)预測函数:
Bagging:全部预測函数的权重相等。
Boosting:每一个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算:
Bagging:各个预測函数能够并行生成
Boosting:各个预測函数仅仅能顺序生成,由于后一个模型參数须要前一轮模型的结果。
- 偏差和方差
对于bagging来说,每一个基模型的权重等于1/m且期望近似相等(子训练集都是从原训练集中进行子抽样),故我们能够进一步化简得到:
依据上式我们能够看到,总体模型的期望近似于基模型的期望。这也就意味着总体模型的偏差和基模型的偏差近似。
同一时候,总体模型的方差小于等于基模型的方差(当相关性为1时取等号)。随着基模型数(m)的增多,总体模型的方差减少。从而防止过拟合的能力增强,模型的精确度得到提高。
可是,模型的精确度一定会无限逼近于1吗?并不一定,当基模型数添加到一定程度时,方差公式第二项的改变对总体方差的作用非常小,防止过拟合的能力达到极限。这便是精确度的极限了。另外。在此我们还知道了为什么bagging中的基模型一定要为强模型。否则就会导致总体模型的偏差度低,即精确度低。
Random Forest是典型的基于bagging框架的模型,其在bagging的基础上,进一步减少了模型的方差。
Random Fores中基模型是树模型,在树的内部节点分裂过程中。不再是将全部特征,而是随机抽样一部分特征纳入分裂的候选项。
这样一来,基模型之间的相关性减少,从而在方差公式中,第一项显著减少。第二项略微添加,总体方差仍是减少。
对于boosting来说,基模型的训练集抽样是强相关的,那么模型的相关系数近似等于1,故我们也能够针对boosting化简公式为:
通过观察总体方差的表达式,我们easy发现,若基模型不是弱模型。其方差相对较大,这将导致总体模型的方差非常大,即无法达到防止过拟合的效果。
因此,boosting框架中的基模型必须为弱模型。
由于基模型为弱模型,导致了每一个基模型的精确度都不是非常高(由于其在训练集上的精确度不高)。随着基模型数的增多,总体模型的期望值添加,更接近真实值,因此。总体模型的精确度提高。
可是精确度一定会无限逼近于1吗?仍然并不一定,由于训练过程中精确度的提高的主要功臣是总体模型在训练集上的精确度提高,而随着训练的进行,总体模型的方差变大。导致防止过拟合的能力变弱,终于导致了精确度反而有所下降。
基于boosting框架的Gradient Tree Boosting模型中基模型也为树模型,同RandomForrest,我们也能够对特征进行随机抽样来使基模型间的相关性减少,从而达到减少方差的效果。
- 其他
Bagging对样本重採样。对每一重採样得到的子样本集训练一个模型,最后取平均。由于子样本集的类似性以及使用的是同种模型。因此各模型有近似相等的bias和variance(其实,各模型的分布也近似同样。但不独立)。bagging后的bias和单个子模型的接近。一般来说不能显著减少bias。还有一方面,若各子模型独立,此时能够显著减少variance。若各子模型全然同样。则
,此时不会减少variance。bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此能够一定程度减少variance。为了进一步减少variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步减少。(用公式能够一目了然:设有i.d.的n个随机变量,方差记为 。两两变量之间的相关性为 ,则 的方差为 ,bagging减少的是第二项,random forest是同一时候减少两项。详见ESL p588公式15.1)。
boosting从优化角度来看。是用forward-stagewise这样的贪心法去最小化损失函数 ,比如。常见的AdaBoost即等价于用这样的方法最小化exponential loss: 。
所谓forward-stagewise。就是在迭代的第n步。求解新的子模型f(x)及步长a(或者叫组合系数),来最小化 ,这里 是前n-1步得到的子模型的和。因此boosting是在sequential地最小化损失函数。其bias自然逐步下降。但由于是採取这样的sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著减少variance。所以说boosting主要还是靠减少bias来提升预測精度。
结论:bagging主要是减少variance。而boosting主要是减少bias来提升精度
參考:[1] https://www.zhihu.com/question/26760839
[2] http://blog.csdn.net/hguo11/article/details/70495671
[3] http://blog.csdn.net/lihaitao000/article/details/52058486
[4] http://m.blog.csdn.net/article/details?id=49765673
ML中Boosting和Bagging的比較的更多相关文章
- 集成学习算法汇总----Boosting和Bagging(推荐AAA)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 集成学习算法总结----Boosting和Bagging(转)
1.集成学习概述 1.1 集成学习概述 集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高.目前接触较多的集成学习主要有2种:基于Boosting的和基于B ...
- 【机器学习】Boosting和Bagging的差别
boosting和bagging的差别: bagging中的模型是强模型,偏差低,方差高.目标是降低方差.在bagging中,每个模型的bias和variance近似相同,但是互相相关性不太高,因此一 ...
- 集成学习方法Boosting和Bagging
集成学习是通过构架并结合多个学习器来处理学习任务的一种思想, 目前主要分为两大类:Boosting和Bagging. 对于任意一种集成方法, 我们都希望学习出来的基分类器具有较高的准确性和多样性, 基 ...
- Java中字符串相等与大小比較
在C++中,两个字符串比較的代码能够为: (string1==string2) 但在java中,这个代码即使在两个字符串全然同样的情况下也会返回false Java中必须使用string1.equal ...
- Java中接口和抽象类的比較
Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计 ...
- **ML : ML中的最优化方法
前言: 在机器学习方法中,若模型理解为决策模型,有些模型可以使用解析方法.不过更一般的对模型的求解使用优化的方法,更多的数据可以得到更多的精度. AI中基于归纳的方法延 ...
- boosting和bagging
首先来说明一下bootstraps:可以把它认为是一种有放回的抽样方法. bagging:boostraps aggregating(汇总) boosting:Adaboot (Adaptive Bo ...
- 集成学习—boosting和bagging
集成~bagging~权值~组合~抽样~样例~基本~并行 一.简介 集成学习通过构建并结合多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能 根据个体学习器的生成方式,目前的集成学习方法 ...
随机推荐
- Android关于JSON数据解析
一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...
- 【POI】解析xls报错:java.util.zip.ZipException: error in opening zip file
今天使用POI解析XLS,报错如下: Servlet.service() for servlet [rest] in context with path [/cetBrand] threw excep ...
- appium+python自动化45-夜神模拟器连不上(adb server version (36) doesn't match this client (39); killing...)
前言 最新下了个最新版的夜神模拟器,然后adb devices发现连不上模拟器了,报adb server version (36) doesn't match this client (39); ki ...
- iOS 在某一个ViewController跳转到TabViewController中的某一个ViewController
要做到这个分为两步 第一步, 导入app #import "AppDelegate.h" 第二步, 监听方法中先写加入以下代码: [self dismissViewControll ...
- Android内存优化14 内存泄漏常见情况5 特殊对象造成的内存泄漏 WebView内存泄漏
WebView造成内存泄露 关于WebView的内存泄露,因为WebView在加载网页后会长期占用内存而不能被释放,因此我们在Activity销毁后要调用它的destory()方法来销毁它以释放内存. ...
- java中copy 一个list集合的方法
java将一个list里的数据转移到另外一个list,可以使用for语句,一次使用add方法,示例如下: ArrayList list1=new ArrayList(); list1.add(&quo ...
- OpenCV图像金字塔
图像金字塔 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 pyrUp 和 pyrDown 对图像进行向上和向下采样. 原理 Note 以下内容来自于Bradski和Kaehler的大作: ...
- 【Todo】phantomjs获取动态网页
上面一篇文章,使用了cheerio, http, request等库,来抓取了Lofter上面的美女图片. 但是很多网页是动态渲染的.据了解,Phantom.js 可以获取动态渲染的网页 http:/ ...
- XmlRpc with C#/Java【转】
最近看了几个项目都是用xmlrpc协作完成的,就做了几个测试客户端和服务器端和大家一起分享.希望能对入门的同学有帮助 关于xmlrpc的介绍和规范参考http://www.xml-rpc.net/ 下 ...
- TensorFlow------读取二进制文件实例
TensorFlow------读取二进制文件实例: class CifarRead(object): ''' 完成读取二进制文件,写进tfrecords,读取tfrecords :param obj ...