训练机器学习模型时,我们希望得到一个泛化性能优异的模型。在上一篇博客回归模型中,当我们采用多项式回归,并不断增加多项式的次数时,模型越来越复杂,但是在测试集上的误差并没有逐步降低。

这表明一个复杂的模型并不总是能在测试集上表现出更好的性能,那么误差来自哪里呢?

泛化误差(error)

我们知道,算法在不同训练集上学得的结果很可能不同,即便这些训练集是来自于同一个分布。以回归任务为例,对测试样本 x x x,令 y D y_D yD​为 x x x在数据集上的标记, y y y为 x x x的真实标记,由于噪声的存在,有可能 y D ≠ y y_D\neq y yD​​=y, f ( x ; D ) f(x;D) f(x;D)为在训练集 D D D上学得函数 f f f对 x x x的预测输出。因此,算法的期望预测(在不同训练集上学得的模型对样本 x x x的结果的预测值的均值)可以表示为
f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(x)=\mathbb{E}_D[f(x;D)] fˉ​(x)=ED​[f(x;D)]

不同训练集学得的函数 f f f的预测输出的方差(variance)为
v a r ( x ) = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] var(x)=\mathbb{E}_D[(f(x;D)-\bar{f}(x))^2] var(x)=ED​[(f(x;D)−fˉ​(x))2]

期望输出与真实标记之间的差距称为偏差(bias),即
b i a s 2 ( x ) = ( f ˉ ( x ) − y ) 2 {bias}^2(x)=(\bar{f}(x)-y)^2 bias2(x)=(fˉ​(x)−y)2

噪声为
ε 2 = E D [ ( y D − y ) 2 ] \varepsilon^2=\mathbb{E}_D[(y_D-y)^2] ε2=ED​[(yD​−y)2]

为方便讨论,假定噪声期望为零,即 E D [ y D − y ] = 0 \mathbb{E}_D[y_D-y]=0 ED​[yD​−y]=0。算法的期望泛化误差(也采用平方误差度量)为
E ( f ; D ) = E D [ ( f ( x ; D ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) + f ˉ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y D ) 2 ] + E D [ 2 ( f ( x ; D ) − f ˉ ( x ) ) ( f ˉ ( x ) − y D ) ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y + y − y D ) 2 ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + E D [ ( f ˉ ( x ) − y ) 2 ] + E D [ ( y − y D ) 2 ] + E D [ 2 ( f ˉ ( x ) − y ) ( y − y D ) ] = E D [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] + ( f ˉ ( x ) − y ) 2 + E D [ ( y − y D ) 2 ] \begin{aligned} E(f;D) &= \mathbb{E}_D[(f(x;D)-y_D)^2]\\ &= \mathbb{E}_D[(f(x;D)-\bar{f}(x)+\bar{f}(x)-y_D)^2]\\ &= \mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+\mathbb{E}_D[(\bar{f}(x)-y_D)^2]+\color{red}{\mathbb{E}_D[2(f(x;D)-\bar{f}(x))(\bar{f}(x)-y_D)]}\\ &= \mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+\mathbb{E}_D[(\bar{f}(x)-y_D)^2]\\ &= \mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+\mathbb{E}_D[(\bar{f}(x)-y+y-y_D)^2]\\ &= \mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+\mathbb{E}_D[(\bar{f}(x)-y)^2]+\mathbb{E}_D[(y-y_D)^2]+\color{red}{\mathbb{E}_D[2(\bar{f}(x)-y)(y-y_D)]}\\ &= \mathbb{E}_D[(f(x;D)-\bar{f}(x))^2]+(\bar{f}(x)-y)^2+\mathbb{E}_D[(y-y_D)^2] \end{aligned} E(f;D)​=ED​[(f(x;D)−yD​)2]=ED​[(f(x;D)−fˉ​(x)+fˉ​(x)−yD​)2]=ED​[(f(x;D)−fˉ​(x))2]+ED​[(fˉ​(x)−yD​)2]+ED​[2(f(x;D)−fˉ​(x))(fˉ​(x)−yD​)]=ED​[(f(x;D)−fˉ​(x))2]+ED​[(fˉ​(x)−yD​)2]=ED​[(f(x;D)−fˉ​(x))2]+ED​[(fˉ​(x)−y+y−yD​)2]=ED​[(f(x;D)−fˉ​(x))2]+ED​[(fˉ​(x)−y)2]+ED​[(y−yD​)2]+ED​[2(fˉ​(x)−y)(y−yD​)]=ED​[(f(x;D)−fˉ​(x))2]+(fˉ​(x)−y)2+ED​[(y−yD​)2]​

式中,第一个加红公式等于0,因为 f ˉ ( x ) − y D \bar{f}(x)-y_D fˉ​(x)−yD​是一个标量,而根据期望预测公式 f ˉ ( x ) = E D [ f ( x ; D ) ] \bar{f}(x)=\mathbb{E}_D[f(x;D)] fˉ​(x)=ED​[f(x;D)],我们可以得到 E D [ ( f ( x ; D ) − f ˉ ( x ) ) ] = 0 \mathbb{E}_D[(f(x;D)-\bar{f}(x))]=0 ED​[(f(x;D)−fˉ​(x))]=0,所以整个加红式子的值为0。同理第二个加红公式等于0,因为噪声期望为0。于是
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + ε 2 E(f;D)={bias}^2(x)+var(x)+\varepsilon^2 E(f;D)=bias2(x)+var(x)+ε2

也就是说,泛化误差可分解为偏差、方差与噪声之和。噪声无法人为控制,所以通常我们认为
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) E(f;D)={bias}^2(x)+var(x) E(f;D)=bias2(x)+var(x)

现在知道了泛化误差来自哪,就需要进行针对性控制。

偏差(bias)与方差(variance)

根据上面的定义,偏差(bias)反映了模型在样本上的期望输出与真实标记之间的差距,即模型本身的精准度,反映的是模型本身的拟合能力。方差(variance)反映了模型在不同训练数据集下学得的函数的输出与期望输出之间的误差,即模型的稳定性,反应的是模型的波动情况。下面用打靶的例子直观展示了偏差和方差。

图中红色的靶心表示测试样本的真实标记,蓝色的点表示模型在不同训练集上选出的函数的输出。第一列的两个图中,蓝色的点都比较集中,说明模型的稳定性好,也就是方差小;第一行的两个图中,蓝色点的中心都比较靠近红色靶心,说明模型的拟合能力强,也就是偏差小。所以总结如下:
low bias and low variance:又准又稳
low bias and high variance: 准但不稳
high bias and low variance:不准但稳
high bias and high variance:不准又不稳
那模型和偏差、方差之间的对应关系是什么样呢?还是以回归任务为例,看一个极端例子, y = c y=c y=c,不论模型的训练数据如何变化,学得的函数都不会变,因此 f ( x ; D ) f(x;D) f(x;D)的输出都相同,即模型的稳定性非常好,但是对训练集的拟合也不是很好,显然对于测试样本的预测也不会很准确,这种对训练集刻画不足的情况,称为欠拟合(underfitting)。逐渐增加模型的复杂度,学得的函数对训练数据的拟合越来越好

但是,对于一个复杂的模型,当我们稍微改变训练样本时,学得的函数差距将非常的大

这说明复杂的模型对训练样本拟合很好,但是模型的波动性也很大,很可能在测试样本的表现非常差。可以理解为,复杂的模型将训练样本的特性当作全体样本的通性,将噪声引入了模型中,这种现象称之为过拟合(overfitting)。所以我们需要在模型复杂度之间权衡,使偏差和方差得以均衡(trade-off),这样模型的整体误差才会最小。

欠拟合和过拟合应对策略

欠拟合(刻画不够)

  1. 寻找更好的特征,提升对数据的刻画能力
  2. 增加特征数量
  3. 重新选择更加复杂的模型

过拟合(刻画太细,泛化太差)

  1. 增加训练样本数量,样本多了,噪声比中就减少了
  2. 减少特征维数,高维空间密度小
  3. 加入正则化项,使得模型更加平滑

模型选择

同一模型在不同训练集上学得的函数往往不同,那我们怎样才能选出最好的模型和最好的函数呢?可以采用交叉验证(Cross Validation)法,其基本思路如下:将训练集划分为K份,每次采用其中K-1份作为训练集,另外一份作为验证集,在训练集上学得函数后,然后在验证集上计算误差。再次选择另外K-1份数据再次重复上述过程,最终模型的误差为学得的K个函数的误差的平均值,并依据此值选择最佳模型,最后在整个训练集上训练选择的最佳模型,并在测试集上进行测试。

同时,交叉验证也解决了上面说的variance(不同训练集学得的函数的差异)和bias(不同函数的平均值)两大问题。说白了,交叉验证验证了你的模型是否够精确,够稳定,不能说在某个数据集上表现好就可以,你做的模型是要放在整个数据集上来看的,毕竟泛化能力才是机器学习的核心。

参考文献

李宏毅主页
知乎-机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?
总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)

机器学习系列(三)——误差(error),偏差(bias),方差(variance)相关推荐

  1. 机器学习:算法中的泛化误差、偏差、方差、噪声的理解(超详细)

    摘要:在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型,那么,我们该如何选用哪一个学习算法,使用哪一种参数配置呢?这就是机器学习中的&qu ...

  2. 【图解例说机器学习】模型选择:偏差与方差 (Bias vs. Variance)

    目录 一个例子:多项式回归中的阶数选择 防止过拟合 增加训练数据 正则化 偏差与方差 理论推导 偏差与方差的折中关系 附录 机器学习的过程大致分为三步:1)模型假设,比如我们假设模型是线性回归,还是多 ...

  3. 通俗理解误差、偏差、方差以及它们和过拟合、欠拟合之间的关系.

    文章目录 0. 引言 1. 误差.偏差和方差的数学定义 2. 偏差与方差的直观理解 3. 偏差.方差与欠拟合.过拟合的关系 4. 欠拟合.欠拟合的产生原因及解决方案 0. 引言 作为一名算法工程师,在 ...

  4. 机器学习评价指标中:误差、偏差、方差的区别

    在我们看论文的时候,经常会对这几个变量分不清,下面,详细解释一下各自的定义及区别. 文章目录 1.概念定义 2.图形定义 3.数学定义 4.过拟合.欠拟合和恰好 5.结论 1.概念定义 偏差(bias ...

  5. 深度学习基础系列(八)| 偏差和方差

    当我们费劲周章不断调参来训练模型时,不可避免地会思考一系列问题,模型好坏的评判标准是什么?改善模型的依据何在?何时停止训练为佳? 要解决上述问题,我们需要引入偏差和方差这两个概念,理解他们很重要,也是 ...

  6. 吴恩达机器学习作业5---Regularized Linear Regression and Bias vs. Variance

    Regularized Linear Regression and Bias vs.Variance 文章目录 Regularized Linear Regression and Bias vs.Va ...

  7. 转载:理解机器学习中的偏差与方差

    学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, ...

  8. 理解机器学习中的偏差与方差

    学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, ...

  9. 偏差bias与方差variance

    目录 1 含义 1.1 偏差 1.2 偏差和方差 2 期望泛化误差公式推导 3 权衡偏差与方差: 4 解决高偏差与高方差 参考 学习算法的预测误差, 或者说泛化误差(generalization er ...

  10. 【模型泛化:偏差、方差、噪声】

    转载 https://blog.csdn.net/Robin_Pi/article/details/104539998 参考 https://www.jianshu.com/p/3a07adbfa03 ...

最新文章

  1. 获取当前脚本目录路径问题汇总
  2. 在ROS中开始自主机器人仿真 - 2 让turtlebot跑起来
  3. c语言怎么减去一个16进制数,一个简单的有关问题:像这样的16进制数怎么转换得到...
  4. 文件、目录——Linux基本命令(5)
  5. 记录一则数据库连接故障ORA-12560,ORA-12518
  6. python3 threading.lock_Python3 threading
  7. 计算机桌面不来回变黑,电脑屏幕变小了左右黑几种解决方法
  8. 使用GDAL对静止卫星圆盘数据进行校正(以FY2为例子)
  9. python代码怎么练_自己练习的Python代码(1)
  10. 搜狗输入法界面简化设置
  11. 交叉编译libxcb与X11
  12. rtspplayer播放器实现
  13. ROS系统学习5---OpenCV的使用
  14. Unity学习之Physic.Raycast(射线检测)个人理解分享
  15. 大数据分析与挖掘期末复习
  16. 【网页设计】HTML+CSS保护野生动物北极熊介绍网页设计专题
  17. 中国的量子计算机什么水平,被西方称为中国新“霸权”的量子计算机,除了波色采样还会什么?...
  18. 美团 CEO 王兴:从 0 到干到 300 亿美金,格局上输了,再多努力都不可能赢
  19. nginx访问后端偶尔超时问题
  20. IPSEC实验(IPSECVPN点到点,DSVPN,IPSECVPN旁挂)

热门文章

  1. 建模师是个好职业吗?
  2. Win10内存占用率过高问题解决
  3. 什么是etcd及其原理和应用场景
  4. 【第29题】有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数
  5. sourcetree远端 红色叹号
  6. 两个List合并,并且按某一个字段排序
  7. STL容器之string
  8. 如何选择优化器 optimizer
  9. 阅读开源Python脚本学习笔记1,之python异常
  10. 对象的向上转型和向下转型