训练集、验证集、测试集以及交验验证的理解

训练集、验证集、测试集以及交验验证的理解在人工智能机器学习中,很容易将“验证集”与“测试集”,“交叉验证”混淆。一、三者的区别训练集(trainset)——用于模型拟合的数据样本。 验证集(developmentset)——是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。在神经网络中,我们用验证数据集去寻找最优的网络深度(nu…

大家好,又见面了,我是你们的朋友全栈君。

     在人工智能机器学习中,很容易将“验证集”与“测试集”,“交叉验证”混淆。

一、三者的区别

  • 训练集(train set) —— 用于模型拟合的数据样本。
  • 验证集(validation set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时,用以验证当前模型泛化能力(准确率,召回率等),以决定是否停止继续训练。

                 在神经网络中, 我们用验证数据集去寻找最优的网络深度(number of hidden layers),或者决定反向传播算法的停止点或者在神经网络中选择隐藏层神经元的数量;

               在普通的机器学习中常用的交叉验证(Cross Validation) 就是把训练数据集本身再细分成不同的验证数据集去训练模型。

  • 测试集 —— 用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。
类别 验证集 测试集
是否被训练到 否 否
作用

1)调超参数;

2)监控模型是否发生过拟合(以决定是否停止训练)

为了评估最终模型泛化能力
使用次数 多次使用,以不断调参 仅仅一次使用
缺陷 模型在一次次重新手动调参并继续训练后所逼近的验证集,可能只代表一部分非训练集,导致最终训练好的模型泛化性能不够

一个形象的比喻:

    训练集———–学生的课本;学生 根据课本里的内容来掌握知识。

    验证集————作业,通过作业可以知道 不同学生学习情况、进步的速度快慢。

    测试集———–考试,考的题是平常都没有见过,考察学生举一反三的能力。

传统上,一般三者切分的比例是:6:2:2,验证集并不是必须的。

二、为什么要测试集

a)训练集直接参与了模型调参的过程,显然不能用来反映模型真实的能力(防止课本死记硬背的学生拥有最好的成绩,即防止过拟合)。

b)验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型(刷题库的学生不能算是学习好的学生)。

c) 所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力(期末考试)。

但是仅凭一次考试就对模型的好坏进行评判显然是不合理的,所以接下来就要介绍交叉验证法

三、交叉验证法(模型选择)

 a) 目的

   交叉验证法的作用就是尝试利用不同的训练集/验证集划分来对模型做多组不同的训练/验证,来应对单独测试结果过于片面以及训练数据不足的问题。(就像通过多次考试,才通知哪些学生是比较比较牛B的)

交叉验证的做法就是将数据集粗略地分为比较均等不相交的k份,即

训练集、验证集、测试集以及交验验证的理解

然后取其中的一份进行测试,另外的k-1份进行训练,然后求得error的平均值作为最终的评价,具体算法流程如下:

训练集、验证集、测试集以及交验验证的理解

       举个例子:假设建立一个BP神经网络,对于隐含层的节点数目,我们并没有很好的方法去确定。此时,一般将节点数设定为某一具体的值,通过训练集训练出相应的参数后,再由交叉验证集去检测该模型的误差;

然后再改变节点数,重复上述过程,直到交叉验证误差最小。

b) 交叉验证算法的具体步骤如下:

1.      随机将训练数据等分成k份,S1, S2, …, Sk。

2.      对于每一个模型Mi,算法执行k次,每次选择一个Sj作为验证集,而其它作为训练集来训练模型Mi,把训练得到的模型在Sj上进行测试,这样一来,每次都会得到一个误差E,最后对k次得到的误差求平均,就可以得到模型Mi的泛化误差。

3.      算法选择具有最小泛化误差的模型作为最终模型,并且在整个训练集上再次训练该模型,从而得到最终的模型。

               K折交叉验证,其主要 的目的是为了选择不同的模型类型(比如一次线性模型、非线性模型、),而不是为了选择具体模型的具体参数。比如在BP神经网络中,其目的主要为了选择模型的层数、神经元的激活函数、每层模型的神经元个数(即所谓的超参数)。每一层网络神经元连接的最终权重是在模型选择(即K折交叉验证)之后,由全部的训练数据重新训练。 

目的在模型选择,而非模型训练调整参数。

c) K值的选择

      K值的选取是一个偏差与方差的权衡:

  K=1时,所有数据用于训练,容易过拟合;

 K=N时,相当于留一法LOOCV  (Leave-one-out cross-validation ).; 

通常建议K=10.,2017年的一项研究给出了另一种经验式的选择方法[3],作者建议 训练集、验证集、测试集以及交验验证的理解 且保证 训练集、验证集、测试集以及交验验证的理解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146295.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python爬虫入门

    python爬虫入门毕设是做爬虫相关的,本来想的是用java写,也写了几个爬虫,其中一个是爬网易云音乐的用户信息,爬了大概100多万,效果不是太满意。之前听说Python这方面比较强,就想用Python试试,之前也没用过

    2022年7月5日
  • 什么是组件_webview组件

    什么是组件_webview组件1.FlowPanel普通容器1//普通的容器,使用HTML默认的布局行为2FlowPanelflowPanel=newFlowPanel();3flowPanel.add(n

    2022年8月2日
  • java中线程安全的容器_jfinal容器线程安全吗

    java中线程安全的容器_jfinal容器线程安全吗四、线程安全的容器类Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。1.Map在Map类中,提供两种线程安全容器。java.util.HashtableHashtable和HashMap类似,都是散列表,存储键值对映射。主要区别在于Hashtable是线程安全的。当我们查看Hashtable源码的时候,可以看到Hashtable的方法都是通过syn

    2022年9月12日
  • 好看的热血动漫番剧_评价高好看的动漫

    好看的热血动漫番剧_评价高好看的动漫大家好,我是辣条。最近被室友安利热血动漫番《终末的女武神》和《拳愿阿修罗》,太上头了周末休息熬夜看完了。不过资源不太好找,辣条一怒爬取了资源,这下可以看个够了。室友崇拜连连,想起了我的班花,快点开学,阿西吧…Python爬虫-vip动漫采集效果展示爬取目标网站目标:樱花动漫工具使用开发工具:pycharm开发环境:python3.7,Windows10使用工具包:requests,lxml,re,tqdm重点学习内容正则的使用tqdm的.

    2022年8月23日
  • gif录屏软件_手机录屏工具

    gif录屏软件_手机录屏工具怎么简单方便地录屏并且一键导出gif动图,ScreenToGif应该大部分人都用过,而且很方便,录完屏直接每一帧地自动编码成GIF,支持暂停、停止,选择删除不需要的帧,可以添加文字,字幕和标题框,可以框选你需要录屏的局部,也可以全屏录制。 下载链接 还有一个camgif,方便又小巧,压缩包只有700kb用于一些简单的gif动画录制,录制过程中,可改变窗口大小、位置。…

    2022年9月20日
  • 了解匹配表

    了解匹配表

    2021年8月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号