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

简介: 【技术分享】什么是K折交叉验证?

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。


目录
打赏
0
0
0
0
0
分享
相关文章
如何做好一个网站建设的规划?
网站是单位在互联网上的一个很重要窗户。而网站首页又是用户访问第一感受,也是用户继续停留访问的因素。那么如何制作一个有效的网站可以吸引访问者留下来进一步浏览并作为业务的转发?统筹性的规划网站建设显得特别重要,今天给大家带来一些建站的干货。
152 5
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
176 1
UNet家族最强系列 | UNet、UNet++、TransUNet与SWin-UNet究竟哪个更强!!!
UNet家族最强系列 | UNet、UNet++、TransUNet与SWin-UNet究竟哪个更强!!!
2055 0
【机器学习】特征筛选实例与代码详解
【机器学习】特征筛选实例与代码详解
297 0
云服务的稳定性
【4月更文挑战第29天】云服务的稳定性
240 2
|
10月前
|
ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
【4月更文挑战第9天】ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)
174 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等