【评价指标】如何计算模型评估中的AUC和AUPR值
[1]如何理解机器学习和统计中的AUC?[2]机器学习中auc与aupr 指的是什么?[3]详解scikit-learn计算ROC/AUC曲线
计算模型的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研究
更多推荐
所有评论(0)