我试图了解机器学习中模型评估和验证的过程。具体来说,必须按什么顺序以及如何使用训练、验证和测试集。
假设我有一个数据集,我想使用线性回归。我在各种多项式次数(超参数)之间犹豫不决。
In 这篇维基百科文章,这似乎暗示顺序应该是:
- 将数据分为训练集、验证集和测试集
- 使用训练集来拟合模型(找到最佳参数:多项式的系数)。
-
然后,使用验证集来找到最佳的超参数(在本例中为多项式次数)(维基百科文章说:“成功地,拟合模型用于预测称为验证数据集的第二个数据集中的观测响应”)
- 最后,使用测试集对与训练集拟合的模型进行评分。
然而,这对我来说似乎很奇怪:如果您还没有选择超参数(在本例中为多项式),如何使您的模型与训练集相匹配?
我看到三种替代方法,我不确定它们是否正确。
第一种方法
- 将数据分为训练集、验证集和测试集
- 对于每个多项式次数,拟合模型与训练集并使用验证集为其评分。
- 对于得分最高的多项式次数,将模型与训练集进行拟合。
- 使用测试集进行评估
第二种方法
- 将数据分为训练集、验证集和测试集
- 对于每个多项式次数,使用交叉验证仅在验证集上对模型进行拟合和评分
- 对于得分最高的多项式次数,将模型与训练集进行拟合。
- 使用测试集进行评估
第三种方法
- 将数据拆分为只有两套:训练/验证集和测试集
- 对于每个多项式次数,使用交叉验证仅在训练/验证集上对模型进行拟合和评分
- 对于具有最佳分数的多项式次数,将模型与训练/验证集进行拟合。
- 使用测试集进行评估
所以问题是:
- 维基百科的文章是错误的还是我遗漏了什么?
- 我设想的三种方法是否正确?哪一个会更可取?还有比这三种方法更好的方法吗?
维基百科的文章并没有错;根据我自己的经验,这是机器学习新手经常感到困惑的地方。
有两种不同的方法可以解决该问题:
-
Either你使用显式的验证设置进行超参数搜索和调整
-
Or你使用交叉验证
所以,标准点是你总是把一部分数据放在一边test放;这样做的目的只是为了最终评估模型的性能(即不是来回和多次评估,因为在这种情况下,您将测试集用作验证集,这是不好的做法)。
完成此操作后,您可以选择是否剪切剩余数据的另一部分以用作单独的数据验证设置,或者您是否将继续进行交叉验证(在这种情况下,不需要单独和fixed需要验证集)。
因此,本质上,您的第一种方法和第三种方法都是有效的(并且是相互排斥的,即您应该选择要使用的方法)。第二个,正如您所描述的那样(仅在验证集中使用 CV?),当然不是(如上所述,当您选择使用 CV 时,您不会分配单独的验证集)。除了简要提及交叉验证之外,维基百科文章实际上描述的是您的第一种方法。
当然,哪种方法“更好”的问题不能在这种普遍性水平上得到回答;这两种方法确实有效,并根据具体情况使用。非常宽松地说,我想说在大多数“传统”(即非深度学习)机器学习设置中,大多数人选择交叉验证;但在某些情况下这是不切实际的(大多数深度学习设置,再次松散地说),人们会使用单独的验证集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)