理解 Bias 与 Variance 之间的权衡
有监督学习中,预测误差的来源主要有两部分,分别为 bias 与 variance,模型的性能取决于 bias 与 variance 的 tradeoff ,理解 bias 与 variance 有助于我们诊断模型的错误,避免 over-fitting 或者 under-fitting.
在统计与机器学习领域权衡 Bias 与 Variance 是一项重要的任务,因为他可以使得用有限训练数据训练得到的模型更好的范化到更多的数据集上,监督学习中的误差来源主要为 Bias 与 Variance,接下来来看误差来源的推导。
我们知道,同样的算法在不同的数据集上得到的模型结果很可能不同,尽管数据集来自于同一个分部。对于观测数据 $X$ 以及待预测的变量 $Y$ ,假设两者服从 $Y = f(X) + \varepsilon$ ,$\varepsilon$ 为噪声,其服从的$N(0,\delta_{\varepsilon }^2)$ ,预测任务中需要得到 $Y$ 值,首先在数据集 $D$ 上通过算法学习一个近似 $f(X)$ 的模型 $\hat{f}(X)$ 来预测得到 $X$ 的输出。给定 $X$ 一个观测值 $x$ ,待预测变量 $y = f(x) +\varepsilon$ 。
- 对于样本数量相同的不同训练集模型 $\hat{f}(x)$ 的期望输出为: $E\hat{f}(x)$
- 对于样本数量相同的不同训练集模型产生的方差为:$E[\hat{f}(x) - E\hat{f}(x)]^2$
将模型的误差分解,采用均方损失,模型 $\hat{f}(X)$ 在点 $x$ 的整体预测误差为真实值与模型预测值之间的误差:\[Err(x) = E[(y - \hat{f}(x))^2]\] 这个式子其实等价于:
\[Err(x) = [E \hat{f}(x) –f(x)]^2 +E[\hat{f}(x) - E\hat{f}(x)]^2 + \delta_{\varepsilon }^2\]
——————————————————————————————————————————————————————————————
这里为推倒过程,先回忆几个公式 :$Var[X] = E[X^2]-E^2[X]$ , 且由于函数 $f(X)$ 是确定的,所以 $E[f(x)] = f(x)$,且有 $\varepsilon \sim N(0,\delta_{\varepsilon }^2)$ ,再结合 $y = f(x) + \varepsilon$ 可以得到:
\[E[y] = E[f(x) + \varepsilon] = E[f(x)]+0 =E[f(x)] \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \tag{1} \]
\[Var[y] = E[(y-E[y])^2] = E[(f(x) + \varepsilon –f(x))^2] = E[\varepsilon^2] = \delta_{\varepsilon }^2 \tag{2}\]
\begin{aligned}
Err(x) &= E[(y - \hat{f}(x))^2] \\
&= E[y^2 - 2y \hat{f}(x) + \hat{f}^2(x)] \\
&= E[y^2] - E[2y \hat{f}(x)] + E[\hat{f}^2(x)] \\
&= E[y^2] \mathbf{- E^2[y] +E^2[y]} - 2E[y]E[\hat{f}(x)] + E[\hat{f}^2(x)] \mathbf{ -E^2[\hat{f}(x)]+ E^2[\hat{f}(x)]} \\
& \ \ \ \ \ \ \mathbf{Combined \ with\ the\ above\ equations \ (1) \ (2).} \\
&= \color{Blue} {E^2[\hat{f}(x)] - 2f(x)E[\hat{f}(x)] +f^2(x)} +\color{Green} {E[\hat{f}^2(x)] -E^2[\hat{f}(x)]} + \color{Red} {E[y^2] - E^2[y]} \\
& \ \ \ \ \ \ \mathbf{The \ last\ two \ terms \ based \ on }: Var[X] = E[X^2] -E^2[X] \\
&= [E[\hat{f}(x)]-f(x)]^2+E[(\hat{f}(x)-E\hat{f}(x))^2]+Var[y] \\
&= E^2[\hat{f}(x)] +Var[\hat{f}(x)] +\delta_{\varepsilon}^2 \\
\end{aligned}
——————————————————————————————————————————————————————————————
$E \hat{f}(x) –f(x)$ 即为 Bias ,$E[\hat{f}(x) - E\hat{f}(x)]^2$ 为 Variance , $\delta_{\varepsilon}^2$ 即为模型无法避免的 Noise ,也可称为 Irreducible Error ,所以现在对于一个预测模型的误差可以 分为如下几部分:
\[Error = Bias^2 +Variance + Noise \]
对于预测模型问题,如果我们能够获得所有可能的数据集合,并在这个数据集合上将 Error 最小化,这样学习到的模型就可以称之为“真实模型”,当然,我们是无论如何都不能获得并训练所有可能的数据的,所以“真实模型”肯定存在,但无法获得,我们的最终目标就是去学习一个模型使其更加接近这个真实模型。为了在有限的训练数据集上达到这个目标,就要使 Error 最小了,Error 分为 Bias 、 Variance 与 Noise :
- Bias:度量了学习算法的期望输出与真实结果的偏离程度, 刻画了算法的拟合能力,Bias 偏高表示预测函数与真实结果差异很大。
- Variance:则代表“同样大小的不同的训练数据集训练出的模型”与“这些模型的期望输出值”之间的差异。训练集变化导致性能变化, Variance 偏高表示模型很不稳定。
- Noise:刻画了当前任务任何算法所能达到的期望泛化误差的下界,即刻画了问题本身的难度。
由于 Bias 是无法避免的 所以要得到好的模型,就需要低 Bias 与低 Variance 下图给出一个 Bias 与 Variance 的示意图,明显可以看到低 Bias 与低 Variance 次次会命中靶心,而低 Bias 高 Variance 取均值后才会大多命中靶心,其他情况全打歪了。

低 Bias 与低 Variance 才会得到低 Error,但低 Bias 与低 Variance 往往是不能兼得的。如果要降低模型的 Bias,就一定程度上会提高模型的 Variance,反之亦然。这里以 K-NN 为例,看一些 K-NN 中 Bias 与 Variance 与其参数 K 的关系,在 K-NN 中,误差形式如下:
\[Err(x)=\underbrace{\left [f(x)-\frac{1}{k}\sum_{i=1}^kf(x_i) \right ]^2}_{\mathbf{Bias^2}} + \underbrace{ \frac{\delta^2}{k} }_{\mathbf{Var}}+ \underbrace{\delta^2}_{\mathbf{Noise}}\]
这里 $x_1,x_2,…x_k$ 是 $x$ 在训练数据集中最近的 $k$ 个邻居 ,当 $K$ 取值很小时,$\frac{1}{k}\sum_{i=1}^kf(x_i)$ 与 $f(x)$ 十分接近,所以 Bias 很低,但第二项 Variance 很大,随着 $K$ 的增大,Bias 明显会增大,但 Variance 会减小,这便是 Bias 与 Variance 之间的一个很微妙的关系。 为什么这样呢?
因为预测模型试图用有限的训练样本上去得到一个用来预测全数据集的模型,为了降低模型的误差率,就要尽量使模型在训练数据集上更加“准确”,这样做往往会增加 Model Complexity ,但却忽略模型在全数据集的泛化能力,模型在训练数据集的Bias 减少了,但是对于训练数据集中没有出现的数据,模型对其预测就会很不稳定,这样就会造成高 Variance ,这也就是常说的 over-fitting ,为了避免 over-fitting,就不能完全依赖于有限的训练数据,这时可以加入一些先验信息,先验信息在模型求解的过程中会增加一些限制,提高模型的稳定程度,同时减少 Model Complexity,进而可以降低 Variance,但是由于“不信任”训练数据,会使模型的 Bias 增大,或者训练不足时,模型拟合能力不够,训练数据的扰动不足以使模型拟合其真实情况,这时候 Bias 太大,模型对训练数据的预测能力就会下降,这便是 under-fitting 了,所以需要要 Bias 与 Variance 之间 寻找一个 tradeoff。
因为 Noise 是不可避免的,这里忽略 Noise ,根据 Bias 、Variance 与 Model Complexity 之间的关系,可以得到下图左所示的图形,该图表示在训练数据上几个量之间的关系,为了找到最优的模型,
在训练集中 Bias 下降与 Variance 上升的过程中来找到所谓的 tradeoff ,这时的 Model Complexity 是适中的,找到了这个 tradeoff ,在全数据集或者预测集上的预测集上的表现如下图右所示,所以 Bias 与 Variance 需要适中,才会得到在训练集与测试集误差都小的模型。

最后谈一下 K-fold Cross Validation 与权衡 Bais-Variance 之间的关系。这个理解其实很简单,先看对于数据的划分“
每次留出一个 fold 用来做“验证集”来计算误差,当 K 设置很大时,每个 fold 都会有很少的数据,小数据集更容易有噪音,所以小的数据集会有大的 Bias ,同时 K 个 fold 代表 K 组数据分别训练一个模型,求平均后 Variance 会很小;相反如果 K 很大,每个 fold 数据相对来说还是很多的,所以 Bias 相对较小,但是由于总模型数较小,所以 Variance 还是比较大的。
参考:
http://scott.fortmann-roe.com/docs/BiasVariance.html#fn:1
http://www.zhihu.com/question/27068705/answer/35151681
https://en.m.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff#K-nearest_neighbors
理解 Bias 与 Variance 之间的权衡的更多相关文章
- [转]理解 Bias 与 Variance 之间的权衡----------bias variance tradeoff
有监督学习中,预测误差的来源主要有两部分,分别为 bias 与 variance,模型的性能取决于 bias 与 variance 的 tradeoff ,理解 bias 与 variance 有助于 ...
- bias、variance与拟合之间的关系
Error = Bias^2 + Variance+Noise 误差的原因: 1.Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,即算法本身的拟合能力. 2.Variance ...
- week6:Diagnosing Bias vs. Variance难点记录
1.Bias vs. Variance是什么概念? 图形上的理解:https://www.zhihu.com/question/27068705 http://blog.csdn.n ...
- 算法岗面试题:模型的bias和variance是什么?用随机森林举例
校招在即,准备准备一些面试可能会用到的东西吧.希望这次面试不会被挂. 基本概念 说到机器学习模型的误差,主要就是bias和variance. Bias:如果一个模型的训练错误大,然后验证错误和训练错误 ...
- Bias and Variance 偏置和方差
偏置和方差 参考资料:http://scott.fortmann-roe.com/docs/BiasVariance.html http://www.cnblogs.com/kemaswill/ Bi ...
- 机器学习中学习曲线的 bias vs variance 以及 数据量m
关于偏差.方差以及学习曲线为代表的诊断法: 在评估假设函数时,我们习惯将整个样本按照6:2:2的比例分割:60%训练集training set.20%交叉验证集cross validation set ...
- Bias and Variance
以下内容参考 cousera 吴恩达 机器学习课程 1. Bias 和 Variance 的定义 Bias and Variance 对于改进算法具有很大的帮助作用,在bias和Variance的指引 ...
- 机器学习模型 bias 和 variance 的直观判断
假设我们已经训练得到 一个模型,那么我们怎么直观判断这个 模型的 bias 和 variance? 直观方法: 如果模型的 训练错误 比较大,并且 验证错误 和 训练错误 差不多一样,都比较大,我们就 ...
- 深入理解 sudo 与 su 之间的区别【转】
深入理解 sudo 与 su 之间的区别 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升 ...
随机推荐
- Javascript 正则表达式笔记
\d 元字符 + 量词 \w 常用的字符a-zA-Z0-9 .除回车之外的字符 ?0-1个字符 量词 只有前面是元字符,才变现量词 * 0-n 量词 /^\d+$/ 以字符开头,义字符结尾 [0-9] ...
- IDA 与VC 加载符号表
将Windbg路径下的symsrv.yes 拷贝到ida 的安装目录,重新分析ntoskrnl.exe, 加载本地的符号表 添加环境变量 变量名:_NT_SYMBOL_PATH变量值:SRV*{$P ...
- SpringMVC学习总结(七)——SpringMVC注解@..详解
<context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有: @Controller 声明Action组件@Service 声明Service组件 ...
- 教你使用UIWindow实现窗口的切换
这两天写了一个手势解锁,该死的需求要求这个手势解锁页面各种出现,毕竟人家这个客户端酒20多个领导用用的,怕泄密就加了各种保密措施.先来看下需求:1.用户注册登录后跳转设置手势页面(必须设置).2.ap ...
- Hadoop namenode无法启动问题解决
原因:在root账户(非hadoop账户)下操作hadoop会导致很大的问题 首先运行bin/start-all.sh发现namenode没有启动 只有它们 9428 DataNode 9712 Jo ...
- USACO Section 3.1: Stamps
这题一开始用了dfs(注释部分),结果TLE,后来想了DP方法,f[i] = f[j] + f[i-j], j = 1, 2... i/2, 还是TLE,网上搜了别人的代码,发现自己的状态方程有问题, ...
- 从SDE库文件手工删除SDE图层(转载)
转载自:http://gis-conquer.blog.sohu.com/164467560.html 一.前言 虽然Catalog能解决这种问题,但是在特殊情况下也许这种方法有点用途. ...
- TCP连接探测中的Keepalive 和心跳包
采用TCP连接的C/S模式软件,连接的双方在连接空闲状态时,如果任意一方意外崩溃.当机.网线断开或路由器故障,另一方无法得知TCP连接已经失效,除非继续在此连接上发送数据导致错误返回.很多时候,这不是 ...
- testNG参数传递方式
testNG传参数的两种方式(xml文件,@DataProvider) 使用testng.xml设置参数 参数在xml文件中可以在suite级别定义,也可以在test级别定义:testNG会尝试先在包 ...
- Python 优雅的操作字典【转】
Python 中的字典是Python中一个键值映射的数据结构,下面介绍一下如何优雅的操作字典. 1.1 创建字典 Python有两种方法可以创建字典,第一种是使用花括号,另一种是使用内建 函数dict ...