深度学习模型在训练集上很好而在测试集表现得不好而拟合次数并不多_机器学习中的过拟合,欠拟合和偏倚方差折衷...
过度拟合在机器学习中很重要。
很直观的解释过拟合:假设我们现在让机器学习考试做题,想象一种情况,机器逐字记住每个问题的答案(拟合非常好-完美)。然后,我们可以在练习题上得分很高;我们这样做是基于希望实际考试中的问题与练习中的问题相同。但是,实际上,我们在用该机器在实际考试问题上的得分会非常低,因为很少有在实际考试中会出现完全相同的问题。
记忆现象可能导致过度拟合。就是说我们过度地从训练集中提取了太多信息,然后这个模型在训练集上就特别好,但在实际中或者测试集中就不行了,这被称为机器学习中的低偏倚。与此同时,它也无助于我们对数据进行概括并从中得出模式,该模型将在以前未见的数据集上表现不佳。我们也称这种情况为机器学习中的高变异或者高方差。
当我们尝试根据相对较少的观察值而不是基本关系来描述学习规则时,就会发生过度拟合;当我们使模型过于复杂时,以使其适合每个训练样本时也会过拟合,例如,如前所述,记住所有问题的答案。
相反的情况称为欠拟合。当模型欠拟合时,它在训练集上的表现不佳,而在测试集上则表现不佳,这意味着它无法捕获数据的潜在趋势。如果我们没有使用足够的数据来训练模型,可能会导致拟合不足,就像如果我们没有审查足够的材料会导致考试不及格;如果我们尝试将错误的模型拟合到数据中,也可能发生这种情况,就像如果我们采用错误的方法并以错误的方式学习它,则在任何练习或考试中得分都将较低。我们称这些情况中的任何一种在机器学习中都是高偏倚,尽管此时训练和测试集的特征相当一致,方差很小,这依然是一种不好的方式。
我们要避免过度拟合和拟合不足。回忆偏差是由于学习算法中的错误假设而产生的错误;高偏倚会导致拟合不足,而方差则衡量模型预测对数据集变化的敏感程度。因此,我们需要避免任何使偏倚或方差变大的情况。这是否意味着我们应始终使偏倚和方差尽可能低?如果可以的话,答案是肯定的。但实际上,它们之间存在明显的权衡,减少一个会增加另一个。这就是所谓的偏倚-方差权衡。听起来很抽象吗?让我们看下面的例子。
我们要建立一个模型,以根据电话民意测验数据预测候选人当选下一任总统的可能性。民意测验是通过邮政编码进行的。我们从一个邮政编码中也就是一个地区中随机选择样本,通过这样的方法我们估计出,候选人有61%的机会获胜。然而,事实证明他输掉了选举。我们的模型哪里出问题了?
我们想到的第一件事是只有一个邮政编码的样本很小。这是高度偏倚的根源,也因为某个地理区域的人们倾向于共享相似的人口统计信息。这导致估计值的低方差。我们知道低方差是好事,因此,我们可以简单地使用大量邮政编码中的样本是不是就可以得到正确的结果?是的,但不要高兴太早。这可能会导致同时增加估计方差。所以我们需要找到最佳的样本量,即最佳数量的邮政编码,以实现最低的总体偏倚和方差。要使模型的总误差最小,就需要仔细平衡偏倚和方差。
给定一组训练样本x_1,x_2,…,x_n及其目标值 y_1,y_2,…,y_n,我们想找到一个回归函数 ŷ(x),该函数尽可能正确地估计真实关系 y(x)。我们通过均方误差(MSE)来衡量估计误差,回归模型的好坏(或差):
该E表示期望。可以按照以下分析推导将该式分解为偏倚和方差分量(需要一些基本的概率理论才能理解):
偏倚项测量估计误差,方差项描述估计围绕其平均值移动多少。学习模型ŷ(x)越复杂,训练样本越大,偏倚将越小。但是,为了更好的拟合增加的数据点,模型的方差会增大。我们通常采用交叉验证技术来找到最佳模型,以平衡偏差和方差并减少过度拟合。
用交叉验证避免过拟合
回想一下,在练习题和实际考试之间,存在模拟考试,我们可以在其中评估我们在实际考试中的表现并进行必要的修订。在机器学习中,验证过程有助于评估模型如何在模拟设置中推广到独立或看不见的数据集。在常规的验证设置中,原始数据被分为三个子集,通常为训练集的60%,验证集的20%,测试集的其余20%。如果划分后我们有足够的训练样本,并且仅需要对模拟性能进行粗略估算,则此设置就足够了。否则的化就有必要进行交叉验证。
在一轮交叉验证中,原始数据分为两个子集,分别用于训练和测试(或验证)。我们会记录测试结果。同样,我们可以将原始数据进行不同的划分下执行多轮交叉验证。最后,将所有回合的测试结果平均,以生成更准确的模型估计。交叉验证有助于减少变异性,从而限制了过拟合的问题。
目前我们主要使用两种交叉验证方案,即穷举和非穷举。在穷举方案中,我们在每一轮中都保留了固定数量的观察值作为测试(或验证)样本,其余的观察值则作为训练样本。重复此过程,直到将所有可能的不同样本子集都作为一次测试集为止。
例如,我们可以应用留一法交叉验证(LOOCV)并将每个数据作为测试集一次。对于大小为n的数据集,LOOCV需要进行n轮交叉验证。当n变大时这个方法就很慢了。
非穷举方案并未不追求尝试所有可能的数据集划分情况。最广泛使用的类型是k 折交叉验证。首先,原始数据将数据随机分成k个相等大小的折叠。在每一次验证中,这些折叠之一成为测试集,其余数据成为训练集。我们重复此过程k次,每次折叠指定一次测试集。最后,我们将k组测试结果取平均值以进行评估。k的常见值为3、5和10。下表说明了五折的设置:
我们还可以将数据随机分成多次训练和测试集。这种方法正式的称呼为holdout方法。该算法的问题在于某些样本可能永远不会出现在测试集中,而某些样本可能会在测试集中被多次选择。
最后还想给大家介绍一个嵌套交叉验证,它是交叉验证的组合。包括以下两个阶段:
- 内部交叉验证,用于找到最合适的模型,可以用K折倍交叉验证实现
- 外部交叉验证,用于性能评估和统计分析
最后给大家来个例子帮助我们更好的理解交叉验证。
一位数据科学家计划开车上班,他的目标是每天早上9点之前到达。他需要确定出发时间和走的路线。他在某个月的星期一,星期二和星期三尝试了这两个参数的不同组合,并记录了每个试验的到达时间。然后,他找出最佳时间表并每天应用。但是,最佳时间表不能使他每天按时到达。事实证明,该模型是基于一周的前三天收集的数据,其存在过度拟合(原因为训练数据太少),模型的效果在星期四和星期五可能会好也可能不好。更好的解决方案是用星期一到星期三的训练参数组合在星期四和星期五进行验证,并类似地根据划分不同的训练日和测试日重复此过程得到最终参数。是为交叉验证。
总而言之,交叉验证通过结合对不同数据子集的预测性能的度量来得出对模型的更准确估计。该技术不仅减少了方差并避免了过度拟合,而且还使人们对模型在实践中的总体性能有深入的了解。
感谢您耐心看完,发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python的。
深度学习模型在训练集上很好而在测试集表现得不好而拟合次数并不多_机器学习中的过拟合,欠拟合和偏倚方差折衷...相关推荐
- 深度学习模型轻量化(上)
深度学习模型轻量化(上) 移动端模型必须满足模型尺寸小.计算复杂度低.电池耗电量低.下发更新部署灵活等条件. 模型压缩和加速是两个不同的话题,有时候压缩并不一定能带来加速的效果,有时候又是相辅相成的. ...
- 深度学习模型的训练(大总结)
深度学习模型的训练 前言 1.模型的保存与加载 方法一:同时保存模型和参数 方法二:仅保存参数(数据量小,推荐!) 2.断点的保存与加载 3.预训练模型的使用 4.模型的冻结 方法一:设置requir ...
- 可视化深度学习模型的训练误差和验证误差
可视化深度学习模型的训练误差和验证误差 #导入基础包和库 # Load libraries import numpy as np from keras.datasets import imdb fro ...
- SVM 训练--在训练集上acc为94% 在测试集上为70%
用SVM 训练的时候: 出现的问题是: Error: specified nu is infeasible 带有下标的赋值维度不匹配. 百度到的答案:赋值维度不匹配...说明等号两边的大小不一致,导致 ...
- 【深度学习模型的训练与评估】一个实例:Iris多分类
文章目录: 1 评估深度学习模型1.1 自动评估1.2 手动评估1.3 k折交叉验证 2 在Keras中使用Sklearn 3 深度学习模型调参数 4 Iris多分类4.1 数据集分析4.2 代码 1 ...
- 屏蔽预训练模型的权重。 只训练最后一层的全连接的权重。_轻量化 | 如何让笨重的深度学习模型在移动设备上跑起来?看它!...
概述 卷积神经网络依靠神经网络中数以千万计的网络参数共同参与计算,存在网络结构复杂,运算量大,速度慢的缺点,并且很难移植到嵌入式设备中.随着网络模型层数越来越深,参数越来越多,减少他们的大小和计算损 ...
- 轻量化 | 如何让笨重的深度学习模型在移动设备上跑起来?看它!
点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 概述 卷积神经网络依靠神经网络中数以千万计的网络参数共同参与计算,存在网络结构复杂,运算量 ...
- 开了batch_norm,训练集acc很高,而测试集acc很低怎么解决
因为batch_norm的两个平移缩放参数在训练的时候没有更新,需要手动更新一下 step = tf.get_variable("step", [], initializer=tf ...
- 加载tf模型 正确率很低_深度学习模型训练全流程!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:黄星源.奉现,Datawhale优秀学习者 本文从构建数据验证集. ...
最新文章
- 列表解析和生成器表达式
- Python实现模板
- SQL 数据库远程备份 语句
- 移动设备响应式网站之CSS媒体查询
- 苹果4s怎么越狱_苹果4S怎么下载东西
- Linux上的Redis客户端软件G-dis3
- Android调用第三方app(Scheme隐式以及显示调用)
- thoughtworks作业trains
- Monotonic Matrix(lemma定理)
- Redis——Redis持久化
- BugKu-图穷匕见
- android apk汉化与破解
- 网件R6220刷机失败
- 物联网数据的十大特征
- 数据预处理与特征工程—9.Lasso算法实现特征选择
- [个人记录] AcWing 788 逆序对的数量
- 如何在UE5中重建哥特式建筑场景?
- 【读书笔记】《王道论坛计算机考研机试指南》第五章
- GoAccess 网站日志分析
- Ffmpeg 将视频分解成多张图片以及多张图片合成视频
热门文章
- 缺少ncurses包的解决办法
- 以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机...
- 从viewState说开去
- MySQL史上最快逻辑备份工具
- Ubuntu Server 16.04 安装并用两块硬盘做RAID1
- 全角半角转换(利用word2003 2007 自带功能)
- html5拖放文件,HTML5是否允许拖放拖放文件夹或文件夹树?
- springboot整合swagger(高版本)异常
- 异常mongodb:Invalid BSON field name XXXXXX:YYYYY.zz
- 3DSMAX安装未完成,某些产品无法安装的解决方法