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~权值~组合~抽样~样例~基本~并行 一.简介 集成学习通过构建并结合多个学习器来完成学习任务,常可获得比单一学习器显著优越的泛化性能 根据个体学习器的生成方式,目前的集成学习方法 ...
随机推荐
- countdownlatch用法
public void await() throws InterruptedException { }; //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 publ ...
- vector relation
::std::vector<> 的存储管理 以下成员函数用于存储管理: void reserve( size_t n ); size_t capacity() const; void re ...
- Android 常见内存泄漏的解决方式
在Android程序开发中.当一个对象已经不须要再使用了,本该被回收时.而另外一个正在使用的对象持有它的引用从而导致它不能被回收.这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了. ...
- in_array() 和array_search的区别
在判断字符串是否在某个数组里面的时候,我们会经常用到in_array()和array_search这两个函数. 他们的用法都是在数组中搜索给定的值,但是不同的是, in_array()给定的值 val ...
- Solidworks如何添加齿轮
打开ToolBox,找到GB,动力传动,齿轮,正齿轮,然后拖放到绘图窗口(切记要在装配图里面弄,不是在单个零件里面弄) 设置齿轮的参数,一般只需要设置模数,齿数,面宽,类型,总长度(面宽就是有齿轮 ...
- UML类图介绍(转载)
UML类图详细介绍 类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理 ...
- Win8 Metro中文件读写删除与复制操作
Win8Metro中,我们不能在向以前那样调用WIN32的API函数来进行文件操作,因此,下面就来介绍一下Win8 Metro中文件的读写操作. 1 Windows 8 Metro Style App ...
- Android File类 根据官方文档理解
File有四个构造函数 public File(File dir,String name) 参数为File和String,File制定构造的新的File对象的路径 ...
- es6常用数组操作及技巧汇总
定义数组 const array = [1, 2, 3]; // 或者 const array = new Array(); array[0] = '1'; 检测数组 Array.isArray([] ...
- js math 对数和指数处理 expm1 log1p
1.Math.expm1() Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1. Math.expm1(-1) // -0.6321205588285577 Math.e ...