为什么只有三个分区?(训练、验证、测试)

机器算法验证 机器学习 模型选择 数据挖掘
2022-01-22 03:16:04

当您尝试将模型拟合到大型数据集时,常见的建议是将数据划分为三个部分:训练、验证和测试数据集。

这是因为模型通常具有三个“级别”的参数:第一个“参数”是模型类(例如 SVM、神经网络、随机森林),第二组参数是“正则化”参数或“超参数”(例如套索惩罚系数、内核选择、神经网络结构)和第三组通常被认为是“参数”(例如协变量的系数。)

给定模型类和超参数的选择,通过选择最小化训练集误差的参数来选择参数。给定一个模型类,通过最小化验证集上的误差来调整超参数。一个是根据测试集上的表现来选择模型类。

但是为什么不增加分区呢?通常可以将超参数分成两组,并使用“验证 1”来拟合第一组,使用“验证 2”来拟合第二组。或者甚至可以将训练数据/验证数据拆分的大小视为要调整的超参数。

这在某些应用程序中是否已经成为一种常见做法?是否有任何关于数据优化分区的理论工作?

2个回答

首先,我认为您对三个分区的作用有误。您不会根据测试数据做出任何选择。您的算法会根据训练数据调整其参数。然后,您在验证数据上运行它们以比较您的算法(及其训练参数)并决定获胜者。然后,您在测试数据上运行获胜者,以预测它在现实世界中的表现。

您不对训练数据进行验证,因为这会使您的模型过拟合。您不会停留在验证步骤的获胜者得分上,因为您一直在反复调整事物以在验证步骤中获得获胜者,因此您需要一个独立的测试(您没有专门针对该测试进行调整)来给您一个了解您在当前领域之外的表现。

其次,我认为这里的一个限制因素是您拥有多少数据。大多数时候,我们甚至根本不想将数据分成固定的分区,因此 CV。

这是一个有趣的问题,我发现@Wayne 的回答很有帮助。

据我了解,将数据集划分为不同的分区取决于作者的目的,以及模型在实际应用中的要求。

通常我们有两个数据集:训练和测试。训练用于查找模型的参数,或拟合模型。测试用于评估模型在看不见的数据(或真实世界数据)中的性能。

如果我们只做一步训练,很明显有一个训练和一个测试(或验证)过程。

但是,这样做可能会在一次使用一个数据集训练模型时引发过拟合问题。这可能会导致模型在现实世界问题中的不稳定性。解决此问题的一种方法是交叉验证 (CV) 训练数据集中的模型。这意味着,我们将训练数据集划分为不同的折叠,保留一个用于测试与其他折叠一起训练的模型。现在,获胜者是在整个 CV 过程中损失最小(基于我们自己的目标函数)的人。通过这样做,我们可以确保将训练过程中过度拟合的可能性降到最低,并选择正确的获胜者。测试集再次用于评估看不见的数据中的获胜者。