我的问题是朴素贝叶斯在训练集上表现良好但在测试集上表现不佳的潜在原因是什么?
我正在使用20news dataset的变体。数据集包含文档,这些文档表示为没有元数据的“词袋”。我的目标是将每个文档分类为 20 个标签中的 1 个。我在训练数据上的错误率是 20%,但我在测试数据上的错误率是 90%(相比之下,猜测的错误率是 95%)。出于某种原因,我的分类器为测试集中的几乎所有文档预测第 16 类。在火车组中不会发生此问题。此外,这个问题在不同的训练/测试拆分中仍然存在。我试图弄清楚我做错了什么。
以下是我考虑过的一些事情:
- 朴素贝叶斯是否过度拟合训练集?如果正确实施朴素贝叶斯,我认为它不应该像这样在它被认为适合(文本分类)的任务上过度拟合。
- 我的火车/测试分开不好吗?我尝试以不同的方式拆分数据,但似乎没有什么不同。现在,我通过将随机 90% 的文档样本放入训练集中并将其余样本放入测试集中来拆分数据 - 分别针对每个标签。
- 数值精度问题?我已经在对数概率中实现了计算,但无论如何,我希望这个问题也会在训练集中体现出来。
- 看不见的单词有问题吗?对于训练集和测试集,相对于特定新闻组的未见词的比例相同,均为 20%。
- 拉普拉斯平滑问题?我不确定为这项任务实施拉普拉斯平滑的合适方法是什么,所以我尝试了多种方法。令我惊讶的是,它们都产生了非常相似的结果。
- 数据集不平衡?看起来不像。标签为 16 的文档中的唯一词大约与其他类别中的一样多。每个标签的文档数量也大致均匀。
编辑:原来我有一个实现错误。我不会在这里详细介绍它,因为它不太可能帮助任何有类似问题的人。