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

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

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

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

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

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

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

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

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

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次),当数据量小时起到了”扩充”训练数据的作用。
  • 可以挑选出最佳的超参数。

  • 将数据集分为训练集和测试集,将测试集放在一边先不管。

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

3.1.应用场景

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

3.2.注意事项

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

Original: https://blog.csdn.net/m0_38068876/article/details/125092475
Author: Allenpandas
Title: 【技术分享】什么是K折交叉验证?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/614207/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球