【问题标题】:Naive bayes in RR中的朴素贝叶斯
【发布时间】:2014-12-09 18:58:03
【问题描述】:

在 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

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

【问题讨论】:

  • 正确的拼写是newdata,没有下划线(如错误消息中所示),但它是一个可选参数:没有它也可以工作。您的数据集可能有问题,但您没有提供任何有关它的信息。在 data.frame 中将数据编码为因子可能会有所帮助。如果您尝试用其他列来预测最后一列,则可以将模型写得更紧凑,如X20 ~ .

标签: r


【解决方案1】:

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

使用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))

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 2011-12-28
    • 2018-12-07
    • 2014-11-12
    • 2013-11-24
    • 2011-10-07
    • 2019-03-16
    • 2013-09-09
    • 2015-01-03
    相关资源
    最近更新 更多