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

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

我仔细阅读了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”}的文档。这似乎违反直觉,但我还不确定如何解决这个问题。

是否有某种长度归一化的方法?一个想法是将文档的大小作为一个特征添加进去,但这似乎不太对,因为结果会受到训练数据中文档大小的影响而出现偏差。


回答:

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

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

这样就可以正确地对不同特征长度的文档进行归一化。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注