机器学习 之 ROC曲线,混淆矩阵

本文详细介绍了混淆矩阵,包括各类术语如准确率、精准率、召回率和F1分数,以及如何通过ROC曲线和AUC评价模型在样本不平衡情况下的性能。重点讲解了TPR、FPR、ROC曲线和AUC的计算原理及应用,以及如何选择最佳阈值和理解AUC的判断标准。

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

混淆矩阵就是这个
在这里插入图片描述
P(Positive):代表1
N(Negative):代表0
T(True):代表预测正确
F(False):代表预测错误

TP:预测正确,预测为1,即实际1
FP:预测错误,预测为1,即实际0
FN:预测错误,预测为0,即实际1
TN:预测正确,预测为0,即实际0
在这里插入图片描述
这就是混淆矩阵?

准确率=(TP+TN)/(TP+TN+FP+FN)
由于样本不平衡的问题,导致了得到的高准确率结果含有很大的水分。即如果样本不平衡,准确率就会失效。

精准率=TP/(TP+FP) 自欺欺人准确率
精准率(Precision)又叫查准率,它是针对预测结果而言的,它的含义是在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确

召回率=TP/(TP+FN) 又红又专准确率
召回率(Recall)又叫查全率,它是针对原样本而言的,它的含义是在实际为正的样本中被预测为正样本的概率,比如拿网贷违约率为例,相对好用户,我们更关心坏用户,不能错放过任何一个坏用户。因为如果我们过多的将坏用户当成好用户,这样后续可能发生的违约金额会远超过好用户偿还的借贷利息金额,造成严重偿失。召回率越高,代表实际坏用户被预测出来的概率越高,它的含义类似:宁可错杀一千,绝不放过一个。

精准率和召回率的分子是相同,都是TP,但分母是不同的,一个是(TP+FP),一个是(TP+FN)。两者的关系可以用一个P-R图来展示:
在这里插入图片描述
比如,我们定义了阈值为0.5,即概率小于0.5的我们都认为是好用户,而大于0.5都认为是坏用户。因此,对于阈值为0.5的情况下,我们可以得到相应的一对查准率和查全率。但问题是:这个阈值是我们随便定义的,我们并不知道这个阈值是否符合我们的要求。因此,为了找到一个最合适的阈值满足我们的要求,我们就必须遍历0到1之间所有的阈值,而每个阈值下都对应着一对查准率和查全率,从而我们就得到了这条曲线。如何找到最好的阈值点呢?首先,需要说明的是我们对于这两个指标的要求:我们希望查准率和查全率同时都非常高。但实际上这两个指标是一对矛盾体,无法做到双高。通常,如果想要找到二者之间的一个平衡点,我们就需要一个新的指标:F1分数。F1分数同时考虑了查准率和查全率,让二者同时达到最高,取一个平衡。F1分数的公式为 = 2查准率查全率 / (查准率 + 查全率)。我们在图中看到的平衡点就是F1分数得来的结果。

在正式介绍ROC/AUC之前,我们还要再介绍两个指标,这两个指标的选择也正是ROC和AUC可以无视样本不平衡的原因。这两个指标分别是:灵敏度和(1-特异度),也叫做真正率(TPR)和假正率(FPR)。

灵敏度(Sensitivity) = TP/(TP+FN) # 在全体正样本中预测正确的
特异度(Specificity) = TN/(FP+TN) # 在全体负样本中预测错误的

其实我们可以发现灵敏度和召回率是一模一样的,只是名字换了而已。由于我们比较关心正样本,所以需要查看有多少负样本被错误地预测为正样本,所以使用(1-特异度),而不是特异度。

真正率(TPR) = 灵敏度 = TP/(TP+FN)
假正率(FPR) = 1- 特异度 = FP/(FP+TN)

我们发现TPR和FPR分别是基于实际表现1和0出发的,也就是说它们分别在实际的正样本和负样本中来观察相关概率问题。正因为如此,所以无论样本是否平衡,都不会被影响。还是拿之前的例子,总样本中,90%是正样本,10%是负样本。我们知道用准确率是有水分的,但是用TPR和FPR不一样。这里,TPR只关注90%正样本中有多少是被真正覆盖的,而与那10%毫无关系,同理,FPR只关注10%负样本中有多少是被错误覆盖的,也与那90%毫无关系,所以可以看出:如果我们从实际表现的各个结果角度出发,就可以避免样本不平衡的问题了,这也是为什么选用TPR和FPR作为ROC/AUC的指标的原因。

ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC曲线是基于混淆矩阵得出的。ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC曲线是基于混淆矩阵得出的。
在这里插入图片描述
改变阈值只是不断地改变预测的正负样本数,即TPR和FPR,但是曲线本身是不会变的。那么如何判断一个模型的ROC曲线是好的呢?这个还是要回归到我们的目的:FPR表示模型虚报的响应程度,而TPR表示模型预测响应的覆盖程度。我们所希望的当然是:虚报的越少越好,覆盖的越多越好。所以总结一下就是TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好。为了计算 ROC 曲线上的点,我们可以使用不同的分类阈值多次评估逻辑回归模型,但这样做效率非常低。幸运的是,有一种基于排序的高效算法可以为我们提供此类信息,这种算法称为曲线下面积(Area Under Curve)。比较有意思的是,如果我们连接对角线,它的面积正好是0.5(三角形)。对角线的实际含义是:随机判断响应与不响应,正负样本覆盖率应该都是50%,表示随机效果。ROC曲线越陡越好,所以理想值就是1,一个正方形,而最差的随机判断都有0.5,所以一般AUC的值是介于0.5到1之间的。
AUC的一般判断标准
0.5 - 0.7:效果较低,但用于预测股票已经很不错了
0.7 - 0.85:效果一般
0.85 - 0.95:效果很好
0.95 - 1:效果非常好,但一般不太可能

在这里插入图片描述
实际上就是两个指标的坐标图,既然形成一条线,那么就会有很多这样的坐标,真实场景中ROC曲线一般都会在y=x这条直线的上方,所以AUC的取值一般在0.5~1之间。AUC的值越大,说明该模型的性能越好。
因为是相互制约的关系,识别一连串的样本,必然会大致形成一个分布的,相比于其他的P-R曲线(精确度和召回率),ROC曲线有一个巨大的优势就是,当正负样本的分布发生变化时,其形状能够基本保持不变,而P-R曲线的形状一般会发生剧烈的变化,因此该评估指标能降低不同测试集带来的干扰,更加客观的衡量模型本身的性能。

比如一堆飞机,让多个雷达兵去判断,雷达兵判断的结果就是一个坐标,许多雷达兵形成一条曲线。每一个雷达兵内心都有自己的一个判断标准(也即对应分类器的不同“阈值”),这样针对每一个雷达兵,都能计算出一个ROC曲线上的关键点(一组FPR,TPR值),把大家的点连起来,也就是最早的ROC曲线了。对,不同的阙值是不同坐标的关键。阙值来自于样本的取值范围。取值越密就越精确,就是这样。就是把横轴的刻度间隔设为 1 N \frac{1}{N} N1,纵轴的刻度间隔设为 1 P \frac{1}{P} P1,N,P分别为负样本与正样本数量。就计算好了。然后再根据模型的输出结果降序排列,依次遍历样本,从0开始绘制ROC曲线,每遇到一个正样本就沿纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿横轴方向绘制一个刻度间隔的曲线,遍历完所有样本点以后,曲线也就绘制完成了。

### 混淆矩阵ROC曲线的区别、联系及其使用方法 #### 区别 混淆矩阵ROC曲线机器学习模型评估中有不同的侧重点。 1. **粒度与概述** - 混淆矩阵提供的是逐类细分的模型性能分析,能够帮助识别模型在哪一类上表现不佳[^2]。 - ROC曲线则给出整体概览,展示模型在整个阈值范围内的判别能力,并通过AUC(曲线下面积)量化总体性能。 2. **数据集不平衡的影响** - 对于类别不平衡的数据集,混淆矩阵中的精确率召回率等指标能更直观反映问题所在。 - 而ROC曲线由于未直接考虑类别比例,在这种情况下可能会显得不够敏感。 3. **适用场景** - 混淆矩阵适用于二分类以及多分类任务,可针对每种类别单独评价其预测效果。 - ROC曲线主要用于二分类情境下研究不同决策边界带来的影响;不过也可以推广至多分类情形。 4. **阈值依赖性** - 混淆矩阵基于单一固定的判定标准来计算各项统计量。 - ROC曲线描绘了随着阈值变化时真阳性率(TPR)相对于假阳性率(FPR)的变化趋势[^3]。 #### 联系 两者均用于衡量分类器的表现质量,且存在一定的关联: - 构建ROC曲线的基础正是来自多个混淆矩阵的结果集合。具体而言,每一个特定阈值对应的TPRFPR可以从相应的混淆矩阵中提取出来形成该点坐标[^3]。 - AUC作为综合考量整个操作空间效能的重要参数之一,实际上是对一系列离散化后的局部区域求积分得到总覆盖面积的过程,这些局部即是由各个独立测试所得出的不同状态下的混淆表贡献而成。 #### 使用方法 以下是两种工具的具体应用指南: ##### 混淆矩阵 - 计算各类别的真正例(True Positive),假正例(False Positive),真反例(True Negative),假反例(False Negative)[^5]。 - 进一步衍生出准确率(Accuracy),精准度(Precision),召回率(Recall/Sensitivity),特异度(Specificity)等一系列关键绩效指示符(KPIs)[^4]。 ##### ROC曲线 - 设定多种可能性判断界限P∈[0,1],分别记录每次试验产生的实际观测值对{(FP_rate_i , TP_rate_i)}并绘制成图象表示形式。 - 利用数值积分技术估算总面积大小以获得最终评分结果——AUC得分越高表明系统越优秀。 ```python from sklearn.metrics import confusion_matrix, roc_curve, auc import matplotlib.pyplot as plt import numpy as np # Example data generation (replace with your actual dataset) y_true = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) # Confusion Matrix Calculation at default threshold of 0.5 cm_default_threshold = confusion_matrix(y_true, y_scores >= 0.5) 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='--') # Diagonal line representing random guessing. plt.xlim([-0.05, 1.05]) plt.ylim([-0.05, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic Curve') plt.legend(loc="lower right") plt.show() print("Confusion matrix:\n", cm_default_threshold) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值