文档的朴素贝叶斯分类器中的长度归一化

Posted

技术标签:

【中文标题】文档的朴素贝叶斯分类器中的长度归一化【英文标题】:Length normalization in a naive Bayes classifier for documents 【发布时间】:2011-11-13 23:47:15 【问题描述】:

我正在尝试实现一个朴素贝叶斯分类器来对本质上是集合(而不是包)特征的文档进行分类,即每个特征都包含一组独特的特征,每个特征都可以在文档中最多出现一次。例如,您可以将特征视为文档的唯一关键字。

我密切关注 Rennie 等人。人。 http://www.aaai.org/Papers/ICML/2003/ICML03-081.pdf 的论文,但我遇到了一个似乎没有得到解决的问题。即,由于文档具有较少的特征数量,对短文档进行分类会导致后验概率更高;对于长文档,反之亦然。

这是因为后验概率被定义为(忽略分母):

P(class|document) = P(class) * P(document|class)

扩展为

P(class|document) = P(class) * P(feature1|class) * ... * P(featureK|class)

由此可见,特征较少的短文档将具有较高的后验概率,这仅仅是因为要相乘的词项较少。

例如,假设特征“foo”、“bar”和“baz”都出现在积极的训练观察中。然后,具有单个特征“foo”的文档将比具有特征 “foo”、“bar”、“baz” 的文档具有更高的后验概率被分类为正类。这似乎违反直觉,但我不太确定如何解决。

是否可以进行某种长度标准化?一种想法是将文档的大小添加为特征,但这似乎不太正确,因为结果会因训练数据中的文档大小而出现偏差。

【问题讨论】:

【参考方案1】:

这是个好问题;现在我不完全确定这里有问题。后验概率只是给出给定文档的每个类别的概率(即每个文档类别的概率)。因此,在对文档进行分类时,您只是比较给定同一文档的后验,因此特征的数量不会改变(因为您没有跨越文档),即:

P(class1|document) = P(class1) * P(feature1|class1) * ... * P(featureK|class1)
...
P(classN|document) = P(classN) * P(feature1|classN) * ... * P(featureK|classN)

具有最高后验的类将被称为文档的标签。因此,由于特征的数量似乎取决于文档而不是类,因此不需要进行规范化。

我错过了什么吗?如果您想做的不仅仅是分类,例如想要比较特定类的最可能的文档,那么您将不得不使用后验概率的实际定义:

P(class1|document) = P(class1) * P(feature1|class1) * ... * P(featureK|class1)/Sum_over_all_numerators

这将在不同特征长度的文档中正确归一化。

【讨论】:

确实,我确实“想比较特定类别中最有可能的文档”。我不知道你最后一个等式中的分母是指什么。 “Sum_over_all_numerators”是指 P(feature1)*...*P(featureK)?我假设这就是您的意思,因为这是后验概率的完整定义。 附录:我想关键点是分母只能在跨类比较后验时省略,但如果我们在跨文档比较时则不能。添加分母可以有效地标准化后验概率,对吗?我想这就是我一直在寻找的。谢谢!

以上是关于文档的朴素贝叶斯分类器中的长度归一化的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯的应用

如何从朴素贝叶斯分类器中的概率密度函数计算概率?

机器学习系列-朴素贝叶斯分类器

如何在斯坦福分类器中使用朴素贝叶斯分类器、SVM 和最大熵

数据挖掘十大经典算法之朴素贝叶斯

如何在 python 的朴素贝叶斯分类器中对用户输入测试集进行分类?