【问题标题】:What's the difference between Keras' AUC(curve='PR') and Scikit-learn's average_precision_score?Keras 的 AUC(curve='PR') 和 Scikit-learn 的 average_precision_score 有什么区别?
【发布时间】:2021-07-03 02:00:47
【问题描述】:

我对 Keras 的 AUC(curve='PR') 和 Scikit-learn 的 average_precision_score 之间的区别感到很困惑。我的目标是计算 Scikit-learn 和 Keras 模型的精确召回曲线下面积 (AUPRC)。但是,这两个指标会产生截然不同的结果!

关于AUC 函数的使用,我是否遗漏了https://www.tensorflow.org/api_docs/python/tf/keras/metrics/AUC 的TensorFlow-Keras 文档?

【问题讨论】:

标签: tensorflow keras scikit-learn auc precision-recall


【解决方案1】:

正如 Scikit-learn documentation 中所述,它们使用不同的实现方法:

参考文献 [Manning2008] 和 [Everingham2010] 介绍了插入精确召回曲线的 AP 的替代变体。目前,average_precision_score 没有实现任何插值变量。参考文献 [Davis2006] 和 [Flach2015] 描述了为什么精确召回曲线上的点的线性插值提供了对分类器性能的过于乐观的度量。这种线性插值用于计算曲线下面积,在auc中采用梯形法则。

average_precision_score函数documentation中,还可以阅读:

这个实现没有插值,是不同的 计算精确召回曲线下的面积 梯形规则,它使用线性插值,也可以 乐观。

我鼓励您详细查看metrics module 中提供的不同功能及其描述。我也强烈推荐阅读related paper

最后,这里还有一个可能感兴趣的话题:[AUC] result of tf.metrics.auc doesnot match with sklearn's

【讨论】:

  • 感谢您提供相关文档的链接,不胜感激。我已经通过它们,现在更清楚了!如果我理解正确的话,差异的主要原因是 Scikit-learn 的 average_precision_score 没有被插值。
  • 主要是之一;一个好的练习包括并排比较 tf 和 scikit-learn 算法以了解关键差异:)
猜你喜欢
  • 2016-08-01
  • 2015-03-10
  • 2017-08-06
  • 2018-03-18
  • 2018-07-02
  • 2020-07-13
  • 2015-04-21
  • 2016-12-08
  • 1970-01-01
相关资源
最近更新 更多