SPARK ML,朴素贝叶斯分类器:对一个类别的高概率预测

我正在使用Spark ML来优化一个多类别的朴素贝叶斯分类器。

我有大约300个类别,并且我对文本文档进行分类。训练集的平衡性足够好,每个类别大约有300个训练样本。

一切看起来都不错,分类器在未见过的文档上表现出可接受的精度。但我注意到,在对新文档进行分类时,分类器经常会为其中一个类别分配一个很高的概率(预测概率几乎等于1),而其他类别的概率则非常低(接近零)。

这可能是什么原因呢?

我想补充一点,在SPARK ML中,有一个叫做“原始预测”的东西,当我查看它时,我可以看到负数,但它们的数值大小或多或少是可比较的,因此即使是高概率的类别也有可比的原始预测分数,但我发现很难解释这些分数。


回答:

让我们从对朴素贝叶斯分类器的一个非常非正式的描述开始。如果C是一组所有类别,d是一个文档,xi是特征,朴素贝叶斯返回的是:

enter image description here

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

enter image description here

其中

enter image description here

由于我们假设特征是条件独立的(这就是为什么它是“朴素”的),我们可以进一步简化(使用拉普拉斯修正以避免零值)为:

enter image description here

这个表达式的难题在于,在任何非平凡的情况下,它在数值上等于零。为了避免这个问题,我们使用以下属性:

enter image description here

并用以下条件替换初始条件:

enter image description here

这些是你得到的原始概率值。由于每个元素都是负数((0, 1]范围内值的对数),整个表达式也具有负值。正如你自己发现的,这些值被进一步归一化,使得最大值等于1,并除以归一化值的总和。

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

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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