SPARK ML,朴素贝叶斯 classifier:一个 class 的高概率预测

SPARK ML, Naive Bayes classifier: high probability prediction for one class

我正在使用 Spark ML 优化朴素贝叶斯多 class classifier。

我有大约 300 个类别,并且我正在 class 化文本文档。 训练集足够均衡,每个类别大约有300个训练样例。

一切看起来都不错,classifier 正在以可接受的精度处理未见过的文档。但我注意到,当 class 验证新文档时,classifier 经常将高概率分配给其中一个类别(预测概率几乎等于 1),而另一个类别的概率非常低(接近于零)。

这可能是什么原因?

我想补充一点,在 SPARK ML 中有一个叫做 "raw prediction" 的东西,当我查看它时,我可以看到负数,但它们或多或少具有可比性,所以即使是具有高概率具有可比较的原始预测分数,但我在解释这个分数时发现困难。

让我们从对朴素贝叶斯 classifier 的非常非正式的描述开始。如果 C 是所有 classes 的集合并且 d 是文档并且 x i 是特征,朴素贝叶斯 returns:

由于 P(d) 对于所有 class 都是相同的,我们可以将其简化为

其中

因为我们假设特征是条件独立的(这就是为什么它是天真的)我们可以进一步简化这个(用拉普拉斯校正来避免零)到:

此表达式的问题在于,在任何 non-trivial 情况下,它在数值上都等于零。为了避免我们使用以下 属性:

并将初始条件替换为:

这些是您作为原始概率获得的值。由于每个元素都是负数((0, 1] 中值的对数),整个表达式也具有负值。正如您自己发现的,这些值 are further normalized 因此最大值等于 1 除以归一化值之和

重要的是要注意,虽然您获得的值不是严格的 P(c|d),但它们保留了所有重要属性。顺序和比率完全相同(忽略可能的数值问题)。如果 none 其他 class 得到的预测接近于一个,这意味着,根据证据,这是一个非常强大的预测。所以这其实是你想看到的。