为什么将数据分为训练和测试集还不够


18

我知道,为了访问分类器的性能,我必须将数据分为训练/测试集。但是读这个

在评估估算器的不同设置(“超参数”)(例如必须为SVM手动设置的C设置)时,仍然存在测试集过拟合的风险,因为可以对参数进行调整,直到估算器达到最佳性能为止。这样,有关测试集的知识可以“渗入”模型,并且评估指标不再报告泛化性能。为了解决此问题,可以将数据集的另一部分保留为所谓的“验证集”:对训练集进行训练,然后对验证集进行评估,以及实验何时成功,可以对测试集进行最终评估。

我看到引入了另一个(第三个)验证集,这是通过在超参数调整期间对测试集进行过度拟合来证明的。

问题是我无法理解这种过度拟合的外观,因此无法理解第三组的合理性。


2
我认为,这里的许多困惑来自“验证”一词的2或3个不同的含义。交叉验证中的验证主要只是一个无替换拆分过程的名称。引用文本中设置的“验证”将更好地理解为“调整”或“优化集”。而“验证”(例如在工程学或分析化学中)是指证明给定的最终方法适合其目的-通过“测试”集完成(模拟,近似)。(对我来说,测试听起来比验证要少得多……)
cbeleites支持Monica 2015年

Answers:


17

即使您仅在训练数据上训练模型,您仍在基于测试集优化超参数(例如,用于SVM的)。因此,您对性能的估计可能是乐观的,因为您实际上是在报告最佳情况下的结果。正如该站点上的某些人已经提到的那样,优化是统计中万恶之源C

性能评估应该始终对完全独立的数据进行。如果您要基于测试数据优化某个方面,那么您的测试数据将不再独立,您将需要验证集。

解决此问题的另一种方法是通过嵌套的交叉验证,该交叉验证由彼此包裹的两个交叉验证过程组成。内部交叉验证用于调整(以估计给定的一组超参数的性能,并对其进行优化),外部交叉验证用于估计整个机器学习管道的泛化性能(即,优化超参数+训练最终模型) )。


我可能是错的,但是测试集不仅用于调整超参数,而且还用于比较不同类型的技术,例如,如我在回答中所指出的,SVM与LDA或随机森林的性能比较。

@fcoppens是的,当然可以。我没有明确提到这一点,但是那当然也适合该步骤。
马克·克莱森

1
更一般而言,此处的调整或优化是任何类型的数据驱动(通过内部交叉验证)过程。
cbeleites支持Monica 2015年

@MarcClaesen我有一个问题。如果我有2个不同的超参数值,并且将这2个模型拟合到训练集上,然后将它们应用到测试集上,那么我在测试集上获得的错误率应该是真实预测误差率的无偏估计量。这两个模型?因为如果您现在给我另一个独立的测试数据集,那么这个新的测试数据集实质上与先前的测试集相同。因此,如果一个模型具有更好的测试分数,则在新的测试数据集上它也应该胜过其他模型。为什么我们需要验证集?
KevinKim

“如果您基于测试数据优化某些方面,那么您的测试数据将不再独立,您将需要验证集。” 那
很有

11

我认为以这种方式思考事情最容易。交叉验证用于两件事:调整模型/算法的超级参数,以及评估模型/算法的性能

将首次使用视为算法实际训练的一部分。例如,交叉验证以确定GLM的正则化强度是建立GLM最终结果的一部分。这种使用通常称为内部交叉验证。由于仍在设置(超)参数,因此调整集损耗并不是衡量实际算法性能的重要指标。

交叉验证的第二个用途是使用在生成模型的整个过程中保留的数据来测试其预测能力。此过程称为外部交叉验证

请注意,内部验证可能是生成模型的过程的一部分,因此在许多情况下,内部和外部交叉验证都是必需的。


就个人而言,我不会使用“外部交叉验证”这一短语,因为我将交叉验证看作是从训练集中反复分离出不同的验证集以进行模型选择和调整之用。您无法对测试集进行有意义的重复操作,因为这是将来用来判断最终模型性能的未知数据的一次性代理。
亨利

3
亨利,我认为您不了解外部交叉验证。您可以“使用测试集重复执行此操作”,重复保留一部分完整数据以用于测试目的,同时对其余部分执行完整的训练过程(其中可能包括内部交叉验证)。外部交叉验证通常仍会以折叠方式完成,并允许所有原始数据在某个时候进入测试集中。
jlimahaverford

αα

2

在模型构建期间,您可以在训练样本训练模型。请注意,您可以训练不同的模型(即,不同的技术(例如SVM,LDA,随机森林等)或具有不同调整参数值的相同技术或混合技术)。

在您训练的所有不同模型中,您必须选择一个,因此您使用验证样本来找到测试样本中误差最小的模型。

对于此“最终”模型,我们仍然必须估计误差,因此我们使用测试样本


1
我将在第二段和第三段中的措辞相反:我将使用验证集来找到最佳模型并调整其超参数(使用几个验证集对它进行划分,这些验证集对训练集进行交叉验证),一旦模型具有完成后,将其应用于测试集,以查看模型样本外性能的示例。
亨利

@亨利:好的,亨利,我认为阶段的标签不如其序列/内容重要,但您的发言对我来说很有意义,我将编辑文本,谢谢(+1),

1

交叉验证不能完全克服模型选择中的过度拟合问题,而只是减少了交叉验证。交叉验证错误取决于您使用的数据集。数据集越小,交叉验证误差就越大。

此外,如果您在模型选择中具有较高的自由度,则由于交叉验证标准过度拟合,存在模型表现不佳的危险。

因此,将数据分为2个集(又称为训练集和测试集)时,拆分是静态完成的。因此,有可能过度拟合训练集。但是,交叉验证集是通过不同的方法创建的,例如k折交叉验证,遗漏一交叉验证(LOOCV)等,可帮助确保消除2组分割的精确匹配奖励因此,减少了过度合身的机会。

这些是可以帮助您更好地理解的资源

因此,当您拥有更大的数据集而不是较小的数据集时,交叉验证将为您提供帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.