从两个文件中读取训练数据 - 一个只有自变量(df.train),另一个只有实际对应的类值(df.churn)。这些值仅为-1和1。然后我删除所有NA列并删除任何找到的重复列。
我将两组数据组合成一个具有独立值和类值的数据帧,并运行naiveBayes()而没有错误。
使用naiveBayes生成的模型,运行predict()并注意type =“raw”的输出看起来像是合理的数据 - 在大多数情况下,这些概率相对接近0或1.我显示前6个以下元素。
我正在寻找输入到prediction()的实际预测类值,以获得ROC图和AUC值。我用type =“class”再次运行predict(),这就是我基本上什么都没有的。
df.train <- read.csv('~/projects/kdd_analysis/data/train_table.csv', header=TRUE, sep=',')
df.churn <- read.csv('~/projects/kdd_analysis/data/sm_churn_labels.csv', header=TRUE, sep=',')
df.train <- df.train[,colSums(is.na(df.train))<nrow(df.train)]
df.train <- df.train[!duplicated(lapply(df.train,c))]
df.train_C <- cbind(df.train, df.churn)
mod_C <- naiveBayes(V1~., df.train_C, laplace=0.01)
pre_C <- predict(mod_C, df.train ,type="raw", threshold=0.001)
我正在故意对训练数据运行predict()因为我觉得这很有意思。下面,预测()中的值对我来说似乎是“合理的”......也就是说,它们至少看起来不完全是胡说八道。我还没有将它们与实际值进行比较,并期望使用predict()给出的显式类值来做到这一点。
head(pre_C)
-1 1
[1,] 9.996934e-01 3.066321e-04
[2,] 9.005501e-07 9.999991e-01
[3,] 1.000000e+00 3.468739e-11
[4,] 9.362914e-01 6.370858e-02
[5,] 9.854649e-01 1.453510e-02
[6,] 9.997680e-01 2.320003e-04
所以,这是对同一模型再次运行的预测() - 我不明白它怎么可能没有返回任何内容:
> pre_C <- predict(mod_C, df.train ,type="class", threshold=0.001)
> pre_C
factor(0)
Levels:
答案 0 :(得分:3)
解决方案是强制类变量列键入factor:
df.train_C$V1 <- factor(df.train_C$V1)
然后像以前一样运行模型和predict()
。我没有改变任何其他东西,这一个mod“修复”了这个问题。礼貌Andy Liaw在r-help。