训练集 验证集_训练与验证、测试集数据分布不同的情况
在不同分布的数据集上进行训练与验证、测试
深度学习需要大量的数据,但是有时我们可获得的满足我们真实需求分布的数据并不是那么多,不足以对我们的模型进行训练。这时我们就会收集大量相关的数据加入到训练集中,即使有些数据,甚至是大部分数据的分布都与验证集、测试集的数据分布不同。我们以一个例子理解一下为什么我们会这么做:
依旧假设我们在建设一个猫分类网站,我们有两种,一种是我们目标分布,也就是我们用户上传的,不是那么专业的,甚至还有些比较模糊的猫图片;一种是我们网络上爬取的清晰的,专业的猫图片。这两种数据分布明显不同,但是问题是,我们从用户那里获取到的训练数据是有限的,只有10000个左右,而这并不足以对我们的模型进行足够好的训练,训练集较少还容易发生过拟合;我们能从网络中爬取到的图片有200000份,这个数量足以对我们的模型进行训练。那么我们该如何做,使用我们从用户中仅能获取的10000个数据,将我们的模型训练得足够好呢?
我们可以使用200000张从网页爬取的图片加上我们从用户那里收集到的5000张图片作为训练集,剩余的5000张从用户那里获取的图片分为验证集与测试集。这样划分我们数据集的好处就在于,现在我们验证与测试的目标就是我们实际想要处理的目标;缺点当然就在于我们的训练集与验证集、测试集分布不同。但事实证明,这样的划分在长期能给我们带来更好的系统性能。
数据分布不匹配时的偏差与方差
我们在之前了解到,分析偏差与方差,可以帮助我们确定下一步模型改进的方向。但是,当我们的训练集与验证集、测试集数据分布不同时,分析偏差和方差的方式可能与之前有所不同。我们还是以猫分类器为例:
人类在分类图片时的准确率很高,所以我们可以假设人类错误率近似为0,也就是贝叶斯错误率近似为0。假设我们的训练集错误率为1%,验证集错误率为10%,如果我们的训练集和验证集分布相同的话,我们就可以认为模型的泛化性能不是很好,存在方差问题。但是两者分布不同的时候,我们就不能轻易下这个结论,因为可能这时我们的训练集数据非常清晰,很容易识别,但是我们的验证集因为用的是用户来源的图片,较为模糊,相比训练集要难识别得多。所以这时也许我们的模型并没有方差问题,只是由于数据变得更加难以准确分类导致的。为了解决这个问题,我们会从训练集中分出一部分,称为训练-验证集(training-devset)这一部分数据并不参与训练,也不用于调整模型代价函数,而是用于确定是否存在方差问题。
由于是从训练集中随机抽取出来的,所以训练-验证集与训练集数据分布相同。同理,此时我们的验证集和测试集数据分布也相同,这样一来,我们就可以比较模型在这几个数据集中运行的结果,从而确定我们的模型是否存在问题了。
如果我们的训练集错误是1%,而训练-验证集错误率是9%,验证集错误率是10%,我们就可以确定,我们的模型真的存在方差问题,也就是泛化性能不够好。但如果我们的训练-验证集错误率只有1.5%,则说明我们的模型不存在方差问题,错误率上升的原因是数据不匹配(data mismatch)的问题。
如果我们的训练集错误率为10%,而人类错误率为0%,我们就可以知道模型存在很大的偏差问题,或者说是还有很大的可避免偏差。此时如果验证集错误率为20%,训练-验证集错误率为11%,我们就知道这个模型还存在数据不匹配的问题。而我们验证集错误率与测试集错误率之间的差异则说明我们的模型对验证集过拟合的程度,差异越大,越有可能过拟合。
数据不匹配问题的处理
如果我们的错误率显示出我们的模型存在数据不匹配的问题,我们该如何处理?这个问题没有系统的解决方案,但我们可以进行如下尝试:人工对数据进行检测,尝试了解训练集与验证/测试集的具体差异,为了防止对验证集过拟合,我们需要去看验证集而不是测试集,避免过拟合时无法被测试集检测出。比如我们做一个语音检测的模型,我们人工检测一下验证集和训练集的差异,发现验证集样本噪音很多,加入了一些环境噪音。这时我们就可以收集更多的有这些噪音的数据加入训练集,也就是收集与验证集类似的数据。我们也可以模拟验证集中的噪音加入训练集。当我们发现语音检测更难检测到数字时,我们就可以增加训练集中人们读出数字的数据。总之,我们首先人工找出训练集与验证集的数据差异,并且针对我们找出的差异,通过对训练集增加相似数据或者人为添加噪音的方式来模拟验证集。
Reference
深度学习课程 --吴恩达
训练集 验证集_训练与验证、测试集数据分布不同的情况相关推荐
- [深度学习-TF2实践]应用Tensorflow2.x训练DenseNet模型在Cifar10数据上,测试集准确率90.07%
所需环境 tensorflow 2.1 最好用GPU import tensorflow as tf print(tf.__version__) 2.1.0 Cifar10数据集 CIFAR-10 数 ...
- MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》
MAT之PCA:利用PCA(四个主成分的贡献率就才达100%)降维提高测试集辛烷值含量预测准确度并<测试集辛烷值含量预测结果对比> 目录 输出结果 实现代码 输出结果 后期更新-- 实现代 ...
- MAT之PLS:利用PLS(两个主成分的贡献率就可达100%)提高测试集辛烷值含量预测准确度并《测试集辛烷值含量预测结果对比》
MAT之PLS:利用PLS(两个主成分的贡献率就可达100%)提高测试集辛烷值含量预测准确度并<测试集辛烷值含量预测结果对比> 目录 输出结果 实现代码 输出结果 实现代码 load sp ...
- keras训练模型,训练集的准确率很高,但是测试集准确率很低的原因
今天在测试模型时发现一个问题,keras训练模型,训练集准确率很高,测试集准确率很低,因此记录一下希望能帮助大家也避坑: 首先keras本身不同的版本都有些不同的或大或小的bug,包括之前也困扰过我的 ...
- 路科验证示例_角度形式验证示例
路科验证示例 In this post, we will see how Angular form validation works. Earlier we looked into angular f ...
- SourceChangeWarning:验证集上准确率很高,但是测试集上很低
https://yan624.github.io/posts/cb7d01da.html
- java正则表达式验证密码_最新密码验证正则表达式
正则表达式验证密码功能在项目中经常被使用到,但是很多朋友还是不大会使用密码正则表达式进行验证,本文小编为大家整理了php密码验证正则表达式.python密码强度正则,当然还有大家常用到的js正则表达式 ...
- java验证电子邮件_用Java验证电子邮件
这是我身边的东西.为了检查地址是否是有效的格式,这里有一个regex来验证它是否接近rfc2822(它没有捕捉到一些奇怪的角落情况).我去年在网上找到的. private static final P ...
- 需要单机还是集群部署_单机、分布式、集群的区别与联系
一.单机结构 一个系统业务量很小的时候所有的代码都放在一个项目中,然后这个项目部署在一台服务器上就好了,整个项目所有的服务都由这台服务器提供.这就是单机结构.单机结构的缺点是显而易见的,单机的处理能力 ...
- 训练不出结果_训练赛惨败SKT?FPX直播透露拿冠军原因!Karsa再谈离开RNG?
都说人逢喜事精神爽,小凤凰拿了世界冠军当然更爽.一回国就开启了快乐直播,人均阴阳怪气,信息量巨大,让我们一起来康康吧! "刘青松赢了装自己很淡定,其实耳机里叫得最大声."" ...
最新文章
- 写实的CG人物角色制作学习教程
- 从腾讯实时音视频发家史,看爆发中的 RTC 将何去何从
- VMware vSphere 5.1 学习系列之:安装 vCenter Server
- mysql gbk字符集_Mysql字符集知识总结
- C++brent method布伦特方法找extrema极值的算法(附完整源码)
- 任意进制转化 函数 模板(一)
- 给刚博士毕业的年轻学者9点建议,最后一条:抓紧结婚,生娃!
- 零基础学云计算怎么样?2020年云计算学习路线
- Impala如何支持array<string> 解决问题
- 安装Mycat 曾经踩的那些坑
- 一步一步学Repast 第二章(把界面显示出来2)
- 华三(H3C)无线控制器AC如何登录到FIT-AP
- Unity 编辑器扩展教程
- Python IDLE的下载,安装和使用
- 组成原理 - 内存颗粒分类(ram,rom)
- Go将中文转换为拼音
- Windows XP SP3安装教程(图)
- css3 标点符号在首位,CSS 让标点符号不出现在行首
- 第十一章 性能与可伸缩性(待续)
- Acrobat 删除pdf页面
热门文章
- Cloud for Customer里XML view的加载原理
- 如何修改PHP项目Language Library版本号
- 一个微服务网关的设计
- 在浏览器里使用 SAP GUI
- 帧大小超过交换机mtu_tcpip – UDP中的MTU如何为65535,但以太网不允许超过1500字节的帧大小...
- access工资明细表_《ACCESS》工资管理完整(整理).doc
- 将有序数组转换为二叉搜索树Python解法
- oracle4.0,OracleTM Application Server 4.0简 介
- db2 创建样本数据库_db2创建数据库
- window10系统 同时安装支持 jdk 1.7和1.8环境