对模型方差和偏差的解释之一:过拟合

原文:http://blog.csdn.net/vivihe0/article/details/33317041

在说到模型过拟合问题的时候,我们经常听说到模型的方差和偏差,本系列就通过多项式拟合为例来说明什么是模型的方差和偏差,进而说明模型复杂度与模型预测效果之间的关系。

我们通过计算机产生样本数据点来进行多项式拟合。为了能在2维平面上方便显示拟合的函数,我们的输入向量和输出向量都是1维的。我们产生数据的函数是:

y = sin(2*pi*x)

根据这个函数,我们以(0,0.1,....,0.9,1)这11个点作为输入样本x,产生y值,然后再将一个均值为0,标准差为0.3的正态分布 噪声项叠加在y上,产生了目标输出样本t。我们用这11个样本点来拟合4种不同阶数的多项式,将其对应的曲线再分别与真实的函数关系y = sin(2*pi*x)的曲线做对比。这样可以看出我们拟合的曲线有没有提取出11个样本点背后隐含的函数关系。

注意,如果是在实际应用中,我们并不知道产生数据的真实函数关系。在那种情况下,我们的目标是在不知道真实函数关系的情况下,仅仅通过10个样本点,拟合一条曲线,然后对未知的x值预测其t值。而在本文中,我们是知道产生数据的真实函数关系的。

下面是相应的MATLAB代码,在这里我们直接使用MATLAB的多项式拟合函数polyfit和polyval。polyfit函数可以计算指定阶数多项式拟合的系数,polyfit函数根据系数来计算给定输入变量的输出值。其具体的使用细节见下面的代码。

[plain] view plaincopy

  1. %产生10个数据点用于多项式拟合
  2. xTrain = 0:0.1:1;
  3. tTrain = sin(2*pi*xTrain) + normrnd(0, 0.3, 1, 11);
  4. %拟合4种不同阶数的多项式
  5. poly = cell(1, 4);
  6. p = [1, 2, 3, 10];
  7. for i = 1 : 4
  8. poly{i} = polyfit(xTrain, tTrain, p(i));
  9. end
  10. % 设置绘制曲线的采样点
  11. xGrid = 0: 0.01: 1;
  12. %新建图形
  13. figure
  14. % 多项式拟合
  15. for i = 1 : 4
  16. subplot(2,2,i);
  17. plot(xGrid, sin(2*pi*xGrid), ‘b‘);
  18. hold on
  19. plot(xTrain, tTrain, ‘o‘);
  20. plot(xGrid, polyval(poly{i}, xGrid), ‘r‘);
  21. set(gca, ‘YLim‘, [-2, 2]);
  22. title(sprintf(‘阶数: %d ‘, p(i)),  ‘fontsize‘, 20);
  23. end

注意,图中的蓝线是产生数据点真实的函数关系,圈是数据点,而红线是拟合的多项式曲线。

从图中可以看出,阶数为1和2时,拟合的效果不好,拟合的曲线与正弦曲线y =
sin(2*pi*x)差距甚远。在阶数为3的时候,拟合的效果较好。当我们把阶数增加到9的时候,多项式对10个数据点有着完美的拟合,实际上拟合曲线
准确地穿过了10个样本点,但是拟合曲线与y = sin(2*pi*x)却差距很大。

我们把前2个子图的情况叫做欠拟合,在这种情况下,由于模型的阶数较低,用于拟合的模型不够灵活,所以没有有效提取出数据包含的信息。最后一个子图
的情况叫做过拟合,在这种情况下,模型过分灵活,以至于能够适应数据的任何随机的波动,这样拟合的曲线就把数据包含的噪声也作为了有价值的信息而加以利用
了。所以说这两种情况都是需要避免的,我们需要的是在这两种情况之间做一个折中,也就是拟合的模型既不能太复杂也不能太简单。

当然你会说,在实际应用的情况下,我们不知道数据是由什么函数产生的(也就是我们无法画出图中的蓝线),那么如何判断有没有过拟合呢?且听下回。

好了,本文的结论:过犹不及。

对模型方差和偏差的解释之一:过拟合

时间: 2024-08-03 17:48:46

对模型方差和偏差的解释之一:过拟合的相关文章

对模型方差和偏差的解释之二:泛化误差

原文:http://blog.csdn.net/vivihe0/article/details/33319969 我们说过,如何在实际应用中建模,我们不可能知道产生数据的真实函数是什么,那么如何评价模型的好坏呢?由于我们拟合曲线的目标是对新的x值做出好的预测.为了检验我们建立的模型的好坏,我们需要一个测试集,这个集合与我们训练模型的训练集相互独立.也就是说,测试集中的样本数据必须是在训练模型的时候,模型没有见过的样本数据.已经训练好的模型在遇见新的样本时的表现被称作泛化性能. 现在我们还是利用函

斯坦福大学公开课机器学习: advice for applying machine learning | regularization and bais/variance(机器学习中方差和偏差如何相互影响、以及和算法的正则化之间的相互关系)

算法正则化可以有效地防止过拟合, 但正则化跟算法的偏差和方差又有什么关系呢?下面主要讨论一下方差和偏差两者之间是如何相互影响的.以及和算法的正则化之间的相互关系 假如我们要对高阶的多项式进行拟合,为了防止过拟合现象,我们要使用图下所示的正则化.因此我们试图通过下面的正则化项,来让参数的值尽可能小.正则化项的求和范围,照例取为j等于1到m,而非j等于0到m. 然后我们来分析以下三种情形.第一种情形:正则化参数lambda取一个比较大的值(比如lambda的值取为10000甚至更大).在这种情况下,

ML中的方差与偏差

下面这一段节选自知乎用户,具体链接为:https://www.zhihu.com/question/27068705/answer/82132134. 在机器学习过程中,我们用训练数据集去训练(学习)一个model(模型),通常的做法是定义一个Loss function(误差函数),通过将这个Loss(或者叫error)的最小化过程,来提高模型的性能(performance).然而我们学习一个模型的目的是为了解决实际的问题(或者说是训练数据集这个领域(field)中的一般化问题),单纯地将训练数

偏差和方差以及偏差方差权衡(Bias Variance Trade off)

当我们在机器学习领域进行模型训练时,出现的误差是如何分类的? 我们首先来看一下,什么叫偏差(Bias),什么叫方差(Variance): 这是一张常见的靶心图 可以看左下角的这一张图,如果我们的目标是打靶子的话,我们所有的点全都完全的偏离了这个中心的位置,那么这种情况就叫做偏差 再看右上角这张图片,我么们的目标是右上角这张图片中心的红色位置,我们射击的点都围绕在这个红色的点的周围,没有大的偏差,但是各个点间过于分散不集中,就是有非常高的方差 我们进行机器学习的过程中,大家可以想象,我们实际要训练

最大方差和最小协方差解释(线性代数看PCA)

转自: 最大方差和最小协方差解释(线性代数看PCA) PCA降维                         --最大方差和最小协方差联合解释(线性代数看PCA)    注:根据网上资料整理而得,欢迎讨论 机器学习算法的复杂度和数据的维数有着密切关系,甚至与维数呈指数级关联.因此我们必须对数据进行降维. 降维当然意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低. PCA是一种具有严格数学基础并且已被广泛采用的降维方法. 协方差矩阵及优化目

小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) 模型选择 验证数据集(validation data set),又叫验证集(validation set),指用于模型选择的在train set和test set之外预留的一小部分数据集 若训练数据不够时,预留验证集也是一种luxury.常采用的方法为K折交叉验证.原理为:把train set分割成k个不重合

机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?

原文:http://www.zhihu.com/question/27068705 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?修改 最近在学习机器学习,在学到交叉验证的时候,有一块内容特别的让我困惑,Error可以理解为在测试数据上跑出来的不准确率 ,即为 (1-准确率). 在训练数据上面,我们可以进行交叉验证(Cross-Validation).一种方法叫做K-fold Cross Validation (K折交叉验证), K折交叉验证,初始

总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)

犀利的开头 在机器学习中,我们用训练数据集去训练(学习)一个model(模型),通常的做法是定义一个Loss function(误差函数),通过将这个Loss(或者叫error)的最小化过程,来提高模型的性能(performance).然而我们学习一个模型的目的是为了解决实际的问题(或者说是训练数据集这个领域(field)中的一般化问题),单纯地将训练数据集的loss最小化,并不能保证在解决更一般的问题时模型仍然是最优,甚至不能保证模型是可用的.这个训练数据集的loss与一般化的数据集的loss

机器学习--偏差和方差

这篇博文主要是解释偏差和方差,以及如何利用偏差和方差理解机器学习算法的泛化性能 综述 在有监督学习中,对于任何学习算法而言,他们的预测误差可分解为三部分 偏差 方差 噪声 噪声属于不可约减误差,无论使用哪种算法,都无法减少噪声. 通常噪声是从问题的选定框架中引入的错误,也可能是由诸如未知变量之类的因素引起的,这些因素会影响输入变量到输出变量的映射.噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度.而剩下两种误差则与我们选择的学习算法相关,并且可以通过一些