前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >数据集的划分--训练集、验证集和测试集

数据集的划分--训练集、验证集和测试集

作者头像
Flaneur
发布于 2020-03-25 03:19:28
发布于 2020-03-25 03:19:28
5.3K00
代码可运行
举报
运行总次数:0
代码可运行

前言

        在机器学习中,经常提到训练集和测试集,验证集似有似无。感觉挺好奇的,就仔细查找了文献。以下谈谈训练集、验证集和测试集。

为什么要划分数据集为训练集、验证集和测试集?

        做科研,就要提出问题,找到解决方法,并证明其有效性。这里的工作有3个部分,一个是提出问题,一个是找到解决方法,另一个是证明有效性。每一个部分都可以作为科研的对象,研究的越靠前,则越偏向科学,越靠后,则越偏向技术,因此叫做科学与技术。

        在人工智能领域,证明一个模型的有效性,就是对于某一问题,有一些数据,而我们提出的模型可以(部分)解决这个问题,那如何来证明呢?这和我们平时的考试也是一样的,证明我们掌握了某类知识,就是去参加考试。

        好,那么如何设计考试,让这个考试可以较为客观的考察出每个人的能力呢(注意,不是让每个人都得最高分)?回想我们的高中阶段,有一些教材,让我们平时学习其基本知识(训练集),有一些模拟考试,让我们知道我们到底掌握的怎么样,然后再改进我们的学习(验证集),最后的高考决定我们的去向(测试集)。这样的类比,是不是就很清楚了。

训练集、验证集和测试集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. **训练集**:顾名思义指的是用于训练的样本集合,主要用来训练神经网络中的参数。

2. **验证集**:从字面意思理解即为用于验证模型性能的样本集合.不同神经网络在训练集上训练结束后,通过验证集来比较判断各个模型的性能.这里的不同模型主要是指对应不同超参数的神经网络,也可以指完全不同结构的神经网络。

3. **测试集**:对于训练完成的神经网络,测试集用于客观的评价神经网络的性能。

如何划分训练集、验证集和测试集

        这个问题其实非常基础,也非常明确,在Scikit-learn里提供了各种各样的划分方法。无论是单一的训练集、验证集和测试集,还是进行交叉验证,你都会找到调用的方法,因此我们这里主要介绍两种常见的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 前人给出训练集、验证集和测试集
  对于这种情况,那么只能跟随前人的数据划分进行,一般的比赛也是如此。一定不要使用测试集来调整性能(测试集已知的情况下),尽管存在使用这种方法来提升模型的性能的行为,但是我们并不推荐这么做。最正常的做法应当是使用训练集来学习,并使用验证集来调整超参数。当在验证集上取得最优的模型时,此时就可以使用此模型的超参数来重新训练(训练集+验证集),并用测试集评估最终的性能。
    我们首先说明加入验证集重新训练和不加有啥区别,从理论上讲,一方面学习的样本增多,应当是会提升模型性能的,第二,其在验证集上取得最优的模型与验证集的分布的契合度是最高的,因此最终的模型会更接近验证集的分布。
    其次再说明验证集和测试集上的性能差异。事实上,在验证集上取得最优的模型,未必在测试集上取得最优。其原因就是训练的模型是否对于该问题有着较好的泛化能力,即没有对验证集产生过拟合现象。正因为有这种情况的发生,才会有人使用测试集的最优值作为最终的结果(而不管验证集的好坏)。

2. 前人没有明确给出数据集的划分
  这时候可以采取第一种划分方法,对于样本数较小的数据集,同样可以采取交叉验证的方法。
    交叉验证的方法的使用场景有很多,我们这里是针对不同的模型的性能好坏进行评估。
    使用交叉验证,可以获得更为客观的性能差异。当使用第一种方法时,我们更建议使用P值来做显著性检验,从而保证性能差异的客观性。而使用第二种方法,即交叉验证时,我们选取其性能表现的均值作为最终的结果,更能体现该模型的泛化能力。

                                 1.存在验证集                                 这里五倍交叉验证是用于进行调参,此时不接触测试集。                                 数据集首先划分出训练集与测试集(可以是4:1或者9:1)。                                 其次,在训练集中,再划分出验证集(通常也是4:1或者9:1)                                 然后对于训练集和验证集进行5折交叉验证,选取出最优的超参数,然后把训练集和验证集一起训练出最终的模型。                                 2.不存在验证集                                 该情况通常是对比不同的模型,如自己的模型和别人的模型的性能好坏。                                 只需要把数据集划分为训练集和测试集即可,然后选取5次试验的平均值作为最终的性能评价。

验证集和测试集的区别

        那么,训练集、校验集和测试集之间又有什么区别呢?一般而言,训练集与后两者之间较易分辨,校验集和测试集之间的概念较易混淆.个人是从下面的角度来理解的:

  • 神经网络在网络结构确定的情况下,有两部分影响模型最终的性能,一是普通参数(比如权重w和偏置b),另一个是超参数(例如学习率,网络层数).普通参数我们在训练集上进行训练,超参数我们一般人工指定(比较不同超参数的模型在校验集上的性能).那为什么我们不像普通参数一样在训练集上训练超参数呢?(花书给出了解答)一是:超参数一般难以优化(无法像普通参数一样通过梯度下降的方式进行优化).二是:超参数很多时候不适合在训练集上进行训练,例如,如果在训练集上训练能控制模型容量的超参数,这些超参数总会被训练成使得模型容量最大的参数(因为模型容量越大,训练误差越小),所以训练集上训练超参数的结果就是模型绝对过拟合.
  • 正因为超参数无法在训练集上进行训练,因此我们单独设立了一个验证集,用于选择(人工训练)最优的超参数.因为验证集是用于选择超参数的,因此校验集和训练集是独立不重叠的.
  • 测试集是用于在完成神经网络训练过程后,为了客观评价模型在其未见过(未曾影响普通参数和超参数选择)的数据上的性能,因此测试与验证集和训练集之间也是独立不重叠的,而且测试集不能提出对参数或者超参数的修改意见,只能作为评价网络性能的一个指标.

为了方便清楚直观的了解,上一个表格:

综述

        至此,我们可以将神经网络完整的训练过程归结为一下两个步骤:

        1.训练普通参数.在训练集(给定超参数)上利用学习算法,训练普通参数,使得模型在训练集上的误差降低到可接受的程度(一般接近人类的水平).

        2.’训练’超参数.在验证集上验证网络的generalization error(泛化能力),并根据模型性能对超参数进行调整.

        重复1和2两个步骤,直至网络在验证集上取得较低的generalization error.此时完整的训练过程结束.在完成参数和超参数的训练后,在测试集上测试网络的性能.

附言

说到底:

  • 验证集是一定需要的;
  • 如果验证集具有足够泛化代表性,是不需要再整出什么测试集的;
  • 整个测试集往往就是为了在验证集只是非训练集一个小子集的情况下,好奇一下那个靠训练集(训练)和验证集(调参)多次接力训练出来的模型是不是具有了泛化性能,因而加试一下图个确定。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
训练集、验证集、测试集以及交验验证的理解
在人工智能机器学习中,很容易将“验证集”与“测试集”,“交叉验证”混淆。
全栈程序员站长
2022/08/27
19.3K0
训练集、验证集、测试集以及交验验证的理解
训练集和测试集的分布差距太大有好的处理方法吗?
1.对数据集进行划分,分为训练集和测试集两部分; 2.对模型在测试集上面的泛化性能进行度量; 3.基于测试集上面的泛化性能,依据假设检验来推广到全部数据集上面的泛化性能。
机器学习AI算法工程
2022/12/13
4.3K0
训练集和测试集的分布差距太大有好的处理方法吗?
kfold交叉验证_SPSS交叉验证法
在机器学习建模过程中,通行的做法是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。
全栈程序员站长
2022/11/05
1.4K0
kfold交叉验证_SPSS交叉验证法
测试数据集与验证数据集之间有什么区别呢?
验证数据集(Validation Datasets)是训练模型时所保留的数据样本,我们在调整模型超参数时,需要根据它来对模型的能力进行评估。
StoneDemo
2018/02/02
5.9K0
测试数据集与验证数据集之间有什么区别呢?
机器学习入门 8-6 验证数据集与交叉验证
前几个小节通过引入过拟合和欠拟合的概念,让大家理解使用train_test_split方法划分出测试集的意义。
触摸壹缕阳光
2019/12/30
1.4K0
训练集(train set) 验证集(validation set) 测试集(test set)
training set是用来训练模型或确定模型参数的,如ANN中权值等; validation set是用来做模型选择(model selection),即做模型的最终优化及确定的,如ANN的结构;而 test set则纯粹是为了测试已经训练好的模型的推广能力。当然,test set这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。样本少的时候,上面的划分就不合适了。常用的是留少部分做测试集。然后对其余N个样本采用K折交叉验证法。就是将样本打乱,然后均匀分成K份,轮流选择其中K-1份训练,剩余的一份做验证,计算预测误差平方和,最后把K次的预测误差平方和再做平均作为选择最优模型结构的依据。特别的K取N,就是留一法(leave one out)。在应用中,一般只将数据集分成两类,即training set 和test set,大多数文章并不涉及validation set。
狼啸风云
2019/01/18
10.1K0
训练集、验证集、测试集(附:分割方法+交叉验证)
在《一文看懂机器学习》里我们介绍了机器学习的7个步骤,训练集(Training Dataset)主要在训练阶段使用。
easyAI
2019/12/24
32.7K0
小白学PyTorch | 2 浅谈训练集验证集和测试集
关键词:训练集(train set)、验证集(valid set)、测试集(test set) 。
机器学习炼丹术
2020/09/03
1.9K0
数据集划分的三种常见方式!
数据集划分算是在数据分析建模中比较重要的,模型的好坏不但和训练数据有关,还和测试数据有关,当然,也和评估指标有关,不过今天先来看前者。
数据森麟
2021/01/25
3.1K0
3000字详细总结机器学习中如何对模型进行选择、评估、优化
对于一个机器学习工程而言,我们可以选择的模型众多,就之前的章节,我们已经可以选择:
double
2018/07/31
9940
为什么不提倡在训练集上检验模型?
在你开始接触机器学习时,通常你会从读取一个数据集并尝试使用不同的模型开始。你可能会疑惑,为什么不用数据集中的所有数据来训练及评估模型呢?
用户1085347
2018/02/05
1.9K0
为什么不提倡在训练集上检验模型?
机器学习,过拟合与欠拟合,正则化与交叉验证
不同的机器学习方法会给出不同的模型。当损失函数给定时,基于损失函数的模型的训练误差(training error)和模型的测试误差(test error)就自然成为学习方法评估的标准。
zhangjiqun
2024/12/14
2070
机器学习,过拟合与欠拟合,正则化与交叉验证
图解 72 个机器学习基础知识点
来源:尤而小屋 R语言统计与绘图本文约5500字,建议阅读11分钟本文梳理了机器学习最常见的知识要点。 图解机器学习算法系列 以图解的生动方式,阐述机器学习核心知识 & 重要模型,并通过代码讲通应用细节。 1. 机器学习概述 1)什么是机器学习 人工智能(Artificial intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。它是一个笼统而宽泛的概念,人工智能的最终目标是使计算机能够模拟人的思维方式和行为。 大概在上世纪50年代,人工智能开始
数据派THU
2023/03/29
7520
图解 72 个机器学习基础知识点
机器学习:应用和设计模型
在训练数据的时候,可能会发现模型的效果不是很好,于是就需要对模型进行调整,一般有以下几种方式:
Here_SDUT
2022/09/19
7100
机器学习:应用和设计模型
《揭秘机器学习中的交叉验证:模型评估的基石》
在机器学习的复杂领域中,构建一个精准有效的模型是众多从业者的核心目标。然而,模型的性能评估绝非易事,它关乎模型能否在实际应用中发挥作用,而交叉验证则是这一过程中的关键技术,是保障模型可靠性与泛化能力的重要手段。
程序员阿伟
2025/02/28
1790
干货——图像分类(下)
在机器学习或者深度学习领域,参数和超参数是一个常见的问题,个人根据经验给出了一个很狭隘的区分这两种参数的方法。
计算机视觉研究院
2018/09/21
3680
干货——图像分类(下)
第一章(1.3)机器学习概念图谱
机器学习(machine learning)是最近非常火的一个领域,关于其一些基本定义百度百科、维基百科或者网上随便都可以找到很多资料,所以这里不做过多解释。
两只橙
2019/01/23
4190
第一章(1.3)机器学习概念图谱
如何通过交叉验证改善你的训练数据集?
假设这样一种情况,你对一个样本不均匀的数据集做了一段时间的处理,在这期间你用其中一部分数据做试验,测试了n种机器学习方法,然后喜闻乐见的发现每次的准确率都高达95%。你觉得这95%的准确率真的是实至名归吗?
AI研习社
2019/10/08
4.9K0
如何通过交叉验证改善你的训练数据集?
第一次测试题总结
这里是一些暑期培训第一次测试题的部分解释,经过这次测试的摧残,总结备录一下,方便日后回顾复习。
Flaneur
2020/03/25
4900
《机器学习》-- 第二章:模型评估与选择
(1) 误差:学习器的实际预测输出与样本的真实输出之间的差异;其中学习器在训练集上的误差称为”训练误差“(training error),在新样本上的误差称为”泛化误差“(generalization error)。值得一提的是,学习器就是在训练集上训练出来的,但实际上在回到训练集上对样本预测结果时,仍有误差。(即结果值与标记值不同)
fireWang
2019/07/31
9570
推荐阅读
相关推荐
训练集、验证集、测试集以及交验验证的理解
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文