R (e1071) 中的朴素贝叶斯分类器的行为不符合预期(简单示例)

Posted

技术标签:

【中文标题】R (e1071) 中的朴素贝叶斯分类器的行为不符合预期(简单示例)【英文标题】:Naive Bayes Classifier in R (e1071) does not behave as expected (simple example) 【发布时间】:2016-04-08 15:44:12 【问题描述】:

我不明白为什么下面这个简单的例子:

genre <- c('ROMANCE', 'ROMANCE','ROMANCE', 'ACTION', 'ACTION', 'ACTION')
explosions <- c('NO', 'NO', 'NO', 'YES', 'YES', 'YES')
likeit <- c('DISLIKE', 'DISLIKE', 'DISLIKE', 'LIKE', 'LIKE', 'LIKE')

df <- data.frame(genre, explosions)
df[] <- lapply(df, factor)
df

model <- naiveBayes(df, as.factor(likeit))
model

p_genre <- factor('ACTION')
p_explosions <- factor('YES')
pred <- data.frame(genre=p_genre, explosions=p_explosions)
pred
model
predict(model, pred, type='raw')

具有以下概率:

A-priori probabilities:
as.factor(likeit)
DISLIKE    LIKE 
    0.5     0.5 

Conditional probabilities:
                 genre
as.factor(likeit) ACTION ROMANCE
          DISLIKE      0       1
          LIKE         1       0

                 explosions
as.factor(likeit) NO YES
          DISLIKE  1   0
          LIKE     0   1

> predict(model, pred, type='raw')
     DISLIKE LIKE
[1,]     0.5  0.5

对于有爆炸的动作片,不会给概率 1 的 LIKE。

【问题讨论】:

【参考方案1】:

是你的因素处理不当。

如果你这样做,它会按预期工作:

p_genre <- factor('ACTION', c('ACTION','ROMANCE'))
p_explosions <- factor('YES', c('NO', 'YES'))
pred <- data.frame(genre=p_genre, explosions=p_explosions)
predict(model, pred, type='raw')

你得到:

         DISLIKE     LIKE
[1,] 9.99999e-07 0.999999

【讨论】:

以上是关于R (e1071) 中的朴素贝叶斯分类器的行为不符合预期(简单示例)的主要内容,如果未能解决你的问题,请参考以下文章

查询包 e1071 R 中的朴素贝叶斯算法

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

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

R中支持向量机和朴素贝叶斯分类器的可变重要性

如何生成混淆矩阵并找到朴素贝叶斯分类器的错误分类率?

朴素贝叶斯分类器的准确性?