【发布时间】:2018-02-22 13:46:07
【问题描述】:
我有一个包含两列 y 和 x 的数据集。
我根据x执行了不同的算法来预测y。
对于每种算法,我都有一个预测值向量:p1、p2。
我使用了包pROC的函数auc。
auc (response = test$x, predictor = p1)
auc (response = test$x, predictor = p2)
我在小数点后 6 位的 AUC 值完全相同。有可能,还是我的实现有问题?
更新: p1 和 p2 不同。
> pROC::auc (response = test$correct_value, predictor = p1)
Area under the curve: 0.8231
> pROC::auc (response = test$correct_value, predictor = p2)
Area under the curve: 0.8231
> head (p1)
11 14 17 22 25 26
0.01378549 0.01378549 0.01378549 0.01203714 0.01259412 0.01259412
> head (p2)
11 14 17 22 25 26
0.7511921 0.7511921 0.7511921 0.6272434 0.6715637 0.6715637
【问题讨论】:
-
p1和p2一样吗?不同的“算法”可以产生相同的预测。 -
不,它们是不同的。我查过了。
-
我明白了,您有离散的预测(值的数量有限)。只要这些顺序相同,AUC 就相同。例如,在您的示例输出中,订单是相同的。 AUC 测量有事件观察的 p 值 (x=1) 大于无事件观察的 p 值 (x=0) 的频率;对于所有可能的对。它只关心顺序,而不关心值。
-
为确保
auc正常运行,您也可以尝试Hmisc::somers2 -
测试排名:
all(rank(p1) == rank(p2)。如果它们相同,则可以解释为什么 auc 相同;没有解释为什么预测值如此不同。这仍然可能是由错误引起的。