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

时间:2016-06-17 06:04:22

标签: r naivebayes

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

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

湾获取先验表和条件概率表

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

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

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

数据集1: 水果鉴定(在本论坛的Naive Bayes插图中看到了这个)

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.例如香蕉+黄的<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都等于yes。

该产品最大的水果:

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中使用预测函数,我会得到正确的结果作为Iris的预测。

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

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

问题:

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

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

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

1 个答案:

答案 0 :(得分:1)

这个答案迟到了一年,但我偶然发现了它。在您编写时,预测变量是数字的,因此对因子的处理方式不同。你得到的是条件高斯分布的均值(第一列)和sd(第二列)。因此,对于

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

我们的平均花瓣宽度为0.246,标准偏差为0.10。您也可以从

中看到
<script src="http://example1.com"></script> => <script src="//example1.com"></script>

<link href="https://example2.com" /> => <link href="//example2.com />

高斯密度用于使用贝叶斯公式反演条件概率,以获得适当的条件概率。

相关问题