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

时间:2013-03-14 04:01:34

标签: r zero predict

更新:我正在使用e1071包for naiveBayes

我是R的新手并试图围绕玩具数据建立Naive Bayes模型。然后我试着在那个模型上叫“predcit”。我看到的问题是:“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

2 个答案:

答案 0 :(得分:6)

问题似乎是因变量应该是因子。我将使用可以存储多种变量类型(例如数值和因子)的数据帧(下面的df),而不是使用矩阵来存储数据。我将df存储为因子Y和数字X并运行模型...

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 :(得分:2)

我认为问题产生于naiveBayes假设y是一个分类变量。

在您的示例数据中,没有(明显的)分类数据或contigency表数据。

如果我们使用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

它按预期工作。