很多机器学习入门者对测试集和验证集的似乎试集概念有所混淆,甚至很多机器学习开发工程师常常都会混淆这两个概念。没区因为当我们采用验证集的混淆和测时候,测试集好像和验证集实际上并没有多大区别,过验所以本文从学界定义到实践中的证集具体影响探讨验证集和测试集间的区别。 验证数据集(validation dataset)是似乎试集模型训练过程中留出的样本集,它可以用于调整模型的没区超参数和评估模型的能力。但测试数据集(test dataset)不同,混淆和测虽然同是过验模型训练过程中留出的样本集,但它是证集用于评估最终模型的性能,帮助对比多个最终模型并做出选择。似乎试集在开发机器学习系统时,没区我们对验证数据集及其与测试数据集的混淆和测区别存在诸多混淆。本文将介绍训练数据集(train dataset)、过验测试数据集和验证数据集的证集确切定义,以及如何在机器学习项目中使用这三种数据集。 通过阅读本文,我们将了解: 专家对验证数据集的定义 本节,我们将了解部分***教科书和参考文献如何定义训练数据集、测试数据集和验证数据集及其区别。 通常情况下,「验证数据集」指模型训练过程中留出的样本集,可与「测试数据集」这个术语互换。在训练数据集上对模型能力进行评估得到的结果存在偏差。因此,用留出的样本对模型能力进行评估得出的结果偏差更小。我们通常称之为使用训练集测试集划分方法(train-test split approach)进行算法评估。 ——Gareth James, et al., Page 176, An Introduction to Statistical Learning: with Applications in R, 2013. 在 Kuhn 和 Johnson 的著作《应用预测建模》(Applied Predictive Modeling)一书中,我们可以看到作者认为「验证数据集」和「测试数据集」这两个词语可以互换。他们在实例中明确指出,必须在留出的数据集上进行最终模型评估,无论评估目的是训练模型还是调整模型参数。 ——Max Kuhn and Kjell Johnson, Page 67, Applied Predictive Modeling, 2013 传统情况下,对最终模型进行性能评估的数据叫作「测试集」。Russell 和 Norvig 在 AI 教科书《人工智能:一种现代方法》中再次强调了保持测试集完全独立的重要性。他们认为,以任何形式使用测试集中的信息都是一种「窥探」(peeking),因此他们建议封存测试集,直到模型调整全部完成再作为***的评估。 模型窥探预留数据集是服务器租用使用测试集选择并评估假设函数的后果。若要避免窥视,必须将测试集单独留出,直到模型学习过程完全结束,才能最终对模型假设进行独立的评估。(如果你对评估结果不满意,想返回寻找更好的模型假设,那么你必须获取并封存一组全新的测试集。) —Stuart Russell and Peter Norvig, page 709, Artificial Intelligence: A Modern Approach, 2009 (3rd edition) 重要的是,Russel 和 Norvig 认为用于模型拟合的训练数据集可以进一步划分成训练集和验证集。验证集是训练数据集的子集,用于对模型能力进行初步评估。 如果测试集被封存后,你仍想在未知数据上进行模型性能评估,来选择性能好的模型假设,那么你需要将可用数据(不包含测试集)分为训练集和验证集。 —Stuart Russell and Peter Norvig, page 709,Artificial Intelligence: A Modern Approach, 2009 (3rd edition) 该领域的其他教科书级的著作也佐证了此定义。Ripley 的著作《模式识别与神经网络》(Pattern Recognition and Neural Networks)中的术语表就是一个经典实例。具体来说,训练集、验证集和测试集的定义如下: 验证集:用来调整分类器超参数的样本集,如在神经网络中选择隐藏层神经元的数量。 测试集:仅用于对已经训练好的分类器进行性能评估的样本集。 —Brian Ripley, page 354, Pattern Recognition and Neural Networks, 1996 这些是数据集推荐的定义和用法。重申 Ripley 的术语定义之后,让我们来继续讨论「测试集」和「验证集」在机器学习建模过程中的常见混淆。 —Subject: What are the population, sample, training set, design set, validation set, and test set? 训练数据集、验证数据集和测试数据集的定义 为了强调上文中专家的研究结果,本节为这三个术语提供明确的定义。 我们可以通过下列伪代码具体来看它们的定义: 以下是额外需要理解的内容: 只有验证数据集远远不够 在未知数据上对模型性能进行评估还有其他方式。一个常见的实例是使用 K-折交叉验证(k-fold cross-validation)来调整模型超参数,而不是使用单独的验证数据集。Kuhn 和 Johnson 在「Data Splitting Recommendations」一章中指出使用单独的「测试集」(或验证集)的局限性。 如前所述,k 折交叉验证是一种足以取代单独、独立测试集的技术: Max Kuhn 和 Kjell Johnson 等人还推荐了适用于小规模样本的 10-折交叉验证,其偏差低、性能评估变化小;他们还推荐适用于模型性能比较的自助法(bootstrap method),该方法性能评估变化小。对于规模稍大的样本集,他们同样推荐 10-折交叉验证方法。 验证数据集和测试数据集会淡化 很可能你再也不会在应用机器学习中看到训练数据集、验证数据集和测试数据集。 当实践者选择在训练数据集中使用 k-折交叉验证方法调整模型超参数时,「验证集」的概念就已经淡化了。 我们可以通过以下为代码具体来看: 结语 在本教程中,你会了解「验证数据集」和「测试数据集」中的很多谬误,以及在评估机器学习模型的能力时如何正确地区分这些术语。 具体来说: 原文:http://machinelearningmastery.com/difference-test-validation-datasets/ 【本文是专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】 戳这里,看该作者更多好文