我试图实现一个朴素的Bayes分类器来对本质上是特征集(而不是袋子)的文档进行分类,也就是说,每个特性都包含一组独特的特性,每个特征最多只能在文档中出现一次。例如,您可以将这些特性视为文档的唯一关键字。
我一直在密切关注et的伦尼。阿尔。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"}的文档。这似乎违反直觉,但我不太确定如何解决这个问题。
是否有某种长度归一化可以完成?一个想法是将文档的大小作为一个特性添加,但这似乎不太正确,因为结果会被培训数据中的文档大小所扭曲。
发布于 2011-09-10 10:57:15
这是一个很好的问题,现在我不完全确定这里是否有问题。后验概率只是简单地给出给定文档的每个类的概率(即每个文档类的概率)。因此,在对文档进行分类时,您只是比较给定同一文档的后验,因此特征的数量不会改变(因为您没有跨文档),即:
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
这将在不同特征长度的文档中正确地标准化。
https://stackoverflow.com/questions/7365417
复制