ROC曲线和AUC

ROC全称Receiver Operating Curve,最早应用于二战时的雷达探测,以评价信号侦测模型的优劣。在机器学习领域,ROC曲线同样用于模型效果的评价。

ROC曲线样例如下图所示,其横坐标为假正率(FPR),纵坐标为真正率(TPR),曲线上的点对应不同阈值下的模型(FPR,TPR)。
ROC理解的难点就在于阈值的变化,能够造成FPR和TPR的变化,从而形成曲线。
当判断正负样本的阈值为极端小时,所有的样本均为正样本,此时假正(FP)样本等于负样本(N)的量,即FPR=FP/N=100%;真正(TP)样本等于正样本的量,即TPR=TP/P=100%,这就形成了曲线右上角的点(1,1)。
当判断正负样本的阈值为极端大时,所有的样本均为负样本,此时假正(FP)样本数量为0(因为没有正样本),即FPR=FP/N=0;真正(TP)样本也为0,即TPR=TP/P=0,这就形成曲线左下角的点(0,0)。
当阈值设为极端小和极端大之间时,(FPR,TPR)在(0,0)和(1,1)之间滑动,从而形成ROC曲线。

AUC全称Area Under Curve,表示ROC曲线下的面积,一般认为AUC数值越大,则模型效果越好。图形中的蓝色虚线为参考线,表示随机模型的效果,在蓝色虚线下的模型,效果逊于随机模型。



python sklearn中有专门的绘制ROC曲线的包,如下示例代码供参考。
from sklearn import metrics
import matplotlib.pyplot as plt
# y_real表示实际值(或实际类别),y_pred表示预测值(或预测概率)
fpr, tpr, thresholds = metrics.roc_curve(y_real, y_pred, pos_label=1)
roc_auc = metrics.auc(fpr, tpr)
plt.figure()
plt.plot(fpr, tpr, color='darkorange',
         lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')


### ROC曲线AUC的概念及其在机器学习中的使用方法 #### 1. ROC曲线的基本概念 ROC(Receiver Operating Characteristic)曲线是一种用来评估二分类模型性能的工具。该曲线通过绘制真阳性率(TPR,True Positive Rate)作为纵轴,假阳性率(FPR,False Positive Rate)作为横轴,在不同分类阈值下形成的一条连续曲线[^1]。其核心在于展示模型在区分正负样本时的能力。 - **真阳性率 (TPR)**:也称为灵敏度或召回率,表示实际为正类的样本中被正确预测的比例 \( \text{TPR} = \frac{\text{TP}}{\text{TP}+\text{FN}} \)[^2]。 - **假阳性率 (FPR)**:表示实际为负类却被错误标记为正类的概率 \( \text{FPR} = \frac{\text{FP}}{\text{TN}+\text{FP}} \)[^3]。 #### 2. AUC的意义 AUC(Area Under Curve),即ROC曲线下方的面积,是一个综合衡量分类器好坏的标准。理想情况下,完美的分类器对应着一条经过左上角 (0,1) 的直线,此时 AUC 值等于 1;而随机猜测的结果会得到接近 0.5 的 AUC 值[^1]。通常认为: - 当 AUC ≥ 0.9,则说明模型具有极强的区分能力; - 若 0.7 ≤ AUC < 0.9 表明模型有较好的判别力; - 如果 0.6 ≤ AUC < 0.7 则仅具备一般性的分辨效果; - 对于 AUC ≈ 0.5 的情况意味着几乎没有预测价值[^3]。 #### 3. 使用方法 为了利用 ROC 曲线 AUC 来分析模型的表现,可以遵循如下流程: - 首先训练好一个二元分类模型,并获取测试集中每个样例属于某一类别的概率分数; - 接下来按照降序排列这些得分并依次选取不同的截断作为新的决策界限重新计算混淆矩阵的各项统计量; - 绘制出相应的 TPR-FPR 图像即可获得完整的 ROC 曲线图谱; - 计算所围区域大小便能得到具体的 AUC 数值[^2]。 以下是 Python 中实现这一过程的一个简单例子: ```python import numpy as np from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 假设已知真实标签y_true=[0,1,...], 模型输出概率y_scores=[0.1,0.8,...] fpr, tpr, thresholds = roc_curve(y_true, y_scores) roc_auc = auc(fpr, tpr) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label=f'ROC curve (area = {roc_auc:.2f})') plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') # Random guess line plt.xlim([-0.05, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") plt.show() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值