如何从Weka输出中为二进制类和多类数据绘制交叉验证的ROC曲线?

时间:2015-05-09 08:30:22

标签: r matlab weka cross-validation

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

我想使用10倍交叉验证来比较多个分类器,并希望将每个分类器设置为ROC。我在Weka收集了结果,但我不想在Weka本身中绘制它。

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

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

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

2 个答案:

答案 0 :(得分:1)

这是占位符答案,但首先要注意的是,您的观察结果经过交叉验证的次数少于10次:

template <typename T, size_t ROWS, size_t COLS>
class matrix
...

给出了:

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)

你能解释一下吗?

此外,您还需要添加交叉验证迭代标识符。一旦你这样做,这只是一个通过CV迭代从> dfCV %>% + group_by(inst.) %>% + tally() %>% + filter( n < 10) Source: local data frame [1 x 2] inst. n 1 773 4 包中运行multiclass.roc的问题。

编辑:

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

pROC

编辑2:

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

> 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
..   ... ..

答案 1 :(得分:0)

我没有找到问题的确切解决方案。但是,我从Weka输出中观察到了一些观点

  1. 虽然weka绘制了ROC,但它直接从分类器评估输出中获得预测。
  2. Weka使用最多6个小数点的预测来计算阈值(更精确有助于计算更多ROC曲线的阈值数量)。
  3. 默认情况下,在Weka资源管理器中,分类器仅输出预测最多3个小数点(如我附带的实验结果)。
  4. 除此之外,我不明白Weka如何计算预测的阈值。我观察到,在相同的Weka预测输出中,我在Weka和R(和Matlab)中发现了不同的阈值。

    最后,我使用Weka API代码绘制ROC Generate ROC Curve并提取实验的TPR和FPR(我重新运行所有实验)。提取TPR和FPR后,我可以在任何工具中绘制图形,如Excel,gnuplot,Matlab或R.