R预测函数:为什么它会返回零长度的预测?

3

更新:我正在使用e1071包进行朴素贝叶斯

我是R的新手,并尝试围绕玩具数据构建朴素贝叶斯模型。然后我尝试在该模型上调用“predict”。我看到的问题是:“predict()”的结果长度为零。请参见简单的R repro代码。感谢您的输入!

 df<-NULL

 df <- rbind(df, c(0,3))

 df <- rbind(df, c(1,1))

 df <- rbind(df, c(1,3))

 model <- naiveBayes(df[,2], df[,1])

 prediction <- predict(model, df[,-1])

 length(prediction)

 ## [1] 0

你使用的是哪个包?e1071吗?我非常确定你的问题在于你没有指定一个公式... - alexwhan
2个回答

5
问题似乎在于依赖变量应该是一个“因子”。我将使用数据框架(下面的df)来存储数据,而不是使用矩阵。数据框架可以存储多种变量类型(例如数字和因子)。我将一个因子Y和一个数字X存储到df中,并运行模型...
df<-data.frame(Y=factor(c(0,1,1)),X=c(3,1,3))
model<-naiveBayes(Y~X,df)
predict(model,df)

另外,为了表明是因素解决了问题(即不是使用公式解决的)...

model<-naiveBayes(df[,2],df[,1])
predict(model,df)

依然有效。


1
在这种情况下,使用df作为数据框更好,因为数据框可以容纳多种类型的向量(例如数字、因子)。如果您要将df保留为矩阵,则必须拆分结果列,然后将其转换为因子。 - Marius
@Marius 我会加入你的评论。谢谢! - ndoogan

2
我认为问题出在naiveBayes假设y是分类变量上。
在你提供的数据示例中,没有(明显的)分类数据或列联表数据。
如果我们使用帮助文档中的例子,使用iris数据集,则第五列是Species并且是一个因子变量。
library(e1071)
data(iris)
m <- naiveBayes(iris[,-5], iris[,5])
m
table(predict(m, iris), iris[,5])


            setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         47         3
  virginica       0          3        47

它按预期工作。


谢谢回复。那么如何将y变成分类变量? - S. Zhou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接