数据集:拆分原始数据集

所有优秀的软件工程项目都会投入大量精力来 测试应用的最佳实践。同样,我们强烈建议您 机器学习模型以确定其预测的正确性。

训练集、验证集和测试集

您应该使用不同于这些示例的一组样本来测试模型 来训练模型。本课程将介绍 稍后,测试 与测试相比,可以更好地证明模型的适用性。 同一组样本。 您在哪里可以找到这些不同的示例?传统上,在机器学习领域, 可以通过拆分原始数据集获得这些不同的样本。您可能会 因此假设您应将原始数据集拆分为两个子集:

  • 训练集 模型训练所用的数据。
  • 一个测试集,用于评估 经过训练的模型。
图 8. 水平条分为两段:约 80%
            约为训练集,约为 20% 为测试集。
图 8.并非最佳分配比例。

 

练习:检查您的直觉

假设您在训练集上进行训练,然后基于测试集进行评估 进行多轮测试在每一轮中,您将使用测试集结果 指导如何更新超参数和特征集。你能不能 这种方法有什么问题吗?请仅选择一个答案。
多次重复此过程可能会导致模型 隐式适合测试集的特性。
是的!您使用同一测试集的频率越高, 模型与测试集紧密相关的可能性越高。 就像老师“教你应试”一样模型在无意中 与测试集相符,这可能会增加模型的难度, 来拟合真实数据。
这种方法没有问题。毕竟,你是在训练 然后使用单独的测试集进行评估。
实际上,这里存在一个细微问题。不妨想想 就会逐渐出现问题
这种方法的计算效率低下。不更改 超参数或特征集。
频繁进行测试成本高昂,但至关重要。不过, 测试的成本远低于额外训练的成本。正在优化 可以显著改善 模型质量,因此应始终将时间和计算资源投入到 来着手处理这些任务

将数据集划分为两个集合是个好主意, 更好的方法是将数据集划分为三个子集。 除训练集和测试集外,第三个子集是:

  • 验证集 在训练模型时对模型进行初始测试。
图 9.水平条分为三段:70% 的水平条分为三段,
            为训练集,15% 为验证集,15% 为验证集
            测试集
图 9.拆分效果好多了。

使用验证集评估训练集的结果。 反复使用验证集表明您的模型 请使用测试集来仔细检查模型。

下图展示了此工作流。 在图中,“Tweak model”是指对模型进行微调, 包括更改学习速率、添加或移除 从零开始设计全新的模型。 在此工作流结束时,您可以选择在测试集上获得最佳效果的模型。

图 10。包括以下阶段的工作流图:
            1.使用训练集训练模型。
            2. 使用验证集评估模型。
            3. 根据在验证集上获得的结果调整模型。
            4. 对模型 1、2 和 3 进行迭代,最终选择
               获得最好的结果。
            5. 确认测试集的结果。
图 10. 一个用于开发和测试的良好工作流。

图 10 所示的工作流程是最佳的,但即使是该工作流程, 测试集和验证集仍存在磨损。 也就是说,您越是利用相同的数据来制定决策, 超参数设置或其他模型改进,置信度越低 确保模型能够根据新数据做出良好预测。 因此,收集更多数据来“刷新”测试 和验证集。重新开始是一种很好的重置方式。

练习:检查您的直觉

您重排了数据集中的所有样本, 重排后的样本,分别用于训练、验证和测试 集。不过,测试集上的损失值非常低, 您怀疑是错误的。哪里可能出了问题?
测试集中的许多样本都与样本重复 在训练集中的权重。
可以。如果数据集包含大量冗余数据, 示例。我们强烈建议您从以下位置删除重复示例: 先选择测试集
训练和测试具有不确定性。有时,偶然 测试损失非常低。重新运行测试以确认 结果。
虽然每次运行时的损失都略有不同,但应该不会因此而发生变化 你认为自己在机器学习彩票中中奖的概率更高。
碰巧,测试集刚好包含 模型表现出色。
样本经过充分随机化处理,因此这种情况极有可能发生。

测试集的其他问题

如上个问题所示,重复的样本可能会影响模型评估。 将数据集拆分为训练集、验证集和测试集之后, 删除验证集或测试集中任何与以下实体重复的样本: 训练集中的样本。模型的唯一公平性测试是 新样本,而不是重复样本。

例如,假设一个模型预测某封电子邮件是否为垃圾邮件,该模型使用 主题行、电子邮件正文和发件人的电子邮件地址等功能。 假设您按 80-20 的拆分比例将数据分为训练集和测试集。 经过训练后,该模型在训练集和 测试集。您预计测试集的精确率较低,因此 再看一下数据,就会发现测试中的许多样本 与训练集中的样本重复。问题在于 忘记从输入的内容中清除同一垃圾邮件的重复条目 然后再拆分数据。不经意间,您训练了 测试数据。

总而言之,一个好的测试集或验证集满足 以下条件:

  • 足够大,可产生具有统计显著性的测试结果。
  • 代表整个数据集。也就是说, 与训练集具有不同特征的测试集。
  • 代表模型将遇到的真实数据 。
  • 训练集中没有重复的样本。

练习:检查您的掌握程度

假设单个数据集有固定数量的样本, 下列哪项陈述是正确的?
测试模型时,每个样本都会少使用一个样本 非常有用。
将样本划分为训练/测试/验证集是一种零和博弈。 这是一种核心权衡。
测试集中的样本数必须大于 验证集中的样本数量。
从理论上讲,验证集和测试测试应包含相同的 数量差不多的样本。
测试集中的样本数必须大于 验证集或训练集中的样本数量。
训练集中的样本数通常大于 验证集或测试集中的样本数量;不过, 对不同组合没有百分比要求
假设您的测试集包含足够的样本,可以执行 有统计显著性检验。此外,测试 测试集产生的损失很低。然而,该模型 在现实世界中表现得很糟糕您该怎么做?
确定原始数据集与现实数据之间的差异。
可以。即使是最好的数据集,也只是真实数据的快照; 底层容器 标准答案 会随着时间的推移而变化虽然测试集与您的 训练集足够好,能够提供良好的模型质量, 数据集可能与真实数据不充分匹配。 您可能需要针对新数据集重新训练和重新测试。
针对同一测试集重新测试。测试结果可能 还真是个奇怪的星球。
尽管重新测试的结果可能略有不同, 这个策略可能没什么用
测试集应包含多少个样本?
提供足够的样本,以生成具有统计显著性的检验结果。
可以。有多少样本?您需要开展实验。
至少占原始数据集的 15%。
15% 不一定是充分的样本。