关于 sklearn.metrics.average_precision_score 文档

数据挖掘 Python scikit-学习 计分
2022-02-16 05:58:41

sklearn.metrics.average_precision_score 文档中有一个示例。

import numpy as np
from sklearn.metrics import average_precision_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
average_precision_score(y_true, y_scores)  
0.83

但是当我绘制precision_recall_curve

precision, recall, _ = precision_recall_curve(y_true, y_scores)
plt.plot( recall,precision)

我得到了图片:在此处输入图像描述

为什么precision_recall_curve下的面积不是0.83?

1个回答

根据文档,该值不完全是曲线下的面积,它是 这是一个矩形近似

AP=n(RnRn1)Pn.

对于您的具体示例,即

      R     P
  1   0.0   1.0   
  2   0.5   1.0   
  3   0.5   0.5   
  4   0.1   0.66

它计算为 这是红色曲线下的区域,如下图所示:

AP=(0.50.0)×1.0(R2R1)P2+(0.50.5)×0.5(R3R2)P3+(1.00.5)×0.66(R4R3)P4=0.5+0.00+0.33=0.83

相比,这是蓝色曲线下的面积。

AUPR=0.5+0.5+0.662×0.5trapezoid area=0.79