我试图了解机器学习中模型评估和验证的过程。具体来说,必须以何种顺序以及如何使用训练,验证和测试集。
假设我有一个数据集,我想使用线性回归。我在各种多项式(超参数)之间犹豫不决。
在this wikipedia article中,似乎暗示该顺序应为:
但是,这对我来说似乎很奇怪:如果您还没有选择超参数(在这种情况下是多项式),那么如何用训练集拟合模型?
我看到了三种替代方法,我不确定它们是否正确。
所以问题是:
答案 0 :(得分:1)
维基百科实际上是您的第一种方法。
1将数据分为训练集,验证集和测试集
2使用 训练集以适合模型(找到最佳参数:系数 的多项式)。
那只是意味着您使用训练数据来拟合模型。
3之后,使用验证集找到最佳的超参数 (在这种情况下,是多项式)(维基百科文章说: “随后,拟合模型用于预测 第二个数据集中的观测值称为验证数据集“)
这意味着您可以使用验证数据集,使用先前(在训练集上)经过训练的模型来预测其值,从而获得模型在看不见的数据上的性能得分。
对于要查看的所有超参数组合(如果要使用其他多项式,请重复执行步骤2和3)以获得每个超参数组合的得分(例如准确度)。
最后,使用测试集对适合训练的模型进行评分 设置。
在这个stackexchange问题中很好地解释了为什么需要验证集 https://datascience.stackexchange.com/questions/18339/why-use-both-validation-set-and-test-set
最后,您可以使用三个方法中的任何一个。
方法:
最快,因为您只需为每个超参数训练一个模型。 同样,您也不需要其他两个数据。
方法:
最慢,因为您要训练k倍k个分类器以及最后一个带有所有训练数据的分类器,以针对每种超参数组合进行验证。
您还需要大量数据,因为您将数据拆分了三遍,第一部分又以k倍折叠。
但是这里您的结果差异最小。巧合地获得k个好的分类器和好的验证结果几乎是不可能的。第一种方法更有可能发生这种情况。交叉验证也不太可能过拟合。
方法:
的优缺点是在其他两者之间。在这里,过拟合的可能性也较小。
最后,这取决于您拥有多少数据,以及是否进入更复杂的模型(例如神经网络),拥有和愿意花费多少时间/计算能力。
答案 1 :(得分:1)
维基百科的文章没有错;根据我自己的经验,这是ML新手经常感到困惑的地方。
有两种解决问题的方法:
因此,标准点是,您总是将部分数据保留为 test 设置;仅在最终评估模型的性能时才使用此方法(即不进行前后评估和多次评估,因为在这种情况下,您将测试集用作验证集,这是不正确的做法)。
完成此操作后,您可以选择是否要削减剩余数据的另一部分以用作单独的 validation 集,还是选择进行交叉验证(在这种情况下,不需要单独的和固定的验证集)。
因此,从本质上讲,您的第一种和第三种方法都是有效的(并且是互斥的,即您应该选择要使用的一种)。正如您所描述的那样,第二个验证码(仅在验证集中提供CV?)当然不是(如前所述,当您选择使用CV时,您不会分配单独的验证集)。除了简要说明交叉验证之外,Wikipedia文章实际上描述的是您的第一种方法。
在那种普遍性水平上,当然不能回答哪种方法“更好”的问题。两种方法确实有效,并且根据情况使用。松散地说,我想说的是,在大多数“传统”(即非深度学习)机器学习设置中,大多数人选择交叉验证。但是在某些情况下,这是不切实际的(大多数深度学习设置,再次是松散地说),人们会使用单独的验证集。