计算模型的auc、aupr值一般用sklearn的包进行计算,下面是计算auc的详细过程。y_true是数据的真实标签,y_score是模型的预测得分。
  对于计算的auc值,这里详细解释一下什么是auc。AUC的英文是Area Under The Curve,意思就是曲线下的面积,所以这是个抽象的概念。需要指定计算什么曲线下的面积,这样计算出来的数值才有意义。下面的例子计算的是roc曲线的面积(如何理解ROC曲线):

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
roc_auc_score(y_true, y_scores)
输出:0.75
import numpy as np
from sklearn import metrics
y = np.array([0, 0, 1, 1])
pred = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, pred)
metrics.auc(fpr, tpr)
输出:0.75

  以上两种计算roc_auc的方式,得出的结果是一样的。第一种计算方法直接出结果,第二种方法可以得出fpr,tpr的值能够进行画图(详细的区别查看参考文献[4]
  PR曲线概念:PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。

import numpy as np
from sklearn.metrics import average_precision_score, auc
y_true = np.array([0, 0, 1, 1,1,1])
y_scores = np.array([0, 0.5, 0.4, 1,1,1])
print (average_precision_score(y_true, y_scores) )

# 严格定义计算方法
precision, recall, thresholds = precision_recall_curve(y_true, y_scores)
print(auc(recall, precision))
plt.xlabel('Recall')
plt.ylabel('Precision')
# plt.grid()  # 生成网格
 
plt.plot(recall,precision)
plt.figure("P-R Curve")
plt.show()

  上面的两种计算方法都是计算曲线的AUPR值,然而程序算出的结果是0.95, 而严格按照定义算出来的结果是0.94375。我们需要注意这个区别,具体的原因参见参考文献[6]。
  如何绘制AUROC和AUPR曲线绘制AUC和AUPR曲线
  AUC与AUPR的区别是什么?

参考文献

[1]如何理解机器学习和统计中的AUC?
[2]机器学习中auc与aupr 指的是什么?
[3]详解scikit-learn计算ROC/AUC曲线
[4]sklearn:auc、roc_curve、roc_auc_score
[5]PR曲线详解
[6]为什么平均精准度(Average Precision,AP)就是PR曲线的线下面积?
[7]sklearn.metrics import average_precision_score研究

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐