我正在尝试了解如何使用naive_bayes创建因素数据框以预测结果。我见过的所有示例都采用一个数据帧并将其分为两个dfs(训练和测试)。这确实对我有用:
library(naivebayes)
#Basic naive-bayes model with prediction/test dataframe a subset of the original
age_class<-c('x3','x2','x2','x1','x3','x1')
student<-c('n','y','n','y','y','y')
inc<-c('m','h','m','m','m','l')
sav<-c('e','f','e','e','f','f')
buy<-c('N','Y','Y','Y','Y','Y')
df<-data.frame(age_class,student,inc,sav,buy)
nbmod<-naive_bayes(buy~ age_class + student +inc + sav, data=df[2:6,])
predictdf<-df[1,1:4]
predict(nbmod,newdata=predictdf)
我是否必须创建一个数据框以通过每次指定所有级别来进行预测?有没有办法利用原始数据帧(df)中有关因子水平的信息?
age_class<-factor('x3', levels=c('x1','x2','x3'))
student<-factor('n', levels=c('n','y'))
inc<-factor('m', levels=c('h','l','m'))
sav<-factor('e',levels=c('e','f'))
predictdf3<-data.frame(age_class,student,inc,sav)
predict(nbmod,newdata=predictdf3)
对于这种特殊情况,您可能可以按levels()
引用原始级别:
predictdf3 <- data.frame(
age_class = factor("x3", levels = levels(df$age_class)),
student = factor("n", levels = levels(df$student)),
inc = factor("m", levels = levels(df$inc)),
sav = factor("e", levels = levels(df$sav))
)
请注意,因子的编码应与训练数据和测试数据相匹配。绝对必须保持一致。因此,您必须合并(然后拆分)训练和测试数据集,或者将因子水平从训练数据集复制到测试数据集。