Apache spark SPARK ML,朴素贝叶斯分类器:一类的高概率预测
我正在使用Spark ML优化朴素贝叶斯多类分类器 我有大约300个类别,我正在对文本文档进行分类。 培训集足够平衡,每个类别大约有300个培训示例 所有这些看起来都很好,分类器在看不见的文档上以可接受的精度工作。但我注意到,在对新文档进行分类时,分类器通常会将高概率分配给其中一个类别(预测概率几乎等于1),而其他类别的概率非常低(接近零) 可能的原因是什么Apache spark SPARK ML,朴素贝叶斯分类器:一类的高概率预测,apache-spark,machine-learning,classification,naivebayes,apache-spark-ml,Apache Spark,Machine Learning,Classification,Naivebayes,Apache Spark Ml,我正在使用Spark ML优化朴素贝叶斯多类分类器 我有大约300个类别,我正在对文本文档进行分类。 培训集足够平衡,每个类别大约有300个培训示例 所有这些看起来都很好,分类器在看不见的文档上以可接受的精度工作。但我注意到,在对新文档进行分类时,分类器通常会将高概率分配给其中一个类别(预测概率几乎等于1),而其他类别的概率非常低(接近零) 可能的原因是什么 我想补充一点,在SPARK ML中有一种称为“原始预测”的东西,当我看它时,我可以看到负数,但它们或多或少具有可比性,因此即使是高概率的类
我想补充一点,在SPARK ML中有一种称为“原始预测”的东西,当我看它时,我可以看到负数,但它们或多或少具有可比性,因此即使是高概率的类别也具有可比的原始预测分数,但是我发现解释这些分数很困难。让我们从一个非常非正式的朴素贝叶斯分类器的描述开始。如果C是所有类的集合,D是文档,席是特征,那么NaBayes Bayes返回: 由于p(d)对于所有类都是相同的,我们可以将其简化为 在哪里 由于我们假设特征是条件独立的(这就是为什么它是幼稚的),我们可以进一步将其简化(通过拉普拉斯校正避免零)为: 这个表达式的问题是,在任何非平凡的情况下,它在数值上等于零。为了避免这种情况,我们使用以下属性: 并将初始条件替换为: 这些是作为原始概率得到的值。由于每个元素都是负数(0,1中值的对数),整个表达式也有负值。正如您自己发现的,这些值的最大值等于1,并除以规范化值之和
需要注意的是,虽然得到的值不是严格意义上的p(c | d),但它们保留了所有重要的属性。顺序和比率正好是(忽略可能的数字问题)同样。如果没有其他类的预测结果接近1,这意味着,根据证据,这是一个非常强大的预测。因此,它实际上是您想要看到的东西。从逻辑上讲,有两种类型的未看到的文档,一方面,可以推断出未看到的特征,这些特征将在预测之前的向量转换过程中删除关于其他类型,哪些特征已经属于训练集。那么,你看不见的文档适合哪里?它们适合第二种情况eliasah。你是否尝试分析整个训练集上以及每个类之间的单词分布?我的意思是,我使用的是相同的特征提取方法,即HashingTF win 5000作为特征编号。没有不要分析整个训练集中的单词分布。感谢@zero323提供的详细答案。我从数据中注意到的是,当我们有大量的类(例如,在我的例子中,我有~300个)时,日志的总和将导致较大的负值(例如-2081,-2092,…等等)在这种情况下,我确实知道我们如何判断得分为-2081的班级比得分为-2092的班级更有可能,这两个分数对我来说非常接近。你提到的标准化公式看起来是为了在这种情况下有利于一个班级而惩罚其他班级。正如你向我建议的,我可以实现我自己的标准化公式标准化函数。这些值之间也存在巨大差异。exp(-2081)大约为1e-904,而exp(-2090)接近1e-908。是的,我试图用一个例子来挑战你的答案,但我不能。再次感谢