解释 naiveBayes 分类器在 e1071:R 中返回的条件概率

Posted

技术标签:

【中文标题】解释 naiveBayes 分类器在 e1071:R 中返回的条件概率【英文标题】:Interpreting conditional probabilities returned by naiveBayes classifier in e1071:R 【发布时间】:2016-10-18 20:35:40 【问题描述】:

使用以下过程处理分类解决方案:

一个。使用 e1071 在 R 中执行朴素贝叶斯分类。

b.获取先验表和条件概率表

c。使用应用程序中的 PL/SQL 程序使用这些值进行预测。即最终预测将不涉及 R predict 函数的使用。

在步骤 b 中,我看到 R 在模型生成后返回的负数和大于 1 的条件概率 - 它们真的是条件概率吗?

用 2 个数据集说明问题 - 一个我能够解释,一个我无法解释。

数据集 1: 水果识别(在这个论坛的一个漂亮的朴素贝叶斯插图中看到了这一点)

Data Frame Fruit_All: 

Long    Sweet   Yellow  Fruit

Yes Yes Yes Banana

Yes Yes Yes Banana

Yes Yes Yes Banana

Yes Yes Yes Banana

No  Yes Yes Banana

No  Yes Yes Orange

No  Yes Yes Orange

No  Yes Yes Orange

Yes Yes Yes Other

No  Yes No  Other

Yes Yes Yes Banana

Yes Yes Yes Banana

Yes No  Yes Banana

Yes No  No  Banana

No  No  Yes Banana

No  No  Yes Orange

No  No  Yes Orange

No  No  Yes Orange

Yes Yes No  Other

No  No  No  Other

执行朴素贝叶斯分类:

  `NB.fit <- naiveBayes(Fruit~., data=Fruit_All,laplace=0)`

Fruit 是类列,Fruit_All 是完整的数据框。

NB.fit 中返回的条件概率与预期完全一致。

此外,所有行的概率加起来正好是 1。例如,香蕉+黄色为 0.1 + 0.9

条件概率:

        Long        
Y         No Yes        
  Banana 0.2 0.8        
  Orange 1.0 0.0        
  Other  0.5 0.5        

        Sweet       
Y          No  Yes      
  Banana 0.30 0.70      
  Orange 0.50 0.50      
  Other  0.25 0.75      

        Yellow      
Y          No  Yes      
  Banana 0.10 0.90      
  Orange 0.00 1.00      
  Other  0.75 0.25      

A-priori probabilities:         

Banana Orange  Other            
   0.5    0.3    0.2    

我可以使用上述内容轻松编写代码来预测所提供输入的结果,例如对于 Long、Sweet 和 Yellow 都等于是。

该产品最大的水果:

P(Long|Fruit) * P(Sweet|Fruit) * P(Yellow|Fruit) * apriori P(Fruit)

数据集 2:R 中可用的鸢尾花数据集

  `NB.fit <- naiveBayes(Species~., data=iris)`

条件概率:

         Sepal.Length
Y             [,1]      [,2]

  setosa     5.006 0.3524897

  versicolor 5.936 0.5161711

  virginica  6.588 0.6358796

            Sepal.Width
Y             [,1]      [,2]

  setosa     3.428 0.3790644

  versicolor 2.770 0.3137983

  virginica  2.974 0.3224966

            Petal.Length
Y             [,1]      [,2]

  setosa     1.462 0.1736640

  versicolor 4.260 0.4699110

  virginica  5.552 0.5518947

            Petal.Width
Y             [,1]      [,2]

  setosa     0.246 0.1053856

  versicolor 1.326 0.1977527

  virginica  2.026 0.2746501

在这种情况下,同一个函数似乎没有返回条件概率,因为一些值大于 1,并且没有任何行加起来为 1。

注意:如果我在 R 中使用 predict 函数,我会得到正确的结果作为 Iris 的预测。

我了解 Iris 数据集有点不同,因为变量是连续数值,而不是与水果示例不同的因子。

对于其他复杂的数据集,我什至将负值视为分类器返回的条件概率。虽然最终结果在 R 内是好的。

问题:

Iris 数据集返回的条件概率真的是条件概率吗?

我在水果示例中所做的相同产品最大化是否适用于鸢尾花,甚至适用于条件概率为负的数据集?

是否可以根据 Iris 条件概率表编写自定义预测函数?

【问题讨论】:

【参考方案1】:

这个答案晚了大约一年,但我偶然发现了它。正如您所写,预测变量是数字的,因此对这些因素的处理方式不同。您得到的是条件高斯分布的均值(第一列)和 sd(第二列)。因此,对于

            Petal.Width
Y             [,1]      [,2]

  setosa     0.246 0.1053856

平均花瓣宽度为 0.246,标准差为 0.10。你也可以从

中看到
> iris %>% dplyr::filter(Species=="setosa") %>% 
           dplyr::summarize(mean(Petal.Width), sd(Petal.Width))
  mean(Petal.Width) sd(Petal.Width)
1             0.246       0.1053856

高斯密度用于利用贝叶斯公式对条件概率进行反演,得到合适的条件概率。

【讨论】:

以上是关于解释 naiveBayes 分类器在 e1071:R 中返回的条件概率的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯算法的案例实现

R中的NaiveBayes无法预测

如何交叉验证朴素贝叶斯分类器?

数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)

NaiveBayes 分类器:我必须连接一个类的所有文件吗?

朴素贝叶斯 e1071 将每个姓氏分类为相同的祖先