predict()为type =“class”返回任何内容,使用type =“raw”工作正常

时间:2012-06-08 01:27:31

标签: r predict

从两个文件中读取训练数据 - 一个只有自变量(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:

1 个答案:

答案 0 :(得分:3)

解决方案是强制类变量列键入factor:

df.train_C$V1 <- factor(df.train_C$V1)

然后像以前一样运行模型和predict()。我没有改变任何其他东西,这一个mod“修复”了这个问题。礼貌Andy Liaw在r-help。