1

训练数据从两个文件中读取——一个仅包含自变量 (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:
4

1 回答 1

3

解决方案是强制类变量列输入因子:

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

然后predict()像以前一样运行模型。我没有改变其他任何东西,而这个模组“修复”了这个问题。由 r-help 的 Andy Liaw 提供。

于 2012-06-09T00:18:52.557 回答