作为背景,我正在使用使用 Keras 构建的深度神经网络将输入分为 5 类。
目前的网络结构是:
- 输入层(~450 个节点)
- 密集层(750 个节点)
- 辍学层(750 个节点,辍学率 = 0.5)
- 密集层(5 个节点)
我遇到的问题是过度拟合。我的模型在保留测试集(我的训练集的一部分)上表现良好,准确率在 99% 左右。但是,当我希望将模型应用于未标记的数据时,它只能将大约 67% 的观察结果分类到任何类别中,甚至还没有考虑这些分类的正确性!
我认为问题可能与我的特征和训练集生成过程有关。我使用基于规则的字符串匹配方法生成了训练集。这产生了大约 360 万个观测值(占人口的 10%)的训练集。
但是,我的输入层的最大功能之一是嵌入用于生成训练集的相同文本。因此,匹配生成训练集的单词也被嵌入并用作特征。值得注意的是,每次观察该文本大约有 140 个字符,并且我匹配了该文本中的二元组(因此该文本中还有其他信息可以作为一项有用的功能)。
我将完全删除此功能,但这是与每个观察相关的最丰富的信息。
有没有办法在不完全删除该功能的情况下解决这个问题?
希望这是有道理的,并且很乐意提供更多说明。
简化解释:
- 我的模型在我的训练和测试集上表现良好。
- 在未标记的数据上表现不佳。
- 每个观察都与一个文本块相关联。
- 为了标记我的训练集,我在该文本上使用了字符串匹配。
- 文本也是一个特征(嵌入)。
- 这是否导致我在未标记数据上的表现不佳(模型学习那些字符串匹配?)。
- 如果是这样,我该怎么办?
编辑:也很高兴听到您是否认为问题出在其他地方。