对模型方差和偏差的解释之一:过拟合
原文: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函数根据系数来计算给定输入变量的输出值。其具体的使用细节见下面的代码。
- %产生10个数据点用于多项式拟合
- xTrain = 0:0.1:1;
- tTrain = sin(2*pi*xTrain) + normrnd(0, 0.3, 1, 11);
- %拟合4种不同阶数的多项式
- poly = cell(1, 4);
- p = [1, 2, 3, 10];
- for i = 1 : 4
- poly{i} = polyfit(xTrain, tTrain, p(i));
- end
- % 设置绘制曲线的采样点
- xGrid = 0: 0.01: 1;
- %新建图形
- figure
- % 多项式拟合
- for i = 1 : 4
- subplot(2,2,i);
- plot(xGrid, sin(2*pi*xGrid), 'b');
- hold on
- plot(xTrain, tTrain, 'o');
- plot(xGrid, polyval(poly{i}, xGrid), 'r');
- set(gca, 'YLim', [-2, 2]);
- title(sprintf('阶数: %d ', p(i)), 'fontsize', 20);
- end
注意,图中的蓝线是产生数据点真实的函数关系,圈是数据点,而红线是拟合的多项式曲线。
从图中可以看出,阶数为1和2时,拟合的效果不好,拟合的曲线与正弦曲线y = sin(2*pi*x)差距甚远。在阶数为3的时候,拟合的效果较好。当我们把阶数增加到9的时候,多项式对10个数据点有着完美的拟合,实际上拟合曲线 准确地穿过了10个样本点,但是拟合曲线与y = sin(2*pi*x)却差距很大。
我们把前2个子图的情况叫做欠拟合,在这种情况下,由于模型的阶数较低,用于拟合的模型不够灵活,所以没有有效提取出数据包含的信息。最后一个子图 的情况叫做过拟合,在这种情况下,模型过分灵活,以至于能够适应数据的任何随机的波动,这样拟合的曲线就把数据包含的噪声也作为了有价值的信息而加以利用 了。所以说这两种情况都是需要避免的,我们需要的是在这两种情况之间做一个折中,也就是拟合的模型既不能太复杂也不能太简单。
当然你会说,在实际应用的情况下,我们不知道数据是由什么函数产生的(也就是我们无法画出图中的蓝线),那么如何判断有没有过拟合呢?且听下回。
好了,本文的结论:过犹不及。
对模型方差和偏差的解释之一:过拟合相关推荐
- 机器学习模型中,偏差与方差的权衡及计算
衡量一个机器学习模型的性能,可以用偏差和方差作为依据. 一个高偏差的模型,总是会对数据分布做出强假设,比如线性回归.而一个高方差的模型,总是会过度依赖于它的训练集,例如未修剪的决策树.我们希望一个模型 ...
- 用来评估模型好坏的方差和偏差的区别对比
先说为什么要来区别对比方差和偏差.在特定的模型下,模型误差的期望值可以分解为三个部分:样本噪音.模型预测值的方差.预测值相对真实值的偏差: 误差的期望值 = 噪音的方差 + 模型预测值的方差 + 预测 ...
- 【模型泛化:偏差、方差、噪声】
转载 https://blog.csdn.net/Robin_Pi/article/details/104539998 参考 https://www.jianshu.com/p/3a07adbfa03 ...
- R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例、拟合方差分析模型(two-way ANOVA)、计算Eta Squared
R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例.拟合方差分析模型(two-way ANOVA).计算Eta Squared 目录
- 【图解例说机器学习】模型选择:偏差与方差 (Bias vs. Variance)
目录 一个例子:多项式回归中的阶数选择 防止过拟合 增加训练数据 正则化 偏差与方差 理论推导 偏差与方差的折中关系 附录 机器学习的过程大致分为三步:1)模型假设,比如我们假设模型是线性回归,还是多 ...
- 【机器学习】什么是学习曲率?如何解决模型中方差和偏差问题?什么是迁移学习?什么是模型的精确率和召回率?
系列文章目录 第十二章 Python 机器学习入门之构建机器学习系统 系列文章目录 文章目录 一.学习曲率 二.利用大型神经网络解决方差和偏差问题 三.机器学习开发的迭代循环 四.误差分析 五. 添加 ...
- 吴恩达机器学习ex5:正则化线性回归和方差与偏差
1.正则化线性回归 1.1.数据集的可视化 训练数据集:X表示水位变化的历史记录,y表示流出大坝的水量: 交叉验证数据集:Xval,yval: 测试数据集:Xtest,ytest: 其中,训练数据集1 ...
- 机器学习中的方差与偏差
方差与偏差的定义 方差:不同的训练数据集训练出的模型输出值之间的差异. 偏差:用所有可能的训练数据集训练出的所有模型的输出的平均值与真实模型的输出值之间的差异. 方差与偏差的数学公式 首先,以回归为例 ...
- 方差与偏差的意义与推导过程
文章目录 基本概念 偏差与方差的公式推导 符号假设 泛化误差.偏差和方差之间的关系 偏差.方差窘境 偏差.方差与过拟合.欠拟合的关系? 偏差.方差与bagging.boosting的关系? 如何解决偏 ...
最新文章
- 《python 与数据挖掘 》一 1.2 工具简介
- 排序算法----插入排序
- 从一线撤回二三线城市的程序员们,最后都怎么样了?
- POJ 1611 -The Suspects (并查集)
- Win7 Ubuntu13.04互通(win7下用vbox安装Ubuntu)
- # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod
- python集合类型是一种具体的数据类型_Python3基础语法之集合类型
- c++中利用STL实现公司员工分组问题
- maven中的oracle,maven中安装SQL SERVER 和 Oracle JDBC驱动
- python中request方法_如何使用python语言中的request模块获取代码
- 介绍ML.NET——面向.NET开发人员的机器学习库
- eclipse adt如何切换到设计界面_如何设计出优秀的UI界面?这4个方面帮你快速优化...
- ruby DBI安装使用指南
- HTML:H5新特性
- 全志A31S源码编译
- 2908. Annoying painting tool
- edvac是商用计算机吗,计算机系统发展历程.ppt
- 网络学习 2g 3g 4g 技术对比 带宽理解 三大运营商手机网络模式 (制式)
- 我想去远方,我想出去走走,我想到处看看!!
- EasyNVR H5无插件摄像机直播解决方案前端解析之:监控实时直播的四分屏的前端展示
热门文章
- 图像处理:边缘提取算法(边缘提取算子总结)——Matlab代码实现
- RabbitMQ消息发送和接收
- mysql外键约束脚本_如何在MySQL中设置外键约束
- 项目服务路由保存不成功_汽车延保服务有哪些项目?不了解的小伙伴快看过来...
- public、protected、default、private区别
- [UWP]涨姿势UWP源码——Unit Test
- Transient关键字的使用
- MAVEN学习笔记-maven的获取和安装
- px/em/pt区别和转换
- JavaScript操作文件(2)