当前位置: 首页 > news >正文

Cross-validation交叉验证(使用 train/test split 进行模型评估的缺点 LOOCV)

K折交叉验证

 

使用 train/test split 进行模型评估的缺点

①最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法

②该方法只用了部分数据进行模型的训练

 

 

为了消除这一变化因素,我们可以创建一系列训练集/测试集,计算模型在每个测试集上的准确率,然后计算平均值。

这就是 K-fold cross-validation 的本质

 

LOOCV

      首先,我们先介绍LOOCV方法,即(Leave-one-out cross-validation)。像Test set approach一样,LOOCV方法也包含将数据集分为训练集和测试集这一步骤。但是不同的是,我们现在只用一个数据作为测试集,其他的数据都作为训练集,并将此步骤重复N次(N为数据集的数据数量)。

      如图所示,假设我们现在有n个数据组成的数据集,那么LOOCV的方法就是每次取出一个数据作为测试集的唯一元素,而其他n-1个数据都作为训练集用于训练模型和调参。结果就是我们最终训练了n个模型,每次都能得到一个MSE。而计算最终test MSE则就是将这n个MSE取平均。

     但是LOOCV的缺点也很明显,那就是计算量过于大,是train/test split耗时的n-1倍。

 

所以提出了一种折中的方法

K-fold Cross Validation

      K折交叉验证,和LOOCV的不同在于,我们每次的测试集将不再只包含一个数据,而是多个,具体数目将根据K的选取决定。比如,如果K=5,那么我们利用五折交叉验证的步骤就是:

1.将所有数据集分成5份

2.不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的MSE

3.将5次的MSE取平均得到最后的MSE

 

不难理解,其实LOOCV是一种特殊的K-fold Cross Validation(K=N)。

 

 

      每一幅图种蓝色表示的真实的test MSE,而黑色虚线和橙线则分贝表示的是LOOCV方法和10-fold CV方法得到的test MSE。我们可以看到事实上LOOCV和10-fold CV对test MSE的估计是很相似的,但是相比LOOCV,10-fold CV的计算成本却小了很多,耗时更少。

 

 

相关文章:

  • 机器学习与数据挖掘 之 模型评估model evalution的方法(Holdout K-fold Cross-validation Bootstrap)
  • ROS(九)——tf坐标系广播与监听的编程实现
  • NLP 之 NER命名实体识别(名字实体识别)
  • ROS(十)——launch启动文件的使用方法
  • CV中的Blob
  • 从零开始自动驾驶(一) —— gazebo自带模型
  • 从零开始自动驾驶(二) —— URDF 添加立方体
  • Haar特征
  • Stereo Matching (双目)立体匹配 视差图 双目图片进行立体匹配获取深度图进行三维重建的步骤​​​​​​​
  • Python 之 histogram直方图(pandas, pd)
  • Python 之 Scatter散点图
  • 决策树 Decision tree
  • nominal和ordinal 数据处理中四种基本数据类型
  • Python实现决策树 Desision Tree 可视化
  • Grid SearchCV(网格搜索) Python实现
  • android图片蒙层
  • cookie和session
  • EventListener原理
  • golang 发送GET和POST示例
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • mysql innodb 索引使用指南
  • spring boot下thymeleaf全局静态变量配置
  • vue脚手架vue-cli
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #100天计划# 2013年9月29日
  • #HarmonyOS:软件安装window和mac预览Hello World
  • $jQuery 重写Alert样式方法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (待修改)PyG安装步骤
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)为什么要选择C++
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net6 webapi log4net完整配置使用流程
  • @Autowired标签与 @Resource标签 的区别
  • @Import注解详解
  • @JSONField或@JsonProperty注解使用
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20150707]外部表与rowid.txt
  • [AIGC] Spring Interceptor 拦截器详解
  • [IDF]啥?
  • [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
  • [J2ME]如何替换Google Map静态地图自带的Marker
  • [Machine Learning] 领域适应和迁移学习
  • [nginx] 网上最全面nginx教程(近100篇文章整理)
  • [PHP] 算法-顺时针打印矩阵的PHP实现
  • [pluginviteimport-analysis] vite 提示jsx语法报错
  • [Poetize6] IncDec Sequence
  • [python] 过年燃放烟花