# 模型表现不匹配问题（以及如何处理）

> 原文： [https://machinelearningmastery.com/the-model-performance-mismatch-problem/](https://machinelearningmastery.com/the-model-performance-mismatch-problem/)

#### 如果模型测试结果比训练更糟，该怎么办

评估机器学习模型时的过程是在训练数据上拟合和评估它们，然后验证模型在保留的测试数据集上具有良好的技能。

通常，在评估训练数据集上的模型时，您将获得非常有前途的表现，并且在评估测试集上的模型时表现较差。

在这篇文章中，您将发现遇到此常见问题时需要考虑的技巧和问题。

阅读这篇文章后，你会知道：

*   评估机器学习算法时可能出现的模型表现不匹配问题。
*   过拟合，代表性不足的数据样本和随机算法的原因。
*   如何加强你的测试设备，以避免问题。

这篇文章是基于一个读者问题;谢谢！保持问题的到来！

让我们开始吧。

![The Model Performance Mismatch Problem (and what to do about it)](img/3fab003d1d6fa4495ccc9deaf009e855.jpg)

模型表现不匹配问题（以及如何处理）
[Arapaoa Moffat](https://www.flickr.com/photos/arapaoaphotography/33705234080/) 的照片，保留一些权利。

## 概观

这篇文章分为4部分;他们是：

1.  模型评估
2.  模型表现不匹配
3.  可能的原因和补救措施
4.  更强大的测试工具

## 模型评估

在为预测性建模问题开发模型时，您需要一个测试工具。

测试工具定义了如何使用域中的数据样本来评估和比较预测性建模问题的候选模型。

构建测试工具的方法有很多种，而且没有一种方法可以用于所有项目。

一种流行的方法是使用一部分数据来拟合和调整模型，以及一部分用于在样本外数据上提供调整模型的技能的客观估计。

数据样本分为训练和测试数据集。使用诸如k折交叉验证的重采样方法在训练数据集上评估模型，并且可以将集合本身​​进一步划分为用于调整模型的超参数的验证数据集。

测试集被阻止并用于评估和比较调谐模型。

有关训练，验证和测试集的更多信息，请参阅帖子：

*   [测试和验证数据集有什么区别？](https://machinelearningmastery.com/difference-test-validation-datasets/)

## 模型表现不匹配

通过使用训练数据集，重采样方法将为您提供模型对未见数据的技能估计。

测试数据集提供了第二个数据点，理想情况下是模型预期执行情况的客观概念，证实了估计的模型技能。

如果训练数据集上的模型技能估计与测试数据集上的模型技能不匹配，该怎么办？

分数一般不匹配。我们确实期待一些差异，因为在超参数调整的情况下，训练数据集的一些小的过拟合是不可避免的，这使得训练分数变得乐观。

但如果差异令人担忧地大呢？

*   你信任哪个分数？
*   你还可以使用测试数据集比较模型吗？
*   模型调整过程是否失效？

在应用机器学习中这是一个具有挑战性且非常普遍的情况。

我们可以将此问题称为“_模型表现不匹配_”问题。

**注意**：模型表现中“_大差异_”的想法与您选择的表现指标，数据集和模型有关。我们不能客观地谈论一般的差异，只能说出你必须解释的相对差异。

## 可能的原因和补救措施

模型表现不匹配问题有很多可能的原因。

最终，您的目标是拥有一个您知道的测试工具，可以让您就哪个模型和模型配置作为最终模型做出正确的决策。

在本节中，我们将介绍可用于调查问题的一些可能原因，诊断和技术。

让我们看看三个主要方面：模型过拟合，数据样本的质量，以及学习算法的随机性。

### 1.模型过拟合

也许最常见的原因是你过度训练训练数据。

您已经找到了一个模型，一组模型超参数，一个数据视图，或这些元素的组合等等，恰好可以对训练数据集进行良好的技能评估。

使用k折交叉验证在某种程度上有所帮助。使用具有单独数据集的调整模型也会有所帮助。然而，可以在训练数据集上继续推进和过拟合。

如果是这种情况，测试技能可能更能代表所选模型和配置的真实技能。

诊断您是否过度训练训练数据集的一种简单（但不容易）的方法是获得关于模型技能的另一个数据点。在另一组数据上评估所选模型。例如，要尝试的一些想法包括：

*   尝试在测试数据集上对模型进行k折交叉验证评估。
*   尝试在训练数据集上拟合模型，并对测试和新数据样本进行评估。

如果你过度适合，你可以选择。

*   也许您可以废弃当前的训练数据集并收集新的训练数据集。
*   也许你可以用更软的方法将样本重新分成训练/测试，以获得新的训练数据集。

我建议您迄今为止获得的结果是可疑的，应该重新考虑。特别是你可能花了太长时间调整的那些。

过拟合可能是模型分数差异的最终原因，尽管它可能不是首先攻击的区域。

### 2.不具代表性的数据样本

您的训练或测试数据集可能是来自域的不具代表性的数据样本。

这意味着样本量太小或样本中的示例没有有效地“覆盖”在更广泛的领域中观察到的情况。

如果您看到嘈杂的模型表现结果，这可以很明显地发现。例如：

*   交叉验证分数差异很大。
*   测试数据集上类似模型类型的大差异。

此外，您将看到训练和考试成绩之间的差异。

另一个好的第二个测试是检查训练和测试集上每个变量的汇总统计量，最好是交叉验证折叠。您正在寻找样本均值和标准差的较大差异。

补救措施通常是从域中获取更大，更具代表性的数据样本。或者，在准备数据样本和分割时使用更多区别的方法。考虑分层k折交叉验证，但应用于输入变量，以试图除了分类变量的分布之外，还保持实值变量的总体均值和标准差。

通常，当我看到过拟合项目时，这是因为测试工具不像应该的那样健壮，而不是因为攀爬测试数据集。

### 3.随机算法

由于算法的随机性，您可能会看到模型分数的差异。

许多机器学习算法涉及随机分量。例如，神经网络中的随机初始权重，数据的混乱以及随机梯度下降中的梯度更新等等。

这意味着，每次在相同数据上运行相同算法时，使用不同的随机数序列，并且反过来，将产生具有不同技能的不同模型。

您可以在帖子中了解更多相关信息：

*   [在机器学习中拥抱随机性](https://machinelearningmastery.com/randomness-in-machine-learning/)

这个问题可以通过交叉验证的模型技能得分的变化来看出，就像拥有一个不具代表性的数据样本一样。

这里的不同之处在于可以通过重复模型评估过程来清除方差，例如，交叉验证，以控制训练模型的随机性。

这通常被称为多次重复k次交叉验证，并且在资源允许时用于神经网络和随机优化算法。

我有更多关于评估帖子中模型的方法：

*   [如何评估深度学习模型的技巧](https://machinelearningmastery.com/evaluate-skill-deep-learning-models/)

## 更强大的测试工具

通过设计一个强大的测试工具然后收集证据来证明您的测试工具确实是健壮的，可以尽早解决许多这些问题。

这可能包括在开始评估真实模型之前运行实验。实验如下：

*   训练/测试分裂的灵敏度分析。
*   交叉验证的k值灵敏度分析。
*   对给定模型行为的敏感性分析。
*   对重复次数的敏感性分析。

在最后一点，请看帖子：

*   [估计随机机器学习算法的实验重复次数](https://machinelearningmastery.com/estimate-number-experiment-repeats-stochastic-machine-learning-algorithms/)

您正在寻找：

*   交叉验证中测试之间评估得分的低方差和一致均值。
*   相关人口是指训练和测试集之间的模型得分。

如果需要，使用标准错误和显着性检验等统计工具。

使用现代且未经调整的模型，该模型在此类测试中表现良好，例如随机森林。

*   如果你发现训练和测试集之间技能分数的差异，并且它是一致的，那可能没问题。你知道会发生什么。
*   如果您在给定测试中测量平均技能分数的方差，则可以使用误差线来解释结果。

我甚至会说没有强大的测试工具，你实现的结果将是一团糟。你将无法有效地解释它们。在脆弱的测试工具的结果介绍中，将存在风险因素（或欺诈，如果您是学术人员）。并且再现性/稳健性是应用机器学习等数值领域中的一个大问题。

最后，避免过多使用测试数据集。一旦您有充分的证据表明您的线束是健壮的，请不要触摸测试数据集，直到最终模型选择。

## 进一步阅读

如果您希望深入了解，本节将提供有关该主题的更多资源。

*   [测试和验证数据集有什么区别？](https://machinelearningmastery.com/difference-test-validation-datasets/)
*   [在机器学习中拥抱随机性](https://machinelearningmastery.com/randomness-in-machine-learning/)
*   [估计随机机器学习算法的实验重复次数](https://machinelearningmastery.com/estimate-number-experiment-repeats-stochastic-machine-learning-algorithms/)
*   [如何评估深度学习模型的技巧](https://machinelearningmastery.com/evaluate-skill-deep-learning-models/)

## 摘要

在这篇文章中，您发现了模型表现不匹配问题，其中模型表现在训练和测试集之间差别很大，以及诊断和解决问题的技术。

具体来说，你学到了：

*   评估机器学习算法时可能出现的模型表现不匹配问题。
*   过拟合，代表性不足的数据样本和随机算法的原因。
*   如何加强你的测试设备，以避免问题。

你有任何问题吗？
在下面的评论中提出您的问题，我会尽力回答。