machine-learning - 文档朴素贝叶斯分类器中的长度标准化

标签 machine-learning data-mining classification bayesian

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

我一直密切关注雷尼等人。等人。论文在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

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

关于machine-learning - 文档朴素贝叶斯分类器中的长度标准化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365417/

相关文章:

python - 显示逻辑回归分类器 sklearn 的训练迭代分数

python - 使用 scikit-learn PCA.score() 时出错

classification - 误分类错误率和准确率

c# - 下载网页的一部分 - 数据挖掘

Android OpenCV 3.1 从文件加载 SVM 分类器

database-design - 无限共享和唯一项目分类的数据库设计模型

scala - 将 groupByKey() 替换为 reduceByKey()

python - 将onnx模型转换为keras

database - 将 MIT-BIH 心律失常心电图数据库加载到 MATLAB

machine-learning - 如何根据相同的单词对句子进行聚类?