首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过度拟合朴素贝叶斯

过度拟合朴素贝叶斯
EN

Data Science用户
提问于 2017-02-07 20:07:00
回答 3查看 9.7K关注 0票数 8

我的问题是,朴素贝叶斯在一组火车上表现出色,但在测试集上表现不佳的潜在原因是什么?

我正在处理20新闻数据集的一个变体。数据集有文档,这些文档表示为“单词袋”,没有元数据。我的目标是将每个文档分类为20个标签中的一个。我在训练数据上的错误率是20%,但是我在测试数据上的错误率是90% (作为比较,猜测会产生95%的错误率)。出于某种原因,我的分类器对测试集中的几乎所有文档都进行了16级预测。在火车组中,这个问题不会发生。此外,这个问题仍然存在于不同的列车/测试分割。我在努力找出我做错了什么。

以下是我考虑过的一些事情:

  • 朴素的贝斯是否适合训练?如果朴素贝叶斯的实现是正确的,我认为它不应该过分适合这样的任务,它被认为适合(文本分类)。
  • 我的火车/考试分裂不好吗?我尝试过用不同的方式分割数据,但这似乎没有什么区别。现在,我将数据分割,将90%的随机文档样本放入火车集合,其余的放在测试集中--每个标签都是分开的。
  • 数值精度问题?我已经在日志概率中实现了计算,但无论如何,我希望这个问题也会出现在火车集合中。
  • 看不见的词有问题吗?对于一个特定的新闻组来说,看不见的单词的比例是相同的,在训练和测试中都是20%。
  • 拉普拉斯平滑的问题?我不知道为这个任务实现Laplace平滑的合适方法是什么,所以我尝试了多种方法。令我惊讶的是,它们都产生了非常相似的结果。
  • 不平衡数据集?看上去不像。标签16的文档中有大约与其他类相同的独特单词。此外,每个标签的文档数量大致相等。

编辑:原来我有一个实现错误。我不会在这里详述它,因为它不太可能对任何有类似问题的人有所帮助。

EN

回答 3

Data Science用户

发布于 2018-01-30 21:58:12

我试着逐点回答你的问题。也许你已经解决了你的问题,但你的问题是有趣的,所以也许其他人可以从这个讨论中受益。

  • 朴素的贝斯是否适合训练?如果朴素贝叶斯的实现是正确的,我认为它不应该过分适合这样的任务,它被认为适合(文本分类)。

朴素贝叶斯已经证明在文档分类方面表现良好,但这并不意味着它不能过分适合数据。任务、文档分类和数据之间存在差异。即使朴素的Bayes被正确地实现,也可能发生过度拟合。

  • 我的火车/考试分裂不好吗?我尝试过用不同的方式分割数据,但这似乎没有什么区别。现在,我将数据分割,将90%的随机文档样本放入火车集合,其余的放在测试集中--每个标签都是分开的。

很好,在你的训练和测试集中,你的班级分布是一样的。你在使用交叉验证吗?也许尝试它是因为,即使它是罕见的,它可能会发生,你只是得到不幸的分裂,因为一些种子。

  • 数值精度问题?我已经在日志概率中实现了计算,但无论如何,我希望这个问题也会出现在火车集合中。

你说得对,如果这是个问题的话,它也会在训练中显示出来。

  • 看不见的词有问题吗?对于一个特定的新闻组来说,看不见的单词的比例是相同的,在训练和测试中都是20%。

这似乎不是问题所在。你也许可以通过使用词干或柠檬化来降低这个百分比。

  • 拉普拉斯平滑的问题?我不知道为这个任务实现Laplace平滑的合适方法是什么,所以我尝试了多种方法。令我惊讶的是,它们都产生了非常相似的结果。

拉普拉斯平滑是有用的,特别是当你没有很多数据,你需要考虑一些不确定性。对于这个数据集,这似乎不是一个问题,正如您所经历的类似结果所示。

  • 不平衡数据集?看上去不像。标签16的文档中有大约与其他类相同的独特单词。此外,每个标签的文档数量大致相等。

文件的长度是一样的吗?因为标签16可能只是包含更大的文档,因此具有更大的单词频率。它们也可能包含非常常见的词语。看一看每个班级中单词的柱状图会很有趣。这对于理解标签16是否与其他标签有很大的不同是非常有用的。

票数 4
EN

Data Science用户

发布于 2017-03-16 08:08:59

文本挖掘是机器学习应用程序中一个相当棘手的领域,因为您所拥有的只是“非结构化和半结构化数据”,而预处理和特征提取步骤非常重要。文本挖掘手册是这一研究领域的无价之宝。但为了更具体地说明你的情况,我可以提出两个答案:

  • 如前所述,预处理步骤在这里起着非常重要的作用。在文本挖掘中,它很可能被困在维数的诅咒中,因为你可能说了大约1000个文档,但在一个数据集中却有超过15000个唯一的单词。诸如词干和引线、静态和动态停止和标点符号擦除等技巧都是为了解决这个问题。因此,预处理和特征提取并不是一种选择。这是必须的
  • 朴素贝叶斯模型是一种线性分类器。尽管这是一种非常流行的文本分类算法,但仍然存在着出现像您这样的问题的风险。主要原因可能是你的单词空间矩阵非常稀疏。您一定注意到了这样一个事实:在计算属于类的后验概率时,朴素贝叶斯天真地乘以P(y|x_i)的所有单个概率。如果至少有一个零概率,你的最终答案将是零,不管其他的反向观察概率是多少。如果您已经自己实现了该算法,请尝试使用MATLAB、Python学习库或数据挖掘软件(如KNIME和RapidMiner )中已经构建的工具。在实现朴素贝叶斯算法时,他们巧妙地处理了这些实际问题。
票数 1
EN

Data Science用户

发布于 2017-02-14 02:15:46

除非你在其他相关的文件上这样做,否则你不会删除终止语。如果标签16充分利用了这样的功能,这是对这种结果的合理解释。

另一方面(除非再次在其他文件上这样做),你并没有将单词减少到它们的语素。不这样做可能会导致这种反常现象。查看Nltk文档来学习如何做这样的事情。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/16817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档