在集成学习中,一般认为Bagging的主要做用是下降方差,而Boosting的主要做用是下降误差。Boosting能下降误差很好理解,由于其原理就是将多个弱学习器组合成强学习器。但Bagging为何能下降方差?或者说,为何将多个强学习器组合起来方差就会下降?这是本篇想要探讨的问题,而在这以前我认为有必要先搞清楚方差和误差的基本概念。html
首先来看方差的定义:设X为随机变量,则方差\(Var(X) = E[(X-E[X])^2]\),表示X与平均值\(E[X]\)之间差别的平方的指望值,用于刻画X取值的散布程度。算法
方差有两个重要的性质,后文会用到:app
c为常数,则 \[Var(cX) = E[(cX - E[cX])^2] = c^2E[(X-E[X])^2] = c^2Var(X) \qquad (1)\]机器学习
独立随机变量之和的方差等于各变量的方差之和:
\[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})\)视为随机变量,而其随机性来源于从同一个分布抽样获得的不一样数据集。spa
所以有了误差和方差的定义,咱们就能推导出模型的指望泛化偏差:\[\begin{equation} \begin{aligned} \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{aligned} \end{equation}\]
模型的指望泛化偏差由误差和方差组成。通常来讲,简单模型误差高,方差低;复杂模型方差高,误差低。以下图所示:
上图显示出模型复杂度对误差和方差的影响,左面三幅图是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的基本思想。
设单模型的指望为\(\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更低。
/