SPARK,ML:朴素贝叶斯分类器通常将 1 分配为概率预测

数据挖掘 分类 阿帕奇火花 多类分类 朴素贝叶斯分类器
2021-10-13 20:14:59

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

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

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

这种现象的可能原因是什么?

  • 我能想到一个可能的原因,就是某些文档中的所有单词都没有出现在训练数据集中的某些类别中?但我并不完全相信这一点,特别是对于大多数结果,总是有一个类别具有很高的概率,而所有其他类别的概率都非常低。
  • 还有其他解释或理由吗?

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

1个回答

NB 被称为“朴素”的原因是假设预测变量都是独立的。这种假设通常会使模型得分(在上述幼稚假设下是无偏概率估计)向 0 或 1 倾斜。

在您的情况下,例如,单词的存在flowerpetal指示gardening类别,但是,因为这些单词的存在不是独立的(如果存在一个,则另一个可能也存在),模型将高估它们的外观。取极端情况,如果词AB只一起出现,那么

P(Category=X | A & B) = P(Category=X | B) = P(Category=X | A)

因此,应该将优势比乘以A&B一次,而不是两次,如朴素贝叶斯算法所要求的那样。

您的补救措施是使用校准(将模型分数映射到概率的单独模型)。