首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >朴素贝叶斯文本分类在一个类别中失败。为什么?

朴素贝叶斯文本分类在一个类别中失败。为什么?
EN

Stack Overflow用户
提问于 2013-05-17 04:28:54
回答 1查看 1.9K关注 0票数 3

我正在实现用于文本类别检测的朴素贝叶斯分类器。我有37个类别,我的测试集的准确率约为36%。

我想提高准确性,所以我决定实现37个双向分类器(Ways to improve the accuracy of a Naive Bayes Classifier?是其中之一),这些分类器将对给定的文本负责:

代码语言:javascript
复制
specific_category OR everything_else

我将通过依次应用它们来确定文本的类别。

但是我发现第一个分类器有问题,它总是在"specific_category“类中失败。

我有培训数据- 37类,100份文件,每个类别的大小相同。对于每一个类别,我找到了由相互信息标准选择的50个特征的列表(功能只是单词)。

为了举例说明,我使用了两类“农业”和"everything_else“(农业除外)。

“农业”类别:

代码语言:javascript
复制
number of words in all documents of this class 
(first term in denominator in http://nlp.stanford.edu/IR-book/pdf/13bayes.pdf, (13.7))
W_agriculture = 31649.

Size of vocabulary V_agriculture = 6951.
Log probability of Unknown word (UNK) P(UNK|agriculture) = -10.56
Log probability of class P(agriculture) = log(1/37) = -3.61 (we have 37 categories of same-size documents)

关于“everything_else”类:

代码语言:javascript
复制
W_everything_else = 1030043
V_everything_else = 44221
P(UNK|everything_else) = -13.89
P(everything_else) = log(36/37) = -0.03

然后我有一个与农业无关的文本,让它主要由未知的词(UNK)组成。它有270个单词,对于“农业”和"everything_else“这两个类别,它们大多是未知的。让我们假设260个单词是"everything_else“的UNK,另外10个是已知的。

然后,当我计算概率时

代码语言:javascript
复制
P(text|agriculture) = P(agriculture) + SUM(P(UNK|agriculture) for 270 times) 
P(text|everything_else) = P(everything_else) + SUM(P(UNK|everything_else) for 260 times) + SUM(P(word|everything_else) for 10 times)

在最后一行中,我们把260个单词计算为UNK,10个单词被认为是一个类别。

主要问题。由于P(UNK) >> P(everything_else) (对于日志的影响要大得多),这270个术语P(UNK可比农业)对文本中每个单词P(word|everything_else)的影响大于和的影响。因为

代码语言:javascript
复制
SUM(P(UNK|agriculture) for 270 times) = -2851.2
SUM(P(UNK|everything_else) for 260 times) = -3611.4

第一和大得多,不能用P(农业)或和(P(word|everything_else) 10字)来修正,因为差异很大。然后,我总是失败在“农业”类别,虽然文本不属于它。

问题是:我是不是遗漏了什么?或者,我应该如何处理大量UNK单词,它们对于小类别的概率要高得多?

UPD:试图扩大“农业”类别的培训数据(仅将文档连接36次),使其文档数量相等。它对少数类别有帮助,对其他类别帮助不大。我怀疑,由于单词数量和字典大小的减少,P(UNK|specific_category)变得更大,超过了P(UNK|everything_else)的总和270次。

因此,这种方法对训练数据中的字数和词汇量都是非常敏感的。如何克服这一问题?也许大号/三角图会有帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-17 09:52:55

好的,好的。你很困惑,但我会给你一些基本的建议。

首先,即使您遵循1-VS-所有方案,您也不能为不同的类拥有不同的词汇表。如果这样做,随机变量的事件空间是不同的,因此概率是不可比较的。您需要为所有类确定一个通用词汇表。

第二,扔掉未知的标记。这帮不了你。忽略任何不是你决定的词汇的一部分的单词。

最后,我不知道你在用求和概率做什么。我想你对拿日志很困惑。这个公式是不正确的:

P(文本-农业)=P(农业)+SUM(UNK-农业) 270次)

取而代之的是:

P(文本\农业)=p(农业)*p(灌篮农业)^270*p(所有其他词均为doc_-农业)

如果您使用日志,这将变成:

log( p(t_(A)=log(p(农业))+270*log(p(灌篮)-农业)+log(p(所有其他词)-农业)

最后,如果你的分类器是正确的,没有真正的理由相信一个-vs-所有将比一个直接的n路分类工作得更好。但从理论上讲,它们的结果应该是相等的。无论如何,您不应该按顺序应用决策,而是执行所有的n-双向问题,并将其分配给正概率最高的类。

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

https://stackoverflow.com/questions/16601418

复制
相关文章

相似问题

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