[深度概念]·K-Fold 交叉验证 (Cross-Validation)的理解与应用

个人主页--> xiaosongshine.github.io/

1.K-Fold 交叉验证概念

在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。

验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。

2.举例说明

下面举一个具体的例子来说明K-Fold的过程,比如如下的数据

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
复制代码

分为K=3组后

Fold1: [0.5, 0.2]
Fold2: [0.1, 0.3]
Fold3: [0.4, 0.6]
复制代码

交叉验证的时会使用如下三个模型,分别进行训练和测试,每个测试集误差MSE加和平均就得到了交叉验证的总评分

Model1: Trained on Fold1 + Fold2, Tested on Fold3
Model2: Trained on Fold2 + Fold3, Tested on Fold1
Model3: Trained on Fold1 + Fold3, Tested on Fold2复制代码

3.应用讲解


1、 将全部训练集S分成k个不相交的子集,假设S中的训练样例个数为m,那么每一个子集有m/k个训练样例,相应的子集称作{​}。

2、 每次从模型集合M中拿出来一个​,然后在训练子集中选择出k-1个

{​}(也就是每次只留下一个​),使用这k-1个子集训练​后,得到假设函数​。最后使用剩下的一份​作测试,得到经验错误​。

3、 由于我们每次留下一个​(j从1到k),因此会得到k个经验错误,那么对于一个​,它的经验错误是这k个经验错误的平均。

4、 选出平均经验错误率最小的​,然后使用全部的S再做一次训练,得到最后的​。


核心内容:

通过上述1,2,3步进行模型性能的测试,取平均值作为某个模型的性能指标

根据性能指标来挑选出最优模型,再进行上述第4步重新进行训练,获得最终模型

疑问解答:

1.为什么不直接拆分训练集与数据集,来验证模型性能,反而采用多次划分的形式,岂不是太麻烦了?

我们为了防止在训练过程中,出现过拟合的问题,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。这样的直接划分会导致一个问题就是测试集不会参与训练,这样在小的数据集上会浪费掉这部分数据,无法使模型达到最优(数据决定了程性能上限,模型与算法会逼近这个上限)。但是我们又不能划分测试集,因为需要验证网络泛化性能。采用K-Fold 多次划分的形式就可以利用全部数据集。最后采用平均的方法合理表示模型性能。

2.为什么还要进行所有数据集重新训练,是否太浪费时间?

我们通过K-Fold 多次划分的形式进行训练是为了获取某个模型的性能指标,单一K-Fold训练的模型无法表示总体性能,但是我们可以通过K-Fold训练的训练记录下来较为优异的超参数,然后再以最优模型最优参数进行重新训练,将会取得更优结果。

3.何时使用K-Fold

我的看法,数据总量较小时,其他方法无法继续提升性能,可以尝试K-Fold。其他情况就不太建议了,例如数据量很大,就没必要更多训练数据,同时训练成本也要扩大K倍(主要指的训练时间)。

4.参考

1.K-Fold 交叉验证 (Cross-Validation)

2.规则化和模型选择(Regularization and model selection)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux mariadb 升级,linux mariadb

linux mariadb转载 一 安装下载mariaDB MariaDB-5.5.29-rhel5-x86_64-common.rpm 和MariaDB-5.5.29-rhel5-x86_64-server.rpm 包,MariaDB-5.5.29-rhel5-x86_64-client.rpm2.然后再http.//yum。mariadb。org/ 找到 RPM-GPG-KEY-MariaDB 这个PGP文件,把文件放入到/etc…

Linux Note

日期:2019/3/31 内容:Linux学习笔记 一、Linux命令 ls -l 操作效果 第一列:文件权限 一共10位。 01(r)2(w)3(x)4(r)5(w)6(x)7(r)8(w)9(x)文件类型文件所有者权限 usr权限,u权限文件所有者所属组成员的权限 group权限,g…

linux查看usb鼠标是否启动,Linux USB鼠标驱动注解及测试

参考2.6.14版本中的driver/usb/input/usbmouse.c。鼠标驱动可分为多个部分:驱动加载部分、probe部分、open部分、urb回调函数处理部分。下文阴影部分为注解。一、 驱动加载部分static int __init usb_mouse_init(void){int retval usb_register(&usb_mouse_…

退役前的最后的做题记录upd:2019.04.04

考试考到自闭&#xff0c;每天被吊打。 还有几天可能就要AFO了呢。。。 Luogu3602&#xff1a;Koishi Loves Segments 从左向右&#xff0c;每次删除右端点最大的即可。 [HEOI2014]南园满地堆轻絮 答案一定是 \(\lceil \frac{max_{1\le i < j \le n}(a_i-a_j)}{2} \rceil\)。…

linux ssh-add,linux – 如何使ssh-add从文件读取密码?

根据您的发行版本和ssh-add的版本,您可以使用或不使用以这种方式从stdin读取密码的ssh-add的-p选项&#xff1a;cat passfile | ssh-add -p keyfile如果这不工作,您可以使用Expect,Unix工具使交互式应用程序非互动.你必须从你的包管理器安装它.我为你准备了一个工具.只需将内容…

linux nginx F配置,linux下nginx的安装及配置

1、安装nginx前&#xff0c;咱们首先要确保系统安装了g、gcc、openssl-devel、pcre-devel和zlib-devel软件&#xff0c;可经过如图所示命令进行检测,若是以安装咱们能够经过图二所示卸载&#xff1a;linuxyum install gcc-cyum -y install zlib zlib-devel openssl openssl--de…

你缺啥,你缺一个得力的办公软件

其实你缺啥我都知道&#xff0c;但是&#xff0c;我又不能给你发工资&#xff0c;还得你自己努力工作才行。不过我可以给你分享几款好用的办公软件&#xff0c;对你在进行有效率的办公会有很大帮助的。曲奇办公是一款以文档为载体的企业办公管理应用。帮助企业快速实现业务标准…

C语言做一个表格的程序,用C语言画个简单表格

今天见到个题目&#xff0c;就把他做了&#xff0c;题目如下&#xff1a;在图形环境中很容易做出漂亮的表格。但在控制台环境中就比较困难了。有的时候可以用一些符号大略地模拟&#xff1a;(word文档中可能不整齐&#xff0c;拷贝到记事本中看)-------------|abc |xyztt|…

深度学习框架PyTorch一书的学习-第四章-神经网络工具箱nn

参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码&#xff0c;下面是本人的笔记 本章介绍的nn模块是构建与autograd之上的神经网络模块 除了nn外还会介绍神经网络中常用的工具&#xff0c;比如优化器optim、初始化init等 1.nn.Mod…

高级语言程序设计c 华南理工,华南理工大学高级语言程序设计(C)期末练习题

.. 《高级语言程序设计(C)》练习题一&#xff0e;单项选择题1.用C语言编制的源程序要变为目标程序必须要经过( )。(a) 解释(b) 汇编(c) 编辑(d) 编译2. 执行C程序时出现的“溢出”错误属于( )错误。(a) 编译(b) 连接(c) 运行(d) 逻辑3. 按C标识符的语法规定&#xff0c;合法的标…

bevfusion 学习笔记

目录 tensorrt ros部署&#xff1a; 也依赖ros2 c ros2安装指导&#xff1a; 相机标定工具源码&#xff1a; 官方github&#xff0c;部分模型开源 tensorrt ros部署&#xff1a; https://github.com/linClubs/BEVFusion-ROS-TensorRT 也依赖ros2 c GitHub - newintelli…

地铁售票系统设计思想及部分代码

设计思想&#xff1a;地铁售票系统的关键点在于换乘&#xff0c;所以首先要分为换乘和不换乘两种情况。不换乘比较简单&#xff0c;通过起始站名和终点站名查询他们的num&#xff0c;然后list打包输出到jsp就可以。换乘的话就先要找到两条线路&#xff0c;找到两条线路的交点也…

数字带通滤波器c语言程序,C语言编写FIR数字低通滤波器

主要是获取滤波器参数和卷积算法&#xff0c;参数根据自己的滤波器特性用matlab上面的一个fdatool工具配置生成&#xff0c;然后将这些参数写入程序里面即可(参数可适当的乘以一个系数&#xff0c;对滤波没任何影响)&#xff0c;我这里Fs 2k&#xff0c;Fpass 1k,Fstop 2k&am…

浏览器拦截跨域请求处理方法(已阻止跨源请求:同源策略禁止读取远程资源)

原文地址&#xff1a;http://my.oschina.net/lichaoqiang/blog/317823 在浏览器请求中&#xff0c;出现跨域访问资源的问题&#xff0c;我们肯定会遇到。如果跨域请求被阻止&#xff0c;有可能导致css、js 、ajax请求、font字体等资源出现无法正常访问的问题。接下来&#xff0…

C程序设计语言上机13,《高级语言程序设计》北大上机试题(十三)

C语言上机试题&#xff1a;131&#xff0e;题目&#xff1a;编一C程序&#xff0c;其功能是能把读入一串英文单词(以单词end做为结束标记&#xff0c;单个单词字母数≤20)&#xff0c;并按字典顺序输出。(注&#xff1a;可执行程序命名为e13_1.exe)程序设计&#xff1a;#includ…

Activiti6.0 java项目框架 spring5 SSM 工作流引擎 审批流程

即时通讯&#xff1a;支持好友&#xff0c;群组&#xff0c;发图片、文件&#xff0c;消息声音提醒&#xff0c;离线消息&#xff0c;保留聊天记录 &#xff08;即时聊天功能支持手机端&#xff0c;详情下面有截图&#xff09;工作流模块-------------------------------------…

c语言变量强制转换,C语言——“=”中的强制类型转换

前言&#xff1a;在写程序时候遇到了一些关于数据类型转换的问题&#xff0c;编译器也没有报错&#xff0c;运行时才发现数据不对&#xff0c;找bug花费了很多时间&#xff0c;但最终也发现是一些细节上的问题&#xff0c;特地在这里整理出一篇文章记录。实验环境&#xff1a;芯…

Spring框架IOC和AOP的实现原理(概念)

IoC&#xff08;Inversion of Control&#xff09; (1). IoC&#xff08;Inversion of Control&#xff09;是指容器控制程序对象之间的关系&#xff0c;而不是传统实现中&#xff0c;由程序代码直接操控。控制权由应用代码中转到了外部容器&#xff0c;控制权的转移是所谓反…

面向视频的全新AI架构 —— 阿里云智能视觉技术全解

2019独角兽企业重金招聘Python工程师标准>>> 我们都知道&#xff0c;AI技术正在以可见的速度被应用于各行各业&#xff0c;然而绝大部分业务场景想应用AI技术&#xff0c;都需要算法工程师根据自身业务的标注数据&#xff0c;来进行单独训练&#xff0c;才能打磨出合…

c语言巩固,巩固一下C语言中的指针

写了几段代码&#xff0c;再巩固一下C语言知识。我的记忆方法跟文章中的不一样。*是取值符号&#xff0c;&取地址符号&#xff0c;()限定子表达式的符号,[]是按索引取数组乘员的符号。优先级方面()>[]>*,&。对于int *(*p(int))[3]; 。我是这么分析的&#xff1a;…