1

我试图了解朴素贝叶斯是如何工作的。

我有一个数据集如下所示:

> data.flu
    chills runnyNose headache fever flu
1      1         0        M     1   0
2      1         1        N     0   1
3      1         0        S     1   1
4      0         1        M     1   1
5      0         0        N     0   0
6      0         1        S     1   1
7      0         1        S     0   0
8      1         1        M     1   1

如果这些列的类型如下所示:

str(data.flu)
'data.frame':  8 obs. of  5 variables:
  $ chills   : num  1 1 1 0 0 0 0 1
$ runnyNose: num  0 1 0 1 0 1 1 1
$ headache : Factor w/ 3 levels "M","N","S": 1 2 3 1 2 3 3 1
$ fever    : num  1 0 1 1 0 1 0 1
$ flu      : Factor w/ 2 levels "0","1": 1 2 2 2 1 2 1 2

该模型将如下所示:

Naive Bayes Classifier for Discrete Predictors
Call:
  naiveBayes.default(x = X, y = Y, laplace = laplace)
A-priori probabilities:
  Y
0     1 
0.375 0.625 

Conditional probabilities:
  chills
Y        [,1]      [,2]
0 0.3333333 0.5773503
1 0.6000000 0.5477226
...

我很有趣地发现P(chills=1|flu=1) + P(chills=0|flu=1) != 1,在我看来,当flu是肯定的时,一个人要么发冷要么不发冷。我对概率的基本知识绝对出了问题。

我通过将所有类型更改为因子来验证我的想法,并且每个数字都与我方便的计算相匹配。

A-priori probabilities:
  Y
0     1 
0.375 0.625 

Conditional probabilities:
  chills
Y           0         1
0 0.6666667 0.3333333
1 0.4000000 0.6000000
...

任何人都可以向我解释当列包含数字列时第一个场景中的概率是如何计算的......将我指向任何书籍或论文也会非常有帮助。

非常感谢

4

1 回答 1

0

要回答您的问题:所有分类列都必须是因子,否则它们将被视为数字。

假设您使用的是 e1071 包,请参阅文档

表格列表,每个预测变量一个。对于每个分类变量,一个表给出了每个属性级别,给定目标类的条件概率。对于每个数值变量,一个表格给出了每个目标类的(子)变量的平均值和标准差。

这意味着,在第一个示例中,您没有看到 P(chills=1|flu=0) 和 P(chills=0|flu=0) 的条件概率,而是chills|flu 的均值和标准差=0。然后将寒战视为连续变量,其正态分布以流感为条件。

于 2018-11-07T13:03:24.437 回答