机器学习基础---分类评价指标---ROC/AUC

本文深入解析ROC曲线和AUC的定义与计算方法,通过混淆矩阵介绍TPR、FPR等关键概念,详述不同截断点下TPR与FPR的计算过程,并展示如何使用sklearn绘制ROC曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模型评估方法概貌

分类模型评估:

在这里插入图片描述

回归模型评估:

在这里插入图片描述

ROC和AUC定义

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。

计算ROC需要知道的关键概念

混淆矩阵

首先,解释几个二分类问题中常用的概念:True Positive, False Positive, True Negative, False Negative。它们是根据真实类别与预测类别的组合来区分的。

假设有一批test样本,这些样本只有两种类别:正例和反例。机器学习算法预测类别如下图(左半部分预测类别为正例,右半部分预测类别为反例),而样本中真实的正例类别在上半部分,下半部分为真实的反例。

预测值为正例,记为P(Positive)
预测值为反例,记为N(Negative)
预测值与真实值相同,记为T(True)
预测值与真实值相反,记为F(False)

在这里插入图片描述

TP:预测类别是P(正例),真实类别也是P
FP:预测类别是P,真实类别是N(反例)
TN:预测类别是N,真实类别也是N
FN:预测类别是N,真实类别是P
TPR与FPR

样本中的真实正例类别总数即TP+FN。
TPR即True Positive Rate,TPR = TP/(TP+FN)。
TPR: 在所有实际为阳性的样本中,被正确地判断为阳性的比率 TRP = TP / (TP + FN)
<也称为正样本的召回率,或者查全率,或者覆盖率>

同理,样本中的真实反例类别总数为FP+TN。
FPR即False Positive Rate,FPR=FP/(TN+FP)。
FPR:在所有实际为阴性的样本中,被错误地判断为阳性的比率 FPR = FP / (FP + TN)
<也称为负样本的召回率,或者取伪率>

顺带说一下其他几个二级指标

公式意义
准确率accuracy =(TP+TN)/(TP+TN+FP+FN)分类模型所有判断正确的结果占总观测值的比重
精确率 、查准率、命中率precision = TP/(TP+FP)在模型观测是positive的所有结果中,模型预测对的比重
TPR、灵敏度、召回率 、查全率、覆盖率sensitivity=recall = TP/(TP+FN)在真实值是positive的所有结果中,模型预测对的比重
特异度specificity = TN/(TN+FP)在真实值是negative的所有结果中,模型预测对的比重
FPR、取伪率、负样本召回率FPR = FP/(TN+FP)在真实值是negative的所有结果中,模型预测错(模型预测为positive)的比重
截断点

还有一个概念叫”截断点”。机器学习算法对test样本进行预测后,可以输出各test样本对某个类别的相似度概率。比如t1是P类别的概率为0.3,一般我们认为概率低于0.5,t1就属于类别N。这里的0.5,就是”截断点”。

ROC曲线

总结一下,对于计算ROC,最重要的三个概念就是TPR, FPR, 截断点

截断点取不同的值,TPR和FPR的计算结果也不同**。
**将截断点不同取值下对应的TPR和FPR结果画于二维坐标系中得到的曲线,就是ROC曲线。横轴用FPR表示。

ROC曲线绘制过程

参考:ROC曲线学习总结
ROC曲线的绘制步骤如下:

  • 假设已经得出一系列样本被划分为正类的概率Score值,按照大小排序。
  • 从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于某个样本,其“Score”值为0.6,那么“Score”值大于等于0.6的样本都被认为是正样本,而其他样本则都认为是负样本。
  • 每次选取一个不同的threshold,得到一组FPR和TPR,以FPR值为横坐标和TPR值为纵坐标,即ROC曲线上的一点。
  • 根据3中的每个坐标点,画图。


-------------------------------------------------------------------------------------------------华丽的分割线--------------------------------------------------------

sklearn计算ROC

sklearn给出了一个计算ROC的例子[1]。

y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)

通过计算,得到的结果(TPR, FPR, 截断点)为

fpr = array([ 0. ,  0.5,  0.5,  1. ])
tpr = array([ 0.5,  0.5,  1. ,  1. ])
thresholds = array([ 0.8 ,  0.4 ,  0.35,  0.1 ])#截断点

将结果中的FPR与TPR画到二维坐标中,得到的ROC曲线如下(蓝色线条表示),ROC曲线的面积用AUC表示(淡黄色阴影部分)。
在这里插入图片描述

ROC详细计算过程(对应了曲线的绘制过程)

上例给出的数据如下

y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])

用这个数据,计算TPR,FPR的过程是怎么样的呢?

1. 分析数据

y是一个一维数组(样本的真实分类)。数组值表示类别(一共有两类,1和2)。我们假设y中的1表示反例,2表示正例。即将y重写为:

y_true = [0, 0, 1, 1]

score即各个样本属于正例的概率。

2. 针对score,将数据排序
在这里插入图片描述

3. 将截断点依次取为score值
将截断点依次取值为0.1,0.35,0.4,0.8时,计算TPR和FPR的结果。

3.1 截断点为0.1
说明只要score>=0.1,它的预测类别就是正例。
此时,因为4个样本的score都大于等于0.1,所以,所有样本的预测类别都为P。

scores = [0.1, 0.4, 0.35, 0.8]
y_true = [0, 0, 1, 1]
y_pred = [1, 1, 1, 1]
在这里插入图片描述

TPR = TP/(TP+FN) = 1
FPR = FP/(TN+FP) = 1

以此类推,计算其他几个截断点的TPR和FPR的结果
3.2 截断点为0.35
3.3 截断点为0.4
3.4 截断点为0.8

参考文献

ROC曲线学习总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值