Skip to content

如何真正用好训练集、验证集和测试集

How to Actually Use Train, Validation and Test Set

把给定数据划分为训练集、测试集和验证集是相当常规的做法。

ds p126 1

然而,关于它们应当如何使用,存在不少误解,尤其是验证集和测试集。在本章里,我们来澄清这些误解,看看应当如何真正使用训练集(train set)、验证集(validation set)和测试集(test set)。我们先把数据划分为:

  • 训练集
  • 验证集
  • 测试集

此时,你只需假装测试数据根本不存在。立刻把它忘掉。

ds p126 2

从训练集开始。现在它就是你的全部世界。

ds p127 1

  • 你对它进行分析
  • 你对它做变换
  • 你用它来确定特征(feature)
  • 你在它上面拟合一个模型

建模之后,你会想衡量模型在未见数据上的表现,对吧?这时候验证集登场了。

ds p127 2

根据验证集的表现来改进模型。下面是你迭代构建模型的方式:

ds p127 3

  • 用训练集训练
  • 用验证集评估
  • 改进模型
  • 再次用验证集评估
  • 再次改进模型
  • 如此循环。

直到……你开始对验证集过拟合(overfitting)的那个点。这意味着你已经把验证集榨干了(或者说污染了)。没关系,把它合并回训练集,然后重新划分出一份新的训练集和验证集。

ds p128 1

注意:如有需要可以依赖交叉验证(cross validation),尤其是在数据不多的时候。即便数据充足,你仍然可以使用交叉验证,但它可能计算开销较大。现在,如果你对模型的表现满意,就在测试数据上评估它。

ds p128 2

测试集用来做什么:

  • 对模型做一次最终且无偏的评估。
  • 测试集不要用来做什么:
  • 分析、做决策等等。

ds p128 3

如果模型在测试集上表现不佳,没关系,回到建模阶段去改进它。但是(这也是大多数人做错的地方)!他们又用同一个测试集。这是不允许的!可以这样想:你的教授在课堂上讲课,所有课堂讲授和例子都是训练集。教授布置了带回家的作业,它们就像验证集。你有些做对、有些做错,据此你调整了自己对该主题的基础理解,也就是改进了模型。现在,如果你反复做同一份带回家的作业,你最终会过拟合它,对吧?这就是为什么我们在若干轮迭代后会引入一个新的验证集。期末考试那天的卷子就是你的测试集。如果你考得好,太棒了!但如果你没考过,教授下次总不能把完全相同的卷子再给你一遍,对吧?因为你已经知道里面有什么了。当然,在测试集上评估模型时,模型本身永远不会“知道”那个集合里具体有哪些样本。但问题在于测试集已经被暴露了。你之前的评估必然会影响到此后在那个特定测试集上的任何评估。因此你必须始终只使用某个特定测试集一次。一旦用过,就把它合并回训练集和验证集,然后重新划分出一份全新的划分。如此重复。这就是你在机器学习中使用训练集、验证集和测试集的方法。136

本站内容仅供学习交流,版权归原作者所有。