【问题标题】:Different parameters, exactly same AUC不同的参数,完全相同的AUC
【发布时间】:2018-02-22 13:46:07
【问题描述】:

我有一个包含两列 y 和 x 的数据集。

我根据x执行了不同的算法来预测y

对于每种算法,我都有一个预测值向量:p1p2

我使用了包pROC的函数auc

auc (response = test$x, predictor = p1)
auc (response = test$x, predictor = p2)

我在小数点后 6 位的 AUC 值完全相同。有可能,还是我的实现有问题?

更新: p1p2 不同。

> 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

【问题讨论】:

  • p1p2 一样吗?不同的“算法”可以产生相同的预测。
  • 不,它们是不同的。我查过了。
  • 我明白了,您有离散的预测(值的数量有限)。只要这些顺序相同,AUC 就相同。例如,在您的示例输出中,订单是相同的。 AUC 测量有事件观察的 p 值 (x=1) 大于无事件观察的 p 值 (x=0) 的频率;对于所有可能的对。它只关心顺序,而不关心值。
  • 为确保auc 正常运行,您也可以尝试Hmisc::somers2
  • 测试排名:all(rank(p1) == rank(p2)。如果它们相同,则可以解释为什么 auc 相同;没有解释为什么预测值如此不同。这仍然可能是由错误引起的。

标签: r roc auc


【解决方案1】:

@Jan van der Laan 确实注意到all(rank(p1) == rank(p2))。但还有更多!

如果我正确理解您的问题,您可以使用基于单个随机变量 xglm 模型进行预测。那么以下也是正确的:

> pROC::auc (response = test$correct_value, predictor = x)
Area under the curve: 0.8231
> all(rank(p1) == rank(x))
[1] TRUE

原因是单个随机变量x 的线性函数不可能重新排序数据。由于排名是 ROC 分析的唯一相关信息,如果您想改进预测,您必须通过非线性函数(nlm 或类似函数)传递数据,或者在方程中引入更多随机变量。

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多