当我在 Matlab 中使用神经网络工具箱时,我发现这很令人困惑。
它将原始数据集分为三个部分:
- 训练集
- 验证集
- 测试集
我注意到在许多训练或学习算法中,数据通常分为两部分,训练集和测试集。
我的问题是:
- 验证集和测试集有什么区别?
- 验证集真的特定于神经网络吗?或者它是可选的。
- 更进一步,在机器学习的背景下,验证和测试之间有区别吗?
当我在 Matlab 中使用神经网络工具箱时,我发现这很令人困惑。
它将原始数据集分为三个部分:
我注意到在许多训练或学习算法中,数据通常分为两部分,训练集和测试集。
我的问题是:
一组用于学习的示例:拟合分类器的参数 在多层感知器 (MLP) 的情况下,我们将使用训练集通过反向传播规则找到“最佳”权重
一组用于调整分类器超参数的示例 在 MLP 案例中,我们将使用验证集来找到隐藏单元的“最佳”数量或确定反向传播算法的停止点
一组仅用于评估完全训练分类器性能的示例 在 MLP 案例中,我们将在选择最终模型(MLP 大小和实际权重)之后使用测试来估计错误率 在评估最终模型之后在测试集上,你绝不能进一步调整模型!
由于验证集用于选择最终模型,因此对验证数据的最终模型的错误率估计会有偏差(小于真实错误率)更远!
来源:模式分析简介,Ricardo Gutierrez-OsunaTexas A&M University,Texas A&M University
通常,要执行监督学习,您需要两种类型的数据集:
在一个数据集(您的“黄金标准”)中,您拥有输入数据以及正确/预期的输出;该数据集通常由人工或通过以半自动方式收集一些数据来适当准备。但是您必须在此处获得每个数据行的预期输出,因为您需要它来进行监督学习。
您要将模型应用到的数据。在许多情况下,这是您对模型输出感兴趣的数据,因此您还没有任何“预期”输出。
在执行机器学习时,您可以执行以下操作:
验证阶段通常分为两部分:
因此分离到 50/25/25。
如果您不需要从几种竞争方法中选择合适的模型,您可以重新划分您的集合,您基本上只有训练集和测试集,而不执行训练模型的验证。然后我个人将它们划分为 70/30。
另请参阅此问题。
我在计算机科学领域的 5 年经验告诉我,没有什么比简单更好的了。
训练/交叉验证/测试数据集的概念就是这么简单。当您有一个大型数据集时,建议将其拆分为 3 个部分:
训练集(原始数据集的 60%):用于构建我们的预测算法。我们的算法试图调整自己以适应训练数据集的怪癖。在这个阶段,我们通常会创建多个算法,以便在交叉验证阶段比较它们的性能。
交叉验证集(原始数据集的 20%):该数据集用于比较基于训练集创建的预测算法的性能。我们选择性能最好的算法。
测试集(原始数据集的 20%):现在我们选择了首选的预测算法,但我们还不知道它将如何在完全看不见的真实数据上执行。因此,我们将我们选择的预测算法应用到我们的测试集上,以了解它的执行情况,以便我们了解我们的算法在看不见的数据上的性能。
重要的是要记住,不建议跳过测试阶段,因为在交叉验证阶段表现良好的算法并不意味着它真的是最好的,因为算法是根据交叉验证来比较的。验证集及其怪癖和噪音......
在测试阶段,目的是看看我们的最终模型在野外如何处理,所以如果它的性能很差,我们应该从训练阶段开始重复整个过程。
在要求您做出决定的每一步(即从多个选项中选择一个选项),您必须有一个额外的集合/分区来衡量您选择的准确性,这样您就不会简单地选择最有利的随机结果和将分布的尾部误认为是中心1。左派是悲观主义者。右派是乐观主义者。中心是实用主义者。做一个实用主义者。
第 1 步)训练:每种类型的算法都有自己的参数选项(神经网络中的层数、随机森林中的树数等)。对于每个算法,您必须选择一个选项。这就是为什么你有一个训练集。
第 2 步)验证:您现在拥有一组算法。您必须选择一种算法。这就是为什么你有一个测试集。大多数人选择在验证集上表现最好的算法(没关系)。但是,如果你没有在测试集上衡量你表现最好的算法的错误率,而只是在验证集上衡量它的错误率,那么你就盲目地将“最佳可能场景”误认为“最可能场景”。这是灾难的秘诀。
第 3 步)测试:我想如果你的算法没有任何参数,那么你就不需要第三步了。在这种情况下,您的验证步骤将是您的测试步骤。也许 Matlab 没有要求您提供参数,或者您选择不使用它们,这就是您困惑的根源。
1在每一步都假设所有选项都相同(例如所有参数相同或所有算法相同)的假设(零假设)通常是有帮助的,因此我参考了分布。
2这张图不是我自己的。我从这个网站上拿了它:http ://www.teamten.com/lawrence/writings/bell-curve.png