在集成学习中,通常认为Bagging的主要作用是降低方差,而Boosting的主要作用是降低偏差。Boosting能降低偏差很好理解,因为其原理就是将多个弱学习器组合成强学习器。但Bagging为什么能降低方差?或者说,为什么将多个强学习器组合起来方差就会降低?这是本篇想要探讨的问题,而在这之前我认为有必要先搞清楚方差和偏差的基本概念。

方差

首先来看方差的定义:设X为随机变量,则方差\(Var(X) = E[(X-E[X])^2]\),表示X与平均值\(E[X]\)之间差异的平方的期望值,用于刻画X取值的散布程度。

方差有两个重要的性质,后文会用到:

  1. c为常数,则 \[Var(cX) = E[(cX - E[cX])^2] = c^2E[(X-E[X])^2] = c^2Var(X) \qquad (1)\]

  2. 独立随机变量之和的方差等于各变量的方差之和:

    ​ \[Var(X_1 + \cdots + X_n) = Var(X_1) + \cdots +Var(X_n) \qquad (2)\]

模型的偏差和方差

通常对于一个模型而言,比起其在训练集的表现,通常我们更关心其在测试集上的表现,或者说希望了解其泛化性能。偏差-方差分解 (bias-variance decomposition)就是其中的一种重要工具。下图形象地展示了偏差与方差的区别:

要理解模型的偏差和方差,首先需要做一个假设 (PRML中称之为“思维实验(thought experiment)")。假设我们有很多个数据集,每个数据集中的样本都是从总体分布\(\mathcal{P}\)中抽样而得。对于其中一个特定的数据集\(\mathcal{D}\),在此数据集上学习算法得到的单模型为\(f(\textbf{x};\mathcal{D})\)。可以看到对于不同的数据集\(\mathcal{D}\),学习到的模型都是不一样的,因此一个学习算法的期望预测为\(\bar{f}(\textbf{x}) = \mathbb{E}_{\mathcal{D}}[f(\textbf{x};\mathcal{D})]\),该值表示对于一个特定的样本\(\textbf{x}\),不同单模型的平均预测值。

偏差 (bias) 定义为:\(bias = \bar{f}(\textbf{x}) - y\),为模型的期望预测与真实值之间的差异。

方差 (variance) 定义为:\(variance = \mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D})-\bar{f}(\textbf{x}))^2]\),衡量模型对不同数据集\(\mathcal{D}\)的敏感程度,也可以认为是衡量模型的不稳定性。若方差大,则表示数据的微小变动就能导致学习出的模型产生较大差异。可能的情形是在训练集上拟合的很好,到了测试集上由于数据的改变致使准确率下降很多,这是典型的过拟合。

而对比上文中方差的公式 (\(Var(X) = E[(X-E[X])^2]\)),这里实际上是将\(f(\textbf{x})\)视为随机变量,而其随机性来源于从同一个分布抽样得到的不同数据集。

因此有了偏差和方差的定义,我们就能推导出模型的期望泛化误差:\[\begin{align} \mathbb{E}_\mathcal{D}[E_{out}(f;\mathcal{D})] & = \mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D})-y)^2] \\ & =\mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D}) - \bar{f}(\textbf{x}) + \bar{f}(\textbf{x}) - y)^2] \\& = \mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D}) - \bar{f}(\textbf{x}))^2] + \mathbb{E}_\mathcal{D}[(\bar{f}(\textbf{x}) - y)^2] + \mathbb{E}_\mathcal{D}[2(f(\textbf{x};\mathcal{D}) - \bar{f}(\textbf{x}))(\bar{f}(\textbf{x}) - y)] \\&\\& 由于\mathbb{E}_\mathcal{D}[f(\textbf{x};\mathcal{D})] = \bar{f}(\textbf{x}),最后一项消去 \\& \\& = \underbrace{\mathbb{E}_\mathcal{D}[(\bar{f}(\textbf{x}) - y)^2]}_{(bias)^2} + \underbrace{\mathbb{E}_\mathcal{D}[(f(\textbf{x};\mathcal{D} - \bar{f}(\textbf{x}))^2]}_{variance} \end{align}\]

模型的期望泛化误差由偏差和方差组成。一般来说,简单模型偏差高,方差低;复杂模型方差高,偏差低。如下图所示:

上图显示出模型复杂度对偏差和方差的影响,左面三幅图是100个数据集生成的100个模型,从上至下的单模型复杂度提升;右面三幅图中红线代表左图中各个单模型的平均,绿线表示真实函数。从左面三幅图可以看到模型越复杂方差也会越大,然而将模型平均后会比较接近真实函数,这说明复杂模型偏差小,而简单模型的情况则正好相反。

可以看到,一开始我们说偏差-方差分解的理论是一个“思维实验”,是因为其是带有幻想性质的。现实中我们不会有很多个数据集,而往往只有一个数据集,如果选用的算法比较复杂,即方差大,则更可能的情况是用我们手上的数据集拟合而成的模型恰好是离真实函数较远,这就产生了过拟合,而这种情况实际上经常发生。所以为什么要降低方差?一句话解释:方差大会导致过拟合,进而致使模型泛化性能降低。

通常降低方差的方法之一是将多个模型平均起来。假设有n个独立同分布的模型,每个模型的方差均为\(\sigma^2\),则利用上文中方差的性质 (1) 和 (2) 可得:

​ \[Var(\frac{1}{n}\sum\limits_{i=1}^n X_i) = \frac{1}{n^2}Var(\sum\limits_{i=1}^nX_i) = \frac{\sigma^2}{n} \qquad (3)\]

这样模型均值的方差仅为单模型方差的\(\frac1n\)。然而在只有一个数据集的情况下只能训练出一个模型,也就没法求平均。所以为了缓解这个问题,可以采用有放回抽样来模拟生成多个数据集,将每个数据集训练得到的模型平均来降低方差,即是Bagging的基本思想。

Bagging

设单模型的期望为\(\mu\),则Bagging的期望预测为

​ \[E(\frac{1}{n}\sum\limits_{i=1}^n X_i) = \frac1nE(\sum\limits_{i=1}^n X_i) = E(X_i) \approx \mu\]

说明Bagging整体模型的期望近似于单模型的期望,这意味整体模型的偏差也与单模型的偏差近似,所以Bagging通常选用偏差低的强学习器。

Bagging的抽样是有放回抽样,这样数据集之间会有重复的样本,因而违反了公式 (3) 中的独立性假设。在这种情况下设单模型之间具有相关系数 \(0<\rho<1\),则模型均值的方差为:\[Var(\frac{1}{n}\sum\limits_{i=1}^n X_i) = \frac{\sigma^2}{n} + \frac{n-1}{n}\rho\sigma^2\]

上式中随着n增大,第一项趋于0,第二项趋于\(\rho\sigma^2\),所以Bagging能够降低整体方差。而Bagging的拓展算法 —— 随机森林,则通过在树内部结点的分裂过程中,随机选取固定数量的特征纳入分裂的候选项,这样就进一步降低了单模型之间的相关性,总体模型的方差也比Bagging更低。


Reference :

  1. Christopher M. Bishop. Pattern Recognition and Machine Learning
  2. Yaser S. Abu-Mostafa, etc. Learning From Data
  3. 周志华.《机器学习》
  4. 陈希孺.《概率论与数理统计》
  5. http://scott.fortmann-roe.com/docs/BiasVariance.html

/

Bagging与方差的更多相关文章

  1. 模型融合---为什么说bagging是减少variance,而boosting是减少bias?

    1.bagging减少variance Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均.由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和var ...

  2. [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林

    [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...

  3. 机器学习算法总结(三)——集成学习(Adaboost、RandomForest)

    1.集成学习概述 集成学习算法可以说是现在最火爆的机器学习算法,参加过Kaggle比赛的同学应该都领略过集成算法的强大.集成算法本身不是一个单独的机器学习算法,而是通过将基于其他的机器学习算法构建多个 ...

  4. 集成学习之Boosting —— Gradient Boosting原理

    集成学习之Boosting -- AdaBoost原理 集成学习之Boosting -- AdaBoost实现 集成学习之Boosting -- Gradient Boosting原理 集成学习之Bo ...

  5. Bagging与随机森林算法原理小结

    在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...

  6. 转载:bootstrap, boosting, bagging 几种方法的联系

    转:http://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, ja ...

  7. bootstrap, boosting, bagging 几种方法的联系

    http://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, jack ...

  8. Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的区别

    引自http://blog.csdn.net/xianlingmao/article/details/7712217 Jackknife,Bootstraping, bagging, boosting ...

  9. 以Random Forests和AdaBoost为例介绍下bagging和boosting方法

    我们学过决策树.朴素贝叶斯.SVM.K近邻等分类器算法,他们各有优缺点:自然的,我们可以将这些分类器组合起来成为一个性能更好的分类器,这种组合结果被称为 集成方法 (ensemble method)或 ...

随机推荐

  1. 敏捷测试(3)--基于story的敏捷基础知识

    基于story的敏捷基础知识----story编写 为什么使用Story? 软件行业40年多来,需求分析技术已经很成熟了,但是MRD驱动的过程不堪重负.因为往往MRD编写会占去很多时间,MRD评审又会 ...

  2. SpringMVC提供两种校验机制

    本文不讲如何使用SpringMVC提供的两种校验机制,只是简单的说明一下其中的差别而已: 1.创建一个Bean,在Bean的属性中添加校验信息,通过配置LocalValidatorFactoryBea ...

  3. Warning: $HADOOP_HOME is deprecated解决方法

    启动Hadoop时报了一个警告信息,我的系统是CentOS,安装的Hadoop版本是hadoop1.2.1,具体警告信息如下: [root@m1 hadoop-1.2.1]# bin/start-al ...

  4. android studio添加project libs库步骤

    在Eclipse中选择要导出的项目,然后依次选择菜单 file->export->Android->Generate Gradle build files. 之后依次点击next到f ...

  5. BASE64Decoder小解

    BASE64Decoder小解 Base64 是网络上最常见的用于传输8Bit 字节代码的编码方式之一,大家可以查看RFC2045 -RFC2049 ,上面有MIME 的详细规范. Base64 要求 ...

  6. 蘑菇街Android组件与插件化

    插件化的基石 -- apk动态加载 随着我街业务的蓬勃发展,产品和运营随时上新功能新活动的需求越来越强烈,经常可以听到"有个功能我想周x上,行不行".行么?当然是不行啦,上新功能得 ...

  7. 校招:Vobile阜博通2015校园招聘

    关于Vobile阜博通校招(10-11月份),耗时将近一个月,现整理分享给大家. 1 浙大笔试无选择填空,问答题为主,偏语言的个人理解,不在意具体语言方向(C/C++/Java).(1)描述C.C++ ...

  8. Leetcode_237_Delete Node in a Linked List

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/47334649 Write a function to de ...

  9. Lease问题

    经过查明原来是lease引发的问题.不过查问题的过程让我们耽误了很多修复故障的时间,很是不爽. 起因:datanode和regionserver以及master同时挂掉 现象:datanode重启后, ...

  10. 前端iFrame跨域问题

    一.父域访问子域的元素 项目需求: iFrame是个聊天窗口,要求聊天窗口中点击图片图标,在父域将内容展示出来. 解决方法:(jQuery) 首先/要等iFrame加载完再执行函数!(代码如下) va ...