训练数据从两个文件中读取——一个仅包含自变量 (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() 的值对我来说似乎是“合理的”......也就是说,它们至少看起来不像完全是胡说八道。我还没有将它们与实际值进行比较,并且希望使用 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
所以,这是 predict() 再次针对相同的模型运行 - 我不明白它怎么可能什么都不返回:
> pre_C <- predict(mod_C, df.train ,type="class", threshold=0.001)
> pre_C
factor(0)
Levels: