2

我正在使用 Spark ML 优化朴素贝叶斯多类分类器。

我有大约 300 个类别,我正在对文本文档进行分类。训练集足够平衡,每个类别大约有 300 个训练样例。

一切看起来都很好,并且分类器在看不见的文档上以可接受的精度工作。但是我注意到,在对新文档进行分类时,分类器通常会为其中一个类别分配高概率(预测概率几乎等于 1),而其他类别的概率非常低(接近于零) .

可能的原因是什么?

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

4

1 回答 1

1

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

在此处输入图像描述

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

在此处输入图像描述

在哪里

在此处输入图像描述

由于我们假设特征是条件独立的(这就是它幼稚的原因),我们可以进一步简化(使用拉普拉斯校正以避免零):

在此处输入图像描述

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

在此处输入图像描述

并将初始条件替换为:

在此处输入图像描述

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

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

于 2015-12-22T06:43:00.280 回答