【技术分享】什么是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。


目录
相关文章
|
5月前
|
机器学习/深度学习 算法
【阿旭机器学习实战】【30】二手车价格预估--KNN回归案例
【阿旭机器学习实战】【30】二手车价格预估--KNN回归案例
|
3月前
|
机器学习/深度学习 索引
|
4月前
|
机器学习/深度学习 数据采集 算法
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
136 1
|
4月前
|
人工智能
|
6月前
|
机器学习/深度学习 数据可视化 Python
|
6月前
|
人工智能
通义千问大模型价格直线下调,优惠升级!更有新用户限时免费领取3600万额度!
通义大模型全线9款直降,最高达97%,阿里云MaaS(模型即服务)让推理成本大幅降低,加速AI应用爆发。 即刻登录阿里云百炼官网https://bailian.aliyun.com调用体验,新用户免费限时赠送3600万tokens!
|
6月前
.com预订优惠重磅回归!低至60元/首年!
.com预订优惠重磅回归!低至60元/首年!
100 0
|
6月前
|
机器学习/深度学习 数据可视化 Python
【一起撸个深度学习框架】6 折与曲的相会——激活函数(1)
6 折与曲的相会——激活函数🍈 1 前言 在上一节,我们实现了一个“自适应线性单元”,不断地将一个一次函数的输入和输出“喂”给它,它就可以自动地找到一次函数y = w x + b y=wx+by=wx+b中合适的参数值w和b。计算图通过前向传播和反向传播,初步展现了它的神奇之处。
74 0
|
11月前
|
算法 容器
天梯赛训练精选实例(三)
天梯赛训练精选实例(三)
144 0
|
11月前
天梯赛训练精选实例(一)
天梯赛训练精选实例(一)
118 0
下一篇
无影云桌面