R(e1071)中的朴素贝叶斯分类器表现不尽如人意(简单示例)

时间:2016-01-04 22:37:44

标签: r machine-learning statistics classification naivebayes

我不明白为什么会出现以下简单的例子:

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 个答案:

答案 0 :(得分:3)

您的因素处理不当。

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

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