ROC curve(Receiver operating characteristic)&& EER(Equal Error Rate)

本文深入解析了ROC曲线的概念,及其在二分类问题中的应用。通过调整分类阈值,可以绘制出ROC曲线,用于评估分类器的性能。EER(等错误率)作为ROC曲线与y=1-x直线的交点,是衡量分类器性能的一个关键指标。

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

ROC(Receiver operating characteristic)曲线是True positive rate – False positive rate曲线:

 

对于一个二分类(是/否)分类器而言,根据对测试集的分类结果得到一个(x,y)点,调整threshold阈值大小,再进行实验,就能得到新的(x,y)点。连续地调整阈值,就可以作出ROC曲线。这里的阈值是指分类器判定是或否的依据,比如两个向量的距离大于th则认为不同类,小于th则认为同类,th即为这个阈值。

显然,当th无穷大时,即全部判断是同类,那么会得到(1,1)点。当th无穷小时,即全部判断不是同类,那么会得到(0,0)点。所以,th逐渐变大,样本点会从(0,0)逐渐移动到(1,1)点。

对于随机预测(随机输出是/否),样本点会从(0,0)线性移动到(1,1)点,即样本点一直在(0,0)到(1,1)的直线上。

对于一个分类器,越靠近(0,1)点越好,说明没有负例错判成正例,同时没有正例错判成负例。同理,越靠近(1,0)点越差,说明所有负例都错判成正例,同时所有正例都错判成负例。在(0,0)-(1,1)线左上方说明该分类器优于随机猜测,右下方说明该分类器比不上随机猜测。

EER(equal error rate)是等错误率,即是true positive rate = true negative rate

所以true positive rate = true negative rate = 1 – false positive rate即ROC曲线和y=1-x即x+y=1曲线的交点的纵坐标值即为EER。考虑到th总小到大增大过程中,ROC曲线从(0,0)点到(1,1)点,所以一般情况下EER是唯一的。

下图是一个例子,括号中的数是EER:

### ROC 曲线与 AUC 的概念及应用 #### 什么是ROC曲线? ROC曲线,即受试者工作特征曲线(Receiver Operating Characteristic curve),是一种用于评估分类模型性能的统计工具[^1]。它最初被开发于第二次世界大战期间,由电子工程师和雷达工程师用来检测战场上的敌方车辆。如今,该方法已扩展到多个领域,包括机器学习、医学诊断等。 ROC曲线的核心在于展示分类模型在不同阈值下的表现能力。具体而言,它是通过图形化方式描绘出模型的真正率(True Positive Rate, TPR)与假正率(False Positive Rate, FPR)之间的权衡关系。其中: - **真阳性率 (TPR)** 表示实际为正类的情况下预测也为正的概率。 - **假阳性率 (FPR)** 则表示实际为负类却被错误地预测为正的概率。 #### 如何解读ROC曲线? 一条理想的ROC曲线会尽可能靠近左上角,这意味着模型能够以较高的真正率识别正样本的同时保持较低的假正率。如果曲线接近对角线,则表明模型的表现几乎相当于随机猜测;而越远离对角线则说明模型具有更好的区分能力。 #### AUC的意义是什么? AUC代表的是ROC曲线下面积(Area Under the Curve),其取值范围通常介于0至1之间[^2]。作为衡量二元分类器质量的一个重要标准,较大的AUC值意味着更强的整体辨别力——即使是在调整决策边界之后仍能维持良好效果的能力。一般来说: - 当`AUC=1`时表示完美分离; - 若`AUC≈0.5`可能暗示着近乎无用或者完全失败的结果; - 而对于大多数实用场景下我们期望看到高于此水平但低于完美的数值区间内的结果。 以下是计算并绘制简单例子中的Python实现代码片段: ```python from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt import numpy as np # 假设y_true是我们的真实标签,y_scores是对应的分数(概率估计或其他形式) fpr,tpr,_ =roc_curve(y_true , y_scores ) areaUnderCurve=auc(fpr,tpr) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label=f'ROC curve (area = {areaUnderCurve:.2f})') plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') # 对角线 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() ``` 上述脚本利用Scikit-Learn库函数来获取必要的数据点,并借助Matplotlib完成可视化操作。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值