当前位置: 首页 > 科技观察

看起来没什么区别,但是您是否混淆了验证集和测试集?

时间:2023-03-20 14:03:38 科技观察

许多机器学习初学者对测试集和验证集的概念感到困惑,甚至很多机器学习开发工程师也经常混淆这两个概念。因为我们在使用验证集的时候,测试集和验证集似乎并没有太大区别,所以本文从学术界的定义到具体在实践中的影响,来讨论验证集和测试集的区别.验证数据集是模型训练过程中留下的样本集,可以用来调整模型的超参数,评估模型的能力。但是测试数据集不同。虽然它是模型训练过程中留下的样本集,但是用来评估最终模型的性能,帮助比较多个最终模型并做出选择。在开发机器学习系统时,我们对验证数据集以及它们与测试数据集的区别有很多困惑。本文将介绍训练数据集(traindataset)、测试数据集和验证数据集的准确定义,以及如何在机器学习项目中使用这三个数据集。通过阅读本文,我们将了解:机器学习领域专家对训练数据集、测试数据集和验证数据集的定义。实践中验证和测试数据集之间的区别。哪些程序用于充分利用模型评估的验证和测试数据集。专家对验证数据集的定义在本节中,我们将了解一些最好的教科书和参考资料如何定义训练数据集、测试数据集和验证数据集及其差异。通常,术语“验证数据集”是指模型训练期间遗漏的样本集,可与术语“测试数据集”互换使用。在训练数据集上评估模型性能会产生有偏差的结果。因此,使用设定样本对模型能力的估计产生的结果偏差较小。我们通常将这种算法评估称为使用训练测试拆分方法。如果我们想评估使用特定数据学习方法对一系列观察的测试误差,那么验证集方法非常适合这项任务。它涉及将这些观察任意分成两部分:训练集和验证集(也称为保留集)。将模型拟合到训练集上,然后使用拟合模型对验证集中保存的数据样本进行预测。并定量计算模型验证误差,通常我们用MSE来评估错误率,评估生成的验证集错误率,也就是测试错误率。——GarethJames,etal.,Page176,AnIntroductiontoStatisticalLearning:withApplicationsinR,2013.在Kuhn和Johnson的《应用预测建模》(AppliedPredictiveModeling)》一书中,我们可以看到作者认为“术语“验证数据集”和“测试数据集”可以互换使用。它们在示例中明确指出,最终模型评估必须在设置数据集上进行,评估的目的是训练模型还是调整模型参数。理想情况下,模型评估应该在不用于模型构建或微调的样本上进行,这样可以获得模型效率的无偏评估。所以如果我们有大量可用数据,我们可以预留用于最终模型评估的样本集的一部分。训练数据集是指建立模型时使用的样本集,而测试数据集或验证数据集用于评估模型性能。——MaxKuhn和KjellJohnson,第67页,应用预测iveModeling,2013传统上,用于评估最终模型性能的数据称为“测试集”。在AI教科书《人工智能:一种现代方法》中,Russell和Norvig再次强调了保持测试集完全分离的重要性。他们认为,以任何形式使用测试集中的信息都是一种“窥视”,因此他们建议密封测试集,直到模型调整完全完成后再作为最终评估。模型侦听阻止数据集是使用测试集来选择和评估假设函数的结果。为避免偷看,在对模型假设进行最终独立评估之前,必须将测试集搁置一旁,直到模型学习过程完全完成。(如果你对评估结果不满意,想回头寻找更好的模型假设,那么你必须获取并归档一套新的测试集。)—StuartRussell和PeterNorvig,第709页,人工智能:一种现代方法,2009(第3版)重要的是,Russell和Norvig认为用于模型拟合的训练数据集可以进一步分为训练集和验证集。验证集是训练数据集的一个子集,用于对模型的能力进行初步评估。如果测试集存档后,你还想对未知数据进行模型性能评估,选择性能较好的模型假设,那么你需要将可用数据(不包括测试集)划分为训练集和验证集.—StuartRussell和PeterNorvig,第709页,人工智能:一种现代方法,2009年(第3版)该领域的其他教科书级著作也证实了这一定义。Ripley的书《模式识别与神经网络》(PatternRecognitionandNeuralNetworks)中的词汇表就是一个典型的例子。具体来说,训练集、验证集和测试集的定义如下:训练集:用于学习的样本集,用于分类器参数的拟合。验证集:用于调整分类器超参数的样本集,例如选择神经网络中隐藏层神经元的数量。测试集:仅用于训练分类器性能评估的样本集。—BrianRipley,第354页,模式识别和神经网络,1996这些是推荐的数据集定义和用法。重申Ripley对该术语的定义后,让我们继续讨论机器学习建模中“测试集”和“验证集”的常见混淆。机器学习文献经常颠倒“验证集”和“测试集”的含义。这是人工智能研究中最明显的术语混淆。重点是神经网络文献中测试集的标准定义是说测试集不应该用来选择两个或多个网络中较好的一个,所以测试集上的误差是对泛化误差的无偏估计(假设测试集遵循与实际人口相同的分布)。—主题:什么是总体、样本、训练集、设计集、验证集和测试集?术语提供了明确的定义。训练数据集:用于模型拟合的数据样本。验证数据集:用于调整模型的超参数,提供对拟合模型的无偏评估。如果模型配置包括对验证集的调整,这种评估偏差会更大。测试数据集:在拟合后提供对最终模型的无偏评价。我们可以通过下面的伪代码看看它们的定义:#splitdatadata=...train,validation,test=split(data)#tunemodelhyperparametersparameters=...forparamsinparameters:model=fit(train)skill=evaluate(model,validation)#evaluatefinalmodelforcomparisonwithothermodelsmodel=fit(train)skill=evaluate(model,test)以下是需要理解的额外内容:验证数据集可能在其他形式的模型准备中发挥作用,例如特征选择。最终模型可以拟合训练数据集和验证数据集。只有验证数据集是不够的还有其他方法可以评估模型在未知数据上的性能。一个常见的例子是使用k折交叉验证来调整模型超参数,而不是使用单独的验证数据集。Kuhn和Johnson在“数据拆分建议”一章中指出了使用单独的“测试集”(或验证集)的局限性。如前所述,k折交叉验证足以替代单独的、独立的测试集:测试集是模型的单一评估,不能完全揭示评估结果的不确定性。将大型测试集拆分为测试集和验证集会增加模型性能评估中的偏差。拆分测试集样本量太小。模型可能需要每个可能的数据点来确定模型值。不同的测试集产生不同的结果,使得测试集具有很大的不确定性。重采样方法允许更合理地预测模型在未来样本上的性能。MaxKuhn和KjellJohnson等人。还推荐对小样本进行10折交叉验证,性能评估偏差小,变异小;他们还推荐使用bootstrap方法进行模型性能比较,执行评估变化不大。对于稍大的样本集,他们还推荐使用10折交叉验证方法。验证和测试数据集被稀释很可能你再也不会在应用机器学习中看到训练、验证和测试数据集了。当从业者选择使用k折交叉验证方法在训练数据集上调整模型超参数时,“验证集”的概念就被淡化了。我们可以通过下面具体看代码:#splitdatadata=...train,test=split(data)#tunemodelhyperparametersparameters=...k=...forparamsinparameters:skills=list()foriink:fold_train,fold_val=cv_split(i,k,train)model=fit(fold_train,params)skill_estimate=evaluate(model,fold_val)skills.append(skill_estimate)skill=summarize(skills)#evaluatefinalmodelforcomparisonwithothermodelsmodel=fit(train)skill=evaluate(模型,测试)在本教程中,您将了解“验证数据集”和“测试数据集”的诸多谬误,以及在评估机器学习模型的能力时如何正确区分这些术语。具体来说:以往专家学者在模型评估中对“训练数据集”、“验证数据集”和“测试数据集”给出了明确的定义。“验证数据集”主要用于调整超参数和数据准备时对模型进行评估,而“测试数据集”主要用于比较多个最终模型时进行评估。如果使用k折交叉验证等重采样方法,尤其是当重采样方法已经嵌套在模型验证中时,可能会淡化“验证数据集”和“测试数据集”的概念。原文:http://machinelearningmastery.com/difference-test-validation-datasets/【本文为《机器之心》专栏原文翻译,微信公众号《机器之心》(id:almosthuman2014)》]点这里,查看该作者更多好文