【技术分享】什么是K折交叉验证?
文章目录
- 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折交叉验证?相关推荐
- 交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么?
交叉验证(cross validation)是什么?K折交叉验证(k-fold crossValidation)是什么? 交叉验证(cross validation)是什么? 交叉验证是一种模型的验 ...
- 【Python-ML】SKlearn库Pipeline工作流和K折交叉验证
# -*- coding: utf-8 -*- ''' Created on 2018年1月18日 @author: Jason.F @summary: Pipeline,流水线工作流,串联模型拟合. ...
- k折交叉验证优缺点_R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)...
作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...
- k折交叉验证优缺点_k折交叉验证(R语言)
"机器学习中需要把数据分为训练集和测试集,因此如何划分训练集和测试集就成为影响模型效果的重要因素.本文介绍一种常用的划分最优训练集和测试集的方法--k折交叉验证." k折交叉验证 ...
- k折交叉验证python代码_K折交叉验证法原理及python实现
本文为原创文章,转载请注明出处! 在训练数据的过程或者参加数据比赛的时候,常常会遇到数据量不够大的情况,在一次比赛过程我学到一个小技巧-K折交叉验证法(k-fold CrossValidation), ...
- 5折交叉验证_[Machine Learning] 模型评估——交叉验证/K折交叉验证
首先区分两个概念:'模型评估' 与 '模型性能度量' 模型评估:这里强调的是如何划分和利用数据,对模型学习能力的评估,重点在数据的划分方法. Keywords: 划分.利用数据 模型性能度量:是在研究 ...
- 机器学习(MACHINE LEARNING)交叉验证(简单交叉验证、k折交叉验证、留一法)
文章目录 1 简单的交叉验证 2 k折交叉验证 k-fold cross validation 3 留一法 leave-one-out cross validation 针对经验风险最小化算法的过拟合 ...
- K折交叉验证(StratifiedKFold与KFold比较)
文章目录 一.交叉验证 二.K折交叉验证 KFold()方法 StratifiedKFold()方法 一.交叉验证 交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训 ...
- k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...
作者:Jason Brownlee 编译:Florence Wong – AICUG 本文系AICUG翻译原创,如需转载请联系(微信号:834436689)以获得授权 在对不可见示例进行预测时,模型评 ...
最新文章
- 归并排序原理及代码模板
- 通俗讲解 RESTful
- 【自动化__持续集成】___java___XML__DOM4操作
- Cordova Android 禁用长按选中功能
- C#.NET常见问题(FAQ)-如何改变字符串编码
- html5两个静态页面传值,如何使用HTML5Viewer 进行参数传递
- wait()、notify()、notifyAll()原理用法详解sleep()与wait()区别
- oracle 12c 行转列函数,oracle12cwm_concat函数人工写行转列函数
- 杰魔(Geomagic Design)逆向工程软件学习1-点云和多边形面片文件的处理
- 装修纪~~从装修中体味人生
- Pycharm中用Appium框架编写第一个自动化脚本
- 微信小程序+.NET(六) 科大讯飞语音接口-tts语音生成
- 探针台选型的有哪些注意事项
- 如何用计算机打520,520,各专业是如何表白的?
- 【学习记录】合并排序(归并排序)-分治法-计算机算法
- PHP获取浏览器,PHP获取IP地址,PHP获取设备型号
- 怎么把mkv视频转换成mp4?
- Win7系统一打开文件就自动重启桌面
- 【工具】1640- 这 5 款 AI 绘图工具,让你的绘图更高效!
- 多传感器融合定位 第八章 基于滤波的融合方法进阶