对模型方差和偏差的解释之一:过拟合
原文: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函数根据系数来计算给定输入变量的输出值。其具体的使用细节见下面的代码。
![](https://code.csdn.net/assets/CODE_ico.png)
- %产生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的关系? 如何解决偏 ...
最新文章
- 【二级java】排序技术
- 最近的生活[发点牢骚]
- Spark- Checkpoint原理剖析
- 理解矩阵,矩阵背后的现实意义
- CI Weekly #11 | 微服务场景下的自动化测试与持续部署
- JVM学习笔记(二):垃圾收集
- 洛谷P1414 又是毕业季II 数论
- jstl mysql 更新_JSTL使用总结(1) 核心标签库和SQL标签库
- ado.net EF学习系列----深入理解查询延迟加载技术(转载)
- sci期刊投稿指南 计算机科学 人工智能方向 145本sci期刊目录 从一区到四区(2022年 最新影响因子更新了)
- ubuntu16.04安装monaco字体
- 微信小程序地图组件去除iconPath
- 给ibus-rime输入法添加小鹤双拼方案
- 09|自研or借力(下):集成Gin替换已有核心
- 认证的公众号可以快速免费注册认证小程序
- 谷歌三大核心技术:from--http://blog.csdn.net/together_cz/article/details/66969003
- [转]PROE传动链条的装配教程
- 五种知名的分布式数据库大PK
- 微信公众平台开发订阅号
- 数组变换-Java-牛客模拟三
热门文章
- php 编译错误,PHP 编译错误及解决办法
- bat修改文件内容_在win10系统中一键修改MapGIS67系统库背景色
- 三因子两水平doe_DOE试验设计案例
- ip映射后 前端无法调用接口_基于S7300400 CPU集成PN接口的Modbus TCPW
- Zabbix的问题日志清单查看
- 测试面试话题5: 如何不漏测
- LeetCode 508. Most Frequent Subtree Sum
- 【机器学习实战】第1章 机器学习基础
- Docker: Failed to get D-Bus connection: No connection to service
- 屠龙之路_战胜View对DataBase猛烈进攻_ThirdDay