我试图了解测试数据集是否可以用来选择一个经过训练的最终模型。让我们假设这个场景:
我首先分割了整个数据集: 70%的训练,30%的测试。然后我拟合了几个模型(假设NN,RandomForest,AdaBoost,.)在训练数据集上进行交叉验证,对超参数进行调优,以获得最佳的列车数据性能。我知道这些分数是有偏见的,因为我调整了这些数据上的超参数。
然后,使用测试数据集来获得对无偏数据的真实性能,并选择哪个模型的性能最好。
这是使用测试数据集的正确方式吗?一些混淆来自于测试数据集的internet定义:
用于对最终模型进行无偏评估的数据样本,适合于培训数据集。
似乎它应该只用于获得一个最后训练的模型的性能。我的老师告诉我,我不能根据测试数据集的分数来选择一个经过训练的模型,并引用了上面的定义。我很难相信她是对的。那么,应该使用哪个数据集来选择模型?
发布于 2019-01-01 18:52:45
谢谢你的回答。我和更多的人商量了一下,我想我已经接受了一个对我来说有意义的解释:
事实是,虽然可以像我一样使用“测试数据集”来选择模型,但它并不是真正意义上的“测试数据集”。因为我使用dataset来选择模型,所以分数不再是无偏的,因此它不再代表真实的准确性,而是多个模型之间的无偏相对分数。因此,我不应该称它为“测试数据集”,因为它不能显示真正的最终准确性。它可能被称为“验证2数据集”。
TLDR:“测试数据集”用于选择模型,但我不应该称之为“测试数据集”,因为它显示的是相对分数,而不是真正的最终模型准确性。
发布于 2018-12-27 15:53:06
你的老师是对的。测试数据集是不可见的数据。无法使用测试集选择最终模型。在竞争中,公平地说,测试数据集在提交最终的经过训练的模型之前是不会显示的。
要选择最终模型的超参数(例如激活函数、隐藏层数、单元数、学习率、辍学,.),您应该使用验证集。
发布于 2018-12-27 15:11:18
你的过程没问题。通过使用k折叠交叉验证,您还(反复)将培训集进一步划分为培训集和交叉验证集。该测试集可以用来估计实际的泛化误差。
正如我所理解的,您没有使用测试数据集来选择模型。
如果您没有使用k折叠交叉验证,并且使用“测试”集来选择模型,那么它仍然是正确的,但是“测试”集将是您的交叉验证集。你不能做的是估计真正的泛化误差。
顺便说一句,70-30似乎是一种激进的分裂;“这取决于”,但在这种情况下,90-10留下了大量的测试数据。
https://datascience.stackexchange.com/questions/43210
复制相似问题