神经网络看不见的数据性能

数据挖掘 神经网络 训练 表现
2022-02-11 18:01:19

我最近开始涉足神经网络,遇到了一个很奇怪的情况(至少在我有限的知识范围内)。

我使用 NN 的问题是一个回归问题,它试图预测 FMCG 中特定类型促销的产品销量。

尽管数据不是严格的时间序列,但它仍然具有一些与时间相关的属性,例如预测可能依赖于去年的类似促销(我使用特征工程对其进行了建模)。

现在我遇到的问题:

我获取了 2015-2017 年的数据,通过添加少量噪声来增强它,对其进行洗牌,然后通过神经网络运行它(我认为架构并不重要,但如果是,请告诉我,我会尝试发表它)。

  • 优化器:衰减的亚当
  • 损失函数:体积加权映射
  • 验证集:随机选择 20% 的数据

网络训练良好,错误率低至 8%。训练集和验证集的错误一起减少,并不表示过度拟合。

但更重要的是,当我将算法应用于新的未见数据(2018 年上半年)时,错误率上升到 55%。.

我尝试在谷歌上研究这个问题,但没有发现任何有用的东西。这里发生了什么?难道我做错了什么?

4个回答

我终于弄清楚了问题所在。我只是将其发布为答案,以便如果有人遇到同样的问题,他们可以在正确的方向上找到线索..

这是一个数据泄露的问题。我对数据进行了扩充,但我在训练验证拆分之前对其进行了扩充,因此在验证和训练集中存在很多类似的情况,从而提高了性能。

当我只扩充训练集并将验证集专门用于该方法时,陌生感消失了。

现在验证准确度和测试准确度是可比的。

您是否将“原始”数据拆分为训练/开发/测试?如果没有,请尝试将您的数据分成三部分。在您的训练集上训练模型,在您的开发集上调整您的超参数,并在测试集上测试您的网络。验证错误不会给出无偏的错误,因为超参数已针对它进行了调整。这就是为什么你应该总是在给定的测试集上测试你的模型。如果测试集的错误也很低,我猜你还有另一个问题:

在不太了解您的方法并假设您没有错误的情况下,我的猜测是高错误是因为您的验证和测试集来自不同的分布。我假设 2015-2017 年的销售额可能与 2018 年的销售额有很大不同。

您还应该看看Andrew Ng 对这个特定问题的解释。

我很高兴看到你解决了你的问题。因此,只需在此处添加所有出色的答案,当您的验证技术失败时,也可能会出现此类问题。有时会发生看不见的数据(测试数据;不属于您的训练集),而您的训练数据在特征分布上有很多差异。在这种情况下,您的验证集分数并不是一个很好的指标,因为您的验证集是您的训练集的一部分。如果数据之间的特征分布之间的相似度很高,那么您的常规验证技术就可以工作。如果不是,我通常会使用Adversarial Validation
它有助于选择那些与测试集最相似的训练示例作为验证。

以下是 fastml 的相同链接:

第一部分

第二部分

希望这可以帮助 :)

这被称为过拟合问题。您应该考虑使用一些正则化方法,例如 dropout、权重衰减和数据增强。在我看来,我们通常会在金融数据集的情况下看到这个问题。