r - 如何绘制 ROC 曲线以从 Weka 输出的二元类和多类数据进行交叉验证?

标签 r matlab weka cross-validation

我尝试过不同的 matlab 函数,如 plotroc 和 R 中的包,如 pROC、ROCR 和 cvAUC。每个包或函数生成不同的图形并给出与 Weka 结果不同的 AUC。

我想使用 10 折交叉验证比较多个分类器,并希望对每个分类器进行 ROC。我已经在 Weka 中收集了结果,但我不想在 Weka 本身中绘制它。

我的实验基于二元类和多类数据。

我的 Weka 输出交叉验证实例预测位于 https://drive.google.com/folderview?id=0BzRIG3kN-8Z9fnh5OElKTExNT2NuZUVna2tKcmMzU1VBankwdVc2OGxBSXFnaFJqSEhHYVE&usp=sharing

请建议我如何为二进制类和多类的附加结果绘制图形。

最佳答案

这是一个占位符答案,但首先要注意的是,您的观察得到的交叉验证次数少于 10 次:

library(pROC)
library(dplyr)

filenameROC = "Data/term3_IBk_3_multiclass.txt"
fileROC = readLines(filenameROC)
dfCV = read.csv2(text = fileROC,
                 nrows = length(fileROC) - 51 - 19,
                header = TRUE, 
                sep = ",",
                skip = 19, stringsAsFactors = FALSE)


dfCV %>%
  group_by(inst.) %>%
  tally() %>%
  filter(n < 10)

给出:

> dfCV %>%
+   group_by(inst.) %>%
+   tally() %>%
+   filter( n < 10)
Source: local data frame [1 x 2]

  inst. n
1   773 4

你能解释一下吗?

此外,您还需要添加交叉验证迭代标识符。一旦你这样做了,这只是一个通过 CV 迭代从 pROC 包运行 multiclass.roc 的问题。

编辑:

OP 声称有 7724 个 *observations` 而很容易看出在 772 个案例中有 773 个观察重复 10 次,观察编号 772 重复 4 次——与 10 倍交叉验证数据一致:

> dfCV %>%
+   group_by(inst.) %>%
+   tally()
Source: local data frame [773 x 2]

   inst.  n
1      1 10
2      2 10
3      3 10
4      4 10
5      5 10
6      6 10
7      7 10
8      8 10
9      9 10
10    10 10
..   ... ..

编辑2:

这是通过 CV 折叠生成多类 ROC 的代码:

dfCVROC = dfCV %>%
  dplyr::filter(inst. != 773) %>%
  arrange(inst.) %>%
  dplyr::mutate(cvfold = rep.int(1:10, 772)) %>%
  group_by(cvfold) %>%
  do(multiclass_roc = multiclass.roc(as.factor(.$actual), as.numeric(.$prediction)))

# get the AUCs by CV fold
sapply(dfCVROC$multiclass_roc, function(x) x$auc)

关于r - 如何绘制 ROC 曲线以从 Weka 输出的二元类和多类数据进行交叉验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30137768/

相关文章:

sql - R 中 SQL 的 IN 关键字的等价物是什么?

r - 如何在 R 中匹配彼此在 +/- 5 以内的观察值?

java - 如何将单维索引转换为多维数组中的相应索引?

machine-learning - 如何在机器学习中对不平衡数据进行建模?

r - vector - 字符/整数类(底层)

r - 具有混合样条线的图形或合并具有不同样条线的图层

matlab - 在matlab中,如何增加矩阵的维数?

matlab - 共享库 libmwi18n.so 找不到

java - 有weka JSONLoader的使用示例吗?

r - 矩阵非常大的K均值