机器学习中的ROC曲线与AUC指标的意义与代码实现 & 与PR曲线的比较

ROC曲线与AUC指标是机器学习中的常用评价方法。
ROC曲线与AUC指标理解

混淆矩阵:

矩阵
TP = True Postive = 真正例(真阳性);
FP = False Positive = 假正例(假阳性);
FN = False Negative = 假负例(假阴性);
TN = True Negative = 真负例(真阴性)。

ROC曲线

用来绘制ROC曲线的纵坐标是TPR(True Positive Rate),横坐标是FPR(False Positive Rate)

指标意义
FPR(假正例率)FP / ( FP + TN ) = FP / F(真实值为负例,而预测为正例的比例)
TPR(真正例率)TP / ( TP+FN ) = TP / T (真实值是正例,且预测为正例的比例)(同召回率)

绘制方法

机器学习的的输出是对样本的一个实值或概率预测,然后将这个预测值与一个分类阈值进行比较,若大于阈值分为正类,否则为反类,分类阈值即为截断点。(比如截取点为0.5,大于0.5为正例,小于0.5为负例)

比如有一组数据如下。把学习器输出的,该样本为正例的概率,记为Score。GT即GroundTruth,即样本真实分类。

1.按Score从大到小排列。

数据

2.依次对每个阈值计算FPR、TPR

每次取的分类阈值即为当前Score值(比如第一次取1,第二次取0.9,第三次取0.8,以此类推)。然后每次以当前Score作为截断点对所有样本的预测概率进行归类,根据该分类计算当前的FPR、TPR。取值分析:

  • 随着阈值减小,将有更多样本被判为正例;

  • 当取到的阈值将所有样本判为正例时,TPR=1,FPR=1,因此最大值一定取在右上顶点;

  • 当取到的阈值将所有样本判为负例时,TPR=0,FPR=0,因此最小值一定取在右上顶点。

曲线
(横坐标为False positive rate)
图中曲线上标的数字即为当前使用的分类阈值(截断点)。

代码

调用sklearn.metrics的roc_curve函数计算:

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

# 输入数据,GT(真值)以及score(分类阈值)
gt = np.array([0,1,0,1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,1,1]) 
scores = np.array([0.1,0.3,0.33,0.34,0.35,0.36,0.37,0.38,0.39,0.4,0.505,0.51,0.52,0.53,0.54,0.55,0.6,0.7,0.8,0.9])

fpr, tpr, thresholds = roc_curve(gt, scores, pos_label=1) # 设置正标签为1
print(fpr)
print(tpr)
print(thresholds)

结果:

[0.  0.  0.  0.1 0.1 0.3 0.3 0.4 0.4 0.5 0.5 0.8 0.8 0.9 0.9 1. ]
[0.  0.1 0.2 0.2 0.5 0.5 0.6 0.6 0.7 0.7 0.8 0.8 0.9 0.9 1.  1. ]
[1.9   0.9   0.8   0.7   0.54  0.52  0.51  0.505 0.4   0.39  0.38  0.35
 0.34  0.33  0.3   0.1  ]

调用matplotlib.pyplot可视化:

plt.plot(fpr,tpr,linewidth=2,label="ROC")
plt.xlabel("false positive rate")
plt.ylabel("true positive rate")

plt.show()

结果:
在这里插入图片描述

计算AUC

from sklearn.metrics import roc_auc_score

# 输入同样是GT和score
auc = roc_auc_score(gt, scores)
print(auc)

结果

0.6799999999999999
ROC与PR曲线

两者定义:

曲线区别
ROC曲线FPR为横坐标,TPR为纵坐标
PR曲线recall为横坐标,precision 为纵坐标

其中:

指标计算
FPRFP / ( FP + TN ) = FP / F
TPR(同召回率)TP / ( TP+FN ) = TP / T
精确率(precision)TP / ( TP+FP ) = TP / P
召回率(recall)TP / (TP + FN ) = TP / T

精确度意义:预测为正例的样本中真实正例比例(查准)。
召回率意义:所有真实正例中被预测为正例的比例(查全)。

精确率(precision) 与召回率(recall)的理解:
https://blog.csdn.net/Parzival_/article/details/107286321

两者的比较

  • ROC曲线越偏向左上角越好(真阳率大,假阳率小),PR曲线越偏向右上角越好(精确率、召回率都大)。
  • 数据集以及预测结果一定时,ROC和PR对应的混淆矩阵是相同的,且ROC的Y轴指标TPR和PR的X轴指标召回率是等价的。
  • PR曲线对正负样本不平衡比较敏感。ROC曲线不敏感。 因为当负样本远多于正样本时,对于ROC中FPR的计算公式而言,随着FP的波动,FPR不会有太大波动;而对于PR中的精确率公式来说,由于TP很少,随着FP的波动,精确率会有较大波动。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值