文章目录

  • 1.什么是训练集、验证集和测试集?
  • 2.什么是K折交叉验证?
  • 3.数据集划分过程
  • 3.应用场景及注意事项
    • 3.1.应用场景
    • 3.2.注意事项

1.什么是训练集、验证集和测试集?

训练集,即:训练的集合,是用来训练模型的数据集合。通过这部分数据,学习得到一个模型。训练集可以当做高中刷题的题库,训练的过程可以比作高中生学习的过程。

测试集,即:测试的集合,是用来检验或者说验证模型的数据集合。通过这部分数据,可以验证学习的好坏。测试集可以当做高考的试题,测试的过程可以比作参加高考。

理解上述两个概念以后,那学习的过程我们就可以捋清楚了:
通过学习(理解成“训练”的过程),让自己变得更好(把自己当成“模型”)。通过3年的学习(训练了3年),参加高考(理解成“测试”的过程),检验自己学得好不好。

注意注意!此时此刻我其实隐含了一个假设条件,就是你参加完高考以后不能凭借着考场的回忆再去刷题,就是高考完以后你脑子就回到了高一入学的状态重新学习3年参加高考,高考如果不理想脑子又回到了高一入学的状态重新学习3年参加高考……在机器学习中,也就是说:“训练集”不能用于训练更新模型。当测试效果发现不行时,从头开始训练,不能含有一点记忆。

那么问题来了:我花了3年时间去训练,高考完了发现没学好、高考分数很低怎么办?时间都白白浪费了,但还没有学好。有的人可能说,那就再来3年呗。好,那咱们就再来3年,再来3年就一定会好吗?是不一定的,再来3年,再来10个3年也不是一定可以学好的。那训练不好就重新训练,那什么时候是个头呀?

所以,此时又有人想出了一个办法,我们每半年参加1次模拟考试,检验一下学习效果,及时调整学习策略。这,就是验证集(模拟考试的题库)

验证集,就是用来检验模型数据的集合。

此时可以适当总结下:验证集≠测试集(模拟成绩≠高考成绩,模拟成绩好可能高考大概率会好,但不代表高考成绩一定好)

2.什么是K折交叉验证?

K折交叉验证,是一种动态的验证方式。以 K 取10为例,将数据集(此数据集非机器学习中的数据集,而是指一种数据的集合,只是为了解释分组问题的一个概念)划分成10份,将每份数据分别标记为1号、2号、3号、4号、5号、6号、7号、8号、9号、10号。每次训练用1份作为验证集,其余9份作为验证集,如下表所示。

1号 2号 3号 4号 5号 6号 7号 8号 9号 10号
第1次 训练 训练 训练 训练 训练 训练 训练 训练 训练 验证
第2次 训练 训练 训练 训练 训练 训练 训练 训练 验证 训练
第3次 训练 训练 训练 训练 训练 训练 训练 验证 训练 训练
第4次 训练 训练 训练 训练 训练 训练 验证 训练 训练 训练
第5次 训练 训练 训练 训练 训练 验证 训练 训练 训练 训练
第6次 训练 训练 训练 训练 验证 训练 训练 训练 训练 训练
第7次 训练 训练 训练 验证 训练 训练 训练 训练 训练 训练
第8次 训练 训练 验证 训练 训练 训练 训练 训练 训练 训练
第9次 训练 验证 训练 训练 训练 训练 训练 训练 训练 训练
第10次 验证 训练 训练 训练 训练 训练 训练 训练 训练 训练

问1: 那为什么要用验证集?
答1: 用来调整超参数的。

问2: 比如分类问题中用到了激活函数,但不知道使用relu还是tanh函数的准确率更高,该怎么办?
答2: 那就用relu函数来训练10次得到10份验证集上的准确率,将10份准确率取个均值作为relu函数的代表。再用tanh函数来训练10次得到10份验证集上的准确率,将10份准确率取个均值作为tanh函数的代表。将这两个准确率进行比较,哪个准确率高,就说明哪个激活函数更好。
当确定好某个函数的准确率好时,就是用该激活函数,再将全部数据作为训练集训练,然后在测试集上进行测试即可。

这么做的优点是:

  • 使用了验证集,可以检验学习的好坏。
  • 每份数据都当过验证集、也都当过训练集,不会存在因数据问题带来模型偏差。
  • 充分训练了模型(毕竟每份数据被用来训练了9次),当数据量小时起到了“扩充”训练数据的作用。
  • 可以挑选出最佳的超参数。

3.数据集划分过程

  • 将数据集分为训练集和测试集,将测试集放在一边先不管。
  • 已知目前有 N 组超参数组合(将从 N 组中挑选出最好的1组)。
  • 对每个超参数组而言,将训练集分为 K 份。每次使用 K 份中的 1 份作为验证集,其他 K-1 份作为训练集。通过 K 次训练后,我们得到了 K 个不同的评价指标。将 K 个评价指标取均值作为该超参数组的代表。
  • 循环 N 次,获得 N 个超参数组对应的评价指标的均值,取其中最好的一个超参数组。
  • 使用最优的超参数,然后将 K 份数据全部作为训练集重新训练模型,得到最终模型,然后直接在测试集上测试即可。

3.应用场景及注意事项

3.1.应用场景

  • 数据量较小时,会使用 K 折交叉验证。K 折交叉验证可以起到“扩充”数据的作用。
  • 超参数多,不知道该选哪个合适,会用到K折交叉验证。

3.2.注意事项

  • K 折交叉验证,不是 K 折交叉测试(这在好多文章中都搞混了),测试集是不能用来更新模型和调整超参数的。我们将数据分成K份的目的是来验证数据的,不是来测试数据的。验证≠测试。
  • 可以将 K 折交叉验证,概括为 N 次 K 折交叉验证。N 是指超参数组的数量,需要从 N 个超参数组中选出最好的一个来;K 是指交叉验证划分的数量,一般取5或者10。

【技术分享】什么是K折交叉验证?相关推荐

  1. 交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么?

    交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么? 交叉验证(cross validation)是什么?  交叉验证是一种模型的验 ...

  2. 【Python-ML】SKlearn库Pipeline工作流和K折交叉验证

    # -*- coding: utf-8 -*- ''' Created on 2018年1月18日 @author: Jason.F @summary: Pipeline,流水线工作流,串联模型拟合. ...

  3. k折交叉验证优缺点_R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)...

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  4. k折交叉验证优缺点_k折交叉验证(R语言)

    "机器学习中需要把数据分为训练集和测试集,因此如何划分训练集和测试集就成为影响模型效果的重要因素.本文介绍一种常用的划分最优训练集和测试集的方法--k折交叉验证." k折交叉验证 ...

  5. k折交叉验证python代码_K折交叉验证法原理及python实现

    本文为原创文章,转载请注明出处! 在训练数据的过程或者参加数据比赛的时候,常常会遇到数据量不够大的情况,在一次比赛过程我学到一个小技巧-K折交叉验证法(k-fold CrossValidation), ...

  6. 5折交叉验证_[Machine Learning] 模型评估——交叉验证/K折交叉验证

    首先区分两个概念:'模型评估' 与 '模型性能度量' 模型评估:这里强调的是如何划分和利用数据,对模型学习能力的评估,重点在数据的划分方法. Keywords: 划分.利用数据 模型性能度量:是在研究 ...

  7. 机器学习(MACHINE LEARNING)交叉验证(简单交叉验证、k折交叉验证、留一法)

    文章目录 1 简单的交叉验证 2 k折交叉验证 k-fold cross validation 3 留一法 leave-one-out cross validation 针对经验风险最小化算法的过拟合 ...

  8. K折交叉验证(StratifiedKFold与KFold比较)

    文章目录 一.交叉验证 二.K折交叉验证 KFold()方法 StratifiedKFold()方法 一.交叉验证 交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训 ...

  9. k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...

    作者:Jason Brownlee 编译:Florence Wong – AICUG 本文系AICUG翻译原创,如需转载请联系(微信号:834436689)以获得授权 在对不可见示例进行预测时,模型评 ...

最新文章

  1. 归并排序原理及代码模板
  2. 通俗讲解 RESTful
  3. 【自动化__持续集成】___java___XML__DOM4操作
  4. Cordova Android 禁用长按选中功能
  5. C#.NET常见问题(FAQ)-如何改变字符串编码
  6. html5两个静态页面传值,如何使用HTML5Viewer 进行参数传递
  7. wait()、notify()、notifyAll()原理用法详解sleep()与wait()区别
  8. oracle 12c 行转列函数,oracle12cwm_concat函数人工写行转列函数
  9. 杰魔(Geomagic Design)逆向工程软件学习1-点云和多边形面片文件的处理
  10. 装修纪~~从装修中体味人生
  11. Pycharm中用Appium框架编写第一个自动化脚本
  12. 微信小程序+.NET(六) 科大讯飞语音接口-tts语音生成
  13. 探针台选型的有哪些注意事项
  14. 如何用计算机打520,520,各专业是如何表白的?
  15. 【学习记录】合并排序(归并排序)-分治法-计算机算法
  16. PHP获取浏览器,PHP获取IP地址,PHP获取设备型号
  17. 怎么把mkv视频转换成mp4?
  18. Win7系统一打开文件就自动重启桌面
  19. 【工具】1640- 这 5 款 AI 绘图工具,让你的绘图更高效!
  20. 多传感器融合定位 第八章 基于滤波的融合方法进阶

热门文章

  1. 【推荐】Windows 服务器必备十大软件
  2. 搭建e(fx)clipse-JavaFX E4 RCP平台
  3. Mysql数据库读书笔记
  4. 统信UOS+win7双系统安装
  5. 推荐几款好用的HTML编译器给大家!
  6. 现在考Oracle 19c OCP还需要官方的培训记录吗?
  7. 正则表达式的介绍及应用
  8. 容易上手的视频画面裁剪软件有哪些?来试试这几款吧
  9. ui设计-文案(CW)
  10. Python 分别获取日期中的年月日时分秒