1. 概念

  PR曲线实则是以precision(精准率)和recall(召回率)这两个为变量而做出的曲线,其中recall为横坐标,precision为纵坐标。一条PR曲线要对应一个阈值。通过选择合适的阈值,比如50%,对样本进行划分,概率大于50%的就认为是正例,小于50%的就是负例,从而计算相应的精准率和召回率。如果一个学习器的P-R曲线被另一个学习器的P-R曲线完全包住,则可断言后者的性能优于前者。我们还可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点或者是F1值。平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。而F1=2×P×R/(P+R),同样,F1值越大,我们可以认为该学习器的性能较好。

2.度量

  四个重要的度量:精确率(查准率),召回率(查全率),真正例率,假正例率。

  ①精确率(P): P=TP/(TP+FP)

   ②召回率(R): R=TP/(TP+FN)

  ③真正例率(TPR): TPR=TP/(TP+FN)

  ④假正例率(FPR): FPR=FP/(TN+FP)

  P(查准率):即预测结果中真正的正例的比例。

   R(查全率):即所有正例中被正确预测出来的比例。

3.混淆矩阵

  表示模型讲样本分类结果的矩阵。

  真实结果为正例 真实结果为负例
预测结果为正例 TP FP
预测结果为负例 FN TN

 

4.代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve,roc_curve
 
 
def draw_pr(confidence_scores, data_labels):
    plt.figure()
    plt.title('PR Curve')
    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.grid()
 
    #精确率,召回率,阈值
    precision,recall,thresholds = precision_recall_curve(data_labels,confidence_scores)
 
    from sklearn.metrics import average_precision_score
    AP = average_precision_score(data_labels, confidence_scores) # 计算AP
    plt.plot(recall, precision, label = 'pr_curve(AP=%0.2f)' % AP)
    plt.legend()
    plt.show()
 
def draw_roc(confidence_scores, data_labels):
    #真正率,假正率
    fpr, tpr, thresholds = roc_curve(data_labels, confidence_scores)
    plt.figure()
    plt.grid()
    plt.title('Roc Curve')
    plt.xlabel('FPR')
    plt.ylabel('TPR')
 
    from sklearn.metrics import auc
    auc=auc(fpr, tpr) #AUC计算
    plt.plot(fpr,tpr,label = 'roc_curve(AUC=%0.2f)' % auc)
    plt.legend()
    plt.show()
 
 
if __name__ == '__main__':
    # 正样本的置信度,即模型识别成1的概率
    confidence_scores = np.array([0.9, 0.78, 0.6, 0.46, 0.4, 0.37, 0.2, 0.16])
    # 真实标签
    data_labels = np.array([1,1,0,1,0,0 ,1,1])
 
    draw_pr(confidence_scores, data_labels)
    draw_roc(confidence_scores, data_labels)

 

参考来源:

https://blog.csdn.net/Guo_Python/article/details/105820358?ops_request_misc=&request_id=&biz_id=102&utm_term=PR%E6%9B%B2%E7%BA%BF&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-9-105820358.142^v59^pc_rank_34_1,201^v3^control_2&spm=1018.2226.3001.4187

posted on 2022-10-19 23:09  Moonee  阅读(1365)  评论(0)    收藏  举报