我正在使用Spark ML来优化朴素贝叶斯多类分类器。
我有大约300个类别,我正在对文本文档进行分类。 训练集足够平衡,每个类别有大约300个训练样例。
所有看起来都很好,分类器在看不见的文档上以可接受的精度工作。但是我注意到,在对新文档进行分类时,通常,分类器为其中一个类别分配高概率(预测概率几乎等于1),而其他类别则接收非常低的概率(接近于零)
可能的原因是什么?
我想补充一点,在SPARK ML中有一种称为“原始预测”的东西,当我看到它时,我可以看到负数但它们具有或多或少相当的幅度,所以即使是具有高概率的类别也是如此相当的原始预测分数,但我发现解释这些分数有困难。
答案 0 :(得分:1)
让我们从朴素贝叶斯分类器的非正式描述开始。如果 C 是一组所有类而 d 是一个文档而 x i 是这些特征,Naive Bayes返回:
由于 P(d)对于所有类都相同,我们可以将其简化为
其中
由于我们假设特征是条件独立的(这就是为什么它是天真的)我们可以进一步简化(使用拉普拉斯校正以避免零):
这个表达式的问题在于,在任何非平凡的情况下,它在数值上等于零。为避免我们使用以下属性:
并用以下内容替换初始条件:
这些是您获得的原始概率值。由于每个元素都是负数((0,1)中值的对数),整个表达式也具有负值。正如您自己发现的这些值are further normalized所以最大值等于1并除以标准化值的总和
重要的是要注意,虽然你得到的值不是严格的P(c | d),但它们保留了所有重要的属性。订单和比率完全(忽略可能的数字问题)相同。如果没有其他类得到接近1的预测,则意味着,鉴于证据,这是一个非常强烈的预测。所以它实际上是你想看到的东西。