ROC与AUC的定义与使用详解

关注WX公众号: commindtech77, 获得数据资产相关白皮书下载地址

回复关键字:推荐系统
下载《新闻资讯个性化推荐系统源码及白皮书》

分类模型评估:

指标描述Scikit-learn函数
Precision精准度from sklearn.metrics import precision_score
Recall召回率from sklearn.metrics import recall_score
F1F1值from sklearn.metrics import f1_score
Confusion Matrix混淆矩阵from sklearn.metrics import confusion_matrix
ROCROC曲线from sklearn.metrics import roc
AUCROC曲线下的面积from sklearn.metrics import auc

回归模型评估:

指标描述Scikit-learn函数
Mean Square Error (MSE, RMSE)平均方差from sklearn.metrics import mean_squared_error
Absolute Error (MAE, RAE)绝对误差from sklearn.metrics import mean_absolute_error, median_absolute_error
R-SquaredR平方值from sklearn.metrics import r2_score

ROC和AUC定义

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

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

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

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

  • 预测值为正例,记为P(Positive)
  • 预测值为反例,记为N(Negative)
  • 预测值与真实值相同,记为T(True)
  • 预测值与真实值相反,记为F(False)
  • 这里写图片描述

  • TP:预测类别是P(正例),真实类别也是P

  • FP:预测类别是P,真实类别是N(反例)
  • TN:预测类别是N,真实类别也是N
  • FN:预测类别是N,真实类别是P

样本中的真实正例类别总数即TP+FN。TPR即True Positive Rate,TPR = TP/(TP+FN)。 
同理,样本中的真实反例类别总数为FP+TN。FPR即False Positive Rate,FPR=FP/(TN+FP)。

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

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

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)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

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

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 ])#截断点
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

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

这里写图片描述

详细计算过程

上例给出的数据如下

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

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

1. 分析数据

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

y_true = [0, 0, 1, 1]
  • 1
  • 1

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

2. 针对score,将数据排序

样本预测属于P的概率(score)真实类别
y[0]0.1N
y[2]0.35P
y[1]0.4N
y[3]0.8P

3. 将截断点依次取为score值

截断点依次取值为0.1,0.35,0.4,0.8时,计算TPRFPR的结果。

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]
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述

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

3.2 截断点为0.35

说明只要score>=0.35,它的预测类别就是P。 
此时,因为4个样本的score有3个大于等于0.35。所以,所有样本的预测类有3个为P(2个预测正确,1一个预测错误);1个样本被预测为N(预测正确)。

scores = [0.1, 0.4, 0.35, 0.8]
y_true = [0, 0, 1, 1] 
y_pred = [0, 1, 1, 1]
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述

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

3.3 截断点为0.4

说明只要score>=0.4,它的预测类别就是P。 
此时,因为4个样本的score有2个大于等于0.4。所以,所有样本的预测类有2个为P(1个预测正确,1一个预测错误);2个样本被预测为N(1个预测正确,1一个预测错误)。

scores = [0.1, 0.4, 0.35, 0.8]
y_true = [0, 0, 1, 1] 
y_pred = [0, 1, 0, 1]
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述

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

3.4 截断点为0.8

说明只要score>=0.8,它的预测类别就是P。所以,所有样本的预测类有1个为P(1个预测正确);3个样本被预测为N(2个预测正确,1一个预测错误)。

scores = [0.1, 0.4, 0.35, 0.8]
y_true = [0, 0, 1, 1] 
y_pred = [0, 0, 0, 1]
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述

TPR = TP/(TP+FN) = 0.5 
FPR = FP/(TN+FP) = 0

心得

用下面描述表示TPR和FPR的计算过程,更容易记住

  • TPR:真实的正例中,被预测正确的比例
  • FPR:真实的反例中,被预测正确的比例

最理想的分类器,就是对样本分类完全正确,即FP=0,FN=0。所以理想分类器TPR=1,FPR=0。

参考:

  1. sklearn.metrics.roc_curve — scikit-learn 1.3.2 documentation
  2. ROC计算公式,http://blog.yhat.com/posts/roc-curves.html
  3. 《机器学习》,周志华
<think>好的,我现在要为用户介绍AUC曲线。首先,我需要回忆AUC的基本概念,确保自己理解正确。AUC是Area Under Curve的缩写,通常指的是ROC曲线下的面积。对吧?那ROC曲线是什么呢?ROC是Receiver Operating Characteristic曲线,用于评估二分类模型的性能。接下来,我需要解释清楚AUC的意义,以及它的计算方法和应用场景。 用户可能想知道AUC为什么重要,所以得说明AUC如何衡量分类器的整体性能,尤其是区分正负样本的能力。记得要提到AUC的取值范围在0到1之间,值越大表示模型性能越好。这时候可能会联想到,AUC=0.5相当于随机猜测,而1则表示完美分类。需要确认这些信息是否正确。 然后,关于ROC曲线的绘制,横轴是假正率(FPR),纵轴是真正率(TPR)。需要分步骤说明如何通过调整分类阈值来得到不同的点,连成曲线。这部分可能需要举例说明,比如不同阈值下TPR和FPR的变化,这样用户更容易理解。 另外,用户可能想知道AUC的具体计算方式。是否应该提到积分或者梯形法?比如,AUC可以通过积分计算ROC曲线下的面积,或者用近似方法如梯形法则。这部分需要准确,但也要避免过于复杂的数学公式,保持简洁。根据系统指令,数学表达式需要用$$...$$格式,比如AUC的计算公式可能需要用积分表达式,但如果是独立公式的话要用双美元符号。 可能还需要比较AUC和其他评估指标,比如准确率、精确率、召回率的区别,强调AUC在处理不平衡数据时的优势。比如,当正负样本比例悬殊时,准确率可能不准确,而AUC更能反映模型的真实性能。 同时,要提醒用户AUC的局限性,比如对概率绝对值的评估不敏感,或者在某些情况下可能不够直观。例如,AUC高但实际业务场景中可能需要更关注某一类的预测准确率,这时候可能需要结合其他指标。 需要检查是否有遗漏的关键点,比如AUCROC的关系,AUC的解读方法,以及实际应用中的例子。确保结构清晰,分步骤解释,符合用户可见层的要求。同时,注意使用中文,避免术语混淆,必要时用例子辅助说明。 最后,回顾系统级指令,确保所有数学表达式格式正确,行内公式用$...$,独立公式用$$...$$。例如,在提到TPR和FPR时,可能需要用行内公式,如$TPR = \frac{TP}{TP + FN}$,而独立公式如积分表达式则需要用双美元符号。 现在把这些思路组织成连贯的段落,分点解释,确保逻辑清晰,帮助用户逐步理解AUC曲线。</think>AUC曲线(Area Under the ROC Curve)是评估二分类模型性能的重要指标,它通过量化ROC曲线下的面积来衡量模型的整体区分能力。以下分步介绍其核心概念和应用: --- ### 1. **ROC曲线的定义** ROC(Receiver Operating Characteristic)曲线描述模型在不同分类阈值下的表现,横轴为**假正率(FPR)**,纵轴为**真正率(TPR)**: - $$FPR = \frac{FP}{FP + TN}, \quad TPR = \frac{TP}{TP + FN}$$ - $FP$:负样本被错误预测为正的数量 - $TP$:正样本被正确预测的数量 - $TN$和$FN$分别为正确预测的负样本和错误预测的正样本数量。 --- ### 2. **AUC的意义** AUCROC曲线下的面积,取值范围为$[0, 1]$: - **AUC=1**:完美分类器,正负样本完全可分。 - **AUC=0.5**:等同于随机猜测(对角线)。 - **AUC>0.5**:模型优于随机分类,值越大性能越强。 --- ### 3. **AUC的计算方法** AUC通过积分或近似方法计算: $$AUC = \int_{0}^{1} TPR(FPR) \, d(FPR)$$ 实际应用中,常通过以下步骤估算: 1. 对所有样本按预测概率从高到低排序。 2. 遍历样本,统计正样本排在负样本前的概率。 --- ### 4. **AUC的优势** - **不依赖阈值**:综合评估所有可能的分类阈值。 - **类别不平衡鲁棒性**:相比准确率,AUC对正负样本比例不敏感。 - **直观对比模型**:直接通过面积大小判断模型优劣。 --- ### 5. **AUC的局限性** - **忽略绝对概率值**:仅关注排序能力,不评估预测概率的校准程度。 - **特定场景需结合其他指标**:如需要高精确率或召回率时,需补充F1分数等。 --- ### 示例说明 假设模型A的AUC为0.85,模型B为0.75: - 模型A的排序能力更强,能更好区分正负样本。 - 但若业务要求极低假正率(如医疗诊断),需进一步观察ROC曲线局部表现。 --- ### 总结 AUC曲线通过“曲线下面积”全面反映模型的分类性能,是处理二分类问题尤其是类别不平衡时的核心评估工具。实际应用中,需结合业务需求其他指标(如PR曲线)共同分析。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值