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

Interpreting conditional probabilities returned by naiveBayes classifier in e1071:R

正在使用以下流程开发 class化解决方案:

一个。使用 e1071.

在 R 中执行朴素贝叶斯 class化

b。获取先验概率 table 和条件概率 tables

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

在步骤 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

执行朴素贝叶斯class化:

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

其中 Fruit 是 class 列,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,并且 none 行加起来等于 1。

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

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

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

问题:

鸢尾花数据集返回的条件概率真的是条件概率吗?

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

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

这个答案晚了大约一年,但我偶然发现了它。在您撰写时,预测变量是数字,因此与因素不同。您得到的是条件高斯分布的均值(第一列)和 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

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