我在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
Run Code Online (Sandbox Code Playgroud)
这段代码的第一部分运行正常.但当它试图预测后验概率时,它会抛出以下错误 -
**Error in as.data.frame(newdata) :
argument "newdata" is missing, with no default**
Run Code Online (Sandbox Code Playgroud)
我尝试过运行类似的东西
res1 <- predict(mod1,new_data=intent.test)$posterior
Run Code Online (Sandbox Code Playgroud)
但这也会产生同样的错误.
您似乎正在使用该e1071::naiveBayes算法,该算法需要newdata预测参数,因此在运行代码时会出现两个错误.(您可以predict.naiveBayes在CRAN上检查函数的源代码; 代码中的第二行是期望a newdata,as newdata <- as.data.frame(newdata).)另外正如@Vincent指出的那样,在调用NB算法之前最好将变量转换为factor,虽然这肯定与上述错误无关.
使用NaiveBayes从KLAR包,没有这样的问题会发生.例如,
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))
Run Code Online (Sandbox Code Playgroud)