欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[Python] 二元分类结果之PR曲线的AUC与AP如何计算?

程序员文章站 2022-07-14 14:52:19
...

【预备知识】

【指标计算】

代码先行:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import metrics

# ======================== data ===============================
y = np.array([0, 0, 1, 1])   # label
pred = np.array([0.1, 0.4, 0.35, 0.8])  # probability or score

# ======================= metrics ============================
precision, recall, threshold = metrics.precision_recall_curve(y, pred)
print(recall)
print(precision)
print(threshold)

pr_auc = metrics.auc(recall, precision)  # 梯形块分割,建议使用
pr_auc0 = metrics.average_precision_score(y, pred)  # 小矩形块分割

print(pr_auc)
print(pr_auc0)

# ======================= PLoting =============================
plt.figure(1)
plt.plot(recall, precision, label=f"PR_AUC = {pr_auc:.2f}\nAP = {pr_auc0:.2f}",
         linewidth=2, linestyle='-', color='r', marker='o')
plt.fill_between(recall, y1=precision, y2=0, step=None, alpha=0.2, color='b')
plt.title("PR-Curve")
plt.xlabel("Recall")
plt.ylabel("Precision")
plt.ylim([0, 1.05])
plt.legend()
plt.show()

运行结果:

>>
[1.  0.5 0.5 0. ]
[0.66666667 0.5        1.         1.        ]
[0.35 0.4  0.8 ]
0.7916666666666666
0.8333333333333333

[Python] 二元分类结果之PR曲线的AUC与AP如何计算?

 

【解惑】

  • AUC表明的是PR曲线下面积,是对分类结果的综合评价;AP是平均精确率(Average Precision)二者差异?

       ROC采用梯形计算法则(Trapezoidal rule),计算图中淡蓝色区域面积[Python] 二元分类结果之PR曲线的AUC与AP如何计算?,而[Python] 二元分类结果之PR曲线的AUC与AP如何计算?使用线性插值(linear interpolation).如下图绿色区域所示。

[Python] 二元分类结果之PR曲线的AUC与AP如何计算?

 

【结论】

  • 单纯计算平均精确率可以用AP,更进一步,若是计算曲线下方面积来进行精细的性能对比,则使用AUC。对于非线性曲线,二者一般不能替换。