R的朴素贝叶斯

时间:2012-02-06 08:54:00

标签: r

我在R中运行朴素贝叶斯分类器时遇到错误。我使用以下代码 -

mod1 <- naiveBayes(factor(X20) ~ factor(X1) + factor(X2) +factor(X3) +factor(X4)+factor(X5)+factor(X6)+factor(X7)
               +factor(X8)+factor(X9)
               +factor(X10)+factor(X11)+ factor(X12)+factor(X13)+factor(X14)
               +factor(X15)
               +factor(X16)+factor(X17)
               +factor(X18)+factor(X19),data=intent.test)

res1 <- predict(mod1)$posterior

此代码的第一部分运行正常。但是当它试图预测后验概率时它会抛出错误 -

**Error in as.data.frame(newdata) : 
argument "newdata" is missing, with no default**

我尝试过运行

之类的东西
res1 <- predict(mod1,new_data=intent.test)$posterior

但这也会产生同样的错误。

1 个答案:

答案 0 :(得分:9)

您似乎正在使用e1071::naiveBayes算法,该算法需要newdata参数进行预测,因此在运行代码时会出现两个错误。 (您可以在CRAN上查看predict.naiveBayes函数的源代码;代码中的第二行预期newdatanewdata <- as.data.frame(newdata)。)同样正如@Vincent所指出的,您和& #39;最好在调用NB算法之前将变量转换为factor,尽管这与上述错误无关。

使用klar包中的NaiveBayes,不会发生此类问题。例如,

data(spam, package="ElemStatLearn")
library(klaR)

# set up a training sample
train.ind <- sample(1:nrow(spam), ceiling(nrow(spam)*2/3), replace=FALSE)

# apply NB classifier
nb.res <- NaiveBayes(spam ~ ., data=spam[train.ind,])

# predict on holdout units
nb.pred <- predict(nb.res, spam[-train.ind,])

# but this also works on the training sample, i.e. without using a `newdata`
head(predict(nb.res))