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

时间:2011-09-09 17:43:40

标签: machine-learning data-mining classification bayesian

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

我一直密切关注着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 个答案:

答案 0 :(得分:4)

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

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

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