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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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