我的问题是,朴素贝叶斯在一组火车上表现出色,但在测试集上表现不佳的潜在原因是什么?
我正在处理20新闻数据集的一个变体。数据集有文档,这些文档表示为“单词袋”,没有元数据。我的目标是将每个文档分类为20个标签中的一个。我在训练数据上的错误率是20%,但是我在测试数据上的错误率是90% (作为比较,猜测会产生95%的错误率)。出于某种原因,我的分类器对测试集中的几乎所有文档都进行了16级预测。在火车组中,这个问题不会发生。此外,这个问题仍然存在于不同的列车/测试分割。我在努力找出我做错了什么。
以下是我考虑过的一些事情:
编辑:原来我有一个实现错误。我不会在这里详述它,因为它不太可能对任何有类似问题的人有所帮助。
发布于 2018-01-30 21:58:12
我试着逐点回答你的问题。也许你已经解决了你的问题,但你的问题是有趣的,所以也许其他人可以从这个讨论中受益。
朴素贝叶斯已经证明在文档分类方面表现良好,但这并不意味着它不能过分适合数据。任务、文档分类和数据之间存在差异。即使朴素的Bayes被正确地实现,也可能发生过度拟合。
很好,在你的训练和测试集中,你的班级分布是一样的。你在使用交叉验证吗?也许尝试它是因为,即使它是罕见的,它可能会发生,你只是得到不幸的分裂,因为一些种子。
你说得对,如果这是个问题的话,它也会在训练中显示出来。
这似乎不是问题所在。你也许可以通过使用词干或柠檬化来降低这个百分比。
拉普拉斯平滑是有用的,特别是当你没有很多数据,你需要考虑一些不确定性。对于这个数据集,这似乎不是一个问题,正如您所经历的类似结果所示。
文件的长度是一样的吗?因为标签16可能只是包含更大的文档,因此具有更大的单词频率。它们也可能包含非常常见的词语。看一看每个班级中单词的柱状图会很有趣。这对于理解标签16是否与其他标签有很大的不同是非常有用的。
发布于 2017-03-16 08:08:59
文本挖掘是机器学习应用程序中一个相当棘手的领域,因为您所拥有的只是“非结构化和半结构化数据”,而预处理和特征提取步骤非常重要。文本挖掘手册是这一研究领域的无价之宝。但为了更具体地说明你的情况,我可以提出两个答案:
P(y|x_i)的所有单个概率。如果至少有一个零概率,你的最终答案将是零,不管其他的反向观察概率是多少。如果您已经自己实现了该算法,请尝试使用MATLAB、Python学习库或数据挖掘软件(如KNIME和RapidMiner )中已经构建的工具。在实现朴素贝叶斯算法时,他们巧妙地处理了这些实际问题。发布于 2017-02-14 02:15:46
除非你在其他相关的文件上这样做,否则你不会删除终止语。如果标签16充分利用了这样的功能,这是对这种结果的合理解释。
另一方面(除非再次在其他文件上这样做),你并没有将单词减少到它们的语素。不这样做可能会导致这种反常现象。查看Nltk文档来学习如何做这样的事情。
https://datascience.stackexchange.com/questions/16817
复制相似问题