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) 中的朴素贝叶斯分类器的行为不符合预期(简单示例)的主要内容,如果未能解决你的问题,请参考以下文章