由于与训练集生成规则相关的特征而过拟合

数据挖掘 机器学习 神经网络 特征工程 训练 过拟合
2021-10-04 16:19:02

作为背景,我正在使用使用 Keras 构建的深度神经网络将输入分为 5 类。

目前的网络结构是:

  • 输入层(~450 个节点)
  • 密集层(750 个节点)
  • 辍学层(750 个节点,辍学率 = 0.5)
  • 密集层(5 个节点)

我遇到的问题是过度拟合。我的模型在保留测试集(我的训练集的一部分)上表现良好,准确率在 99% 左右。但是,当我希望将模型应用于未标记的数据时,它只能将大约 67% 的观察结果分类到任何类别中,甚至还没有考虑这些分类的正确性!

我认为问题可能与我的特征和训练集生成过程有关。我使用基于规则的字符串匹配方法生成了训练集。这产生了大约 360 万个观测值(占人口的 10%)的训练集。

但是,我的输入层的最大功能之一是嵌入用于生成训练集的相同文本。因此,匹配生成训练集的单词也被嵌入并用作特征。值得注意的是,每次观察该文本大约有 140 个字符,并且我匹配了该文本中的二元组(因此该文本中还有其他信息可以作为一项有用的功能)。

我将完全删除此功能,但这是与每个观察相关的最丰富的信息。

有没有办法在不完全删除该功能的情况下解决这个问题?

希望这是有道理的,并且很乐意提供更多说明。


简化解释:

  • 我的模型在我的训练和测试集上表现良好。
  • 在未标记的数据上表现不佳。
  • 每个观察都与一个文本块相关联。
  • 为了标记我的训练集,我在该文本上使用了字符串匹配。
  • 文本也是一个特征(嵌入)。
  • 这是否导致我在未标记数据上的表现不佳(模型学习那些字符串匹配?)。
  • 如果是这样,我该怎么办?

编辑:也很高兴听到您是否认为问题出在其他地方。

1个回答

我会说,从正在发生的事情是可以预料的意义上说,没有“问题”。

首先,这是一个经常丢失的关键 ML 提醒:

  • 如果测试集不具有代表性(即与未标记的实例不相似),那么在测试集上表现良好是没有意义的
  • 如果训练数据未涵盖新情况,则添加更多训练数据无济于事

您说您使用字符串匹配规则创建了训练集,我假设这些规则类似于““按揭还款”是“住房”观察。正如你在评论中指出的那样。

由于您的模型将二元组视为输入,因此它找到了一种对您使用的字符串匹配规则进行逆向工程的方法也就不足为奇了。

为了改进您的模型,我会查看您的模型目前在未标记数据上犯了什么错误,这应该会为您提供不符合您的字符串匹配规则的训练实例。