机器学习-混淆矩阵、ROC曲线和AUC图像

本文深入探讨了监督学习中模型评估的重要概念,包括混淆矩阵、准确率、召回率、精准率、F值等评价指标,以及ROC曲线和AUC值在二分类问题中的应用与解读。

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

在监督问题中,混淆矩阵可用作模型评估,一般常见于分类问题。

基本模型如图

横向代表真实值,纵向代表预测值。真正例指预测为正实际也为正的值,假负例是预测为负实际为正的值,假正例是预测为正实际为负的值,真负例指预测为负实际为负的值。

由此引出了模型效果评估的评价指标

准确率(Accuracy)=提取出的正确样本数/总样本数

召回率(Recall)=正确的正例样本数/样本中的正例样本数——覆盖率

精准率(Precision)=正确的正例样本数/预测为正例的样本数

F值=Precision*Recall*2 / (Precision+Recall) (即F值为正确率和召回率的调和平均值)

Accuracy=\frac{A+D}{A+B+C+D}

Recall=\frac{A}{A+B}

Precision=\frac{A}{A+C}

F=\frac{2*Recall*Precision}{Recall+Precision}

用的比较多的是准确率和召回率

 

ROC和AUC

ROC(Receiver Operating Characteristic)最初源于20世纪70年代的信号检测理论,描述的是分类混淆矩阵中FPR-TPR两个量之间的相对变化情况,其纵轴是“真正例率”(TPR),横轴是“假正例率”(FPR)。

TPR=\tfrac{tp}{tp+fn}=\tfrac{A}{A+B}

FPR=\tfrac{fp}{fp+tn}=\tfrac{C}{C+D}

由图可知,当FPR越小,TPR越大时,模型效果越好,随着FPR的增加,TPR增加的越快,模型越好,反映了其在二分类问题描述的优势。

AUC(Area Under Curve)被定义为ROC曲线下的面积,由图知,该面积不会超过1.

简述下其计算方法:

AUC=\tfrac{\sum I(P_T, P_F)}{M*N}

即在有M个正样本,N个负样本的数据集里。一共有M*N对样本(一对样本即,一个正样本与一个负样本)。统计这M*N对样本里,正样本的预测概率大于负样本的预测概率的个数。

例子如下

当AUC的值为1时,即为完美分类器;当0.5<AUC<1,即为优于随机猜想;当AUC<0.5,比随机猜想还差,需反其道而行之。

### 机器学习中的ROC曲线AUC #### 定义与背景 ROC曲线,即接收者操作特征曲线,在二战时期首次应用于信号检测领域,用于侦测战场上的敌军载具。如今,这一工具广泛应用于评估二分类模型的性能[^2]。 对于给定的数据集,当存在两个类别时,可以通过调整决策边界来改变预测的结果分布。此时,真阳性率(TPR)假阳性率(FPR)成为衡量模型好坏的关键指标: - **真阳性率 (TPR)**:表示实际为正类且被正确识别的比例; - **假阳性率 (FPR)**:表示实际为负类却被错误地标记为正类的概率; 通过绘制不同阈值下TPR随FPR变化的趋势图即可得到一条完整的ROC曲线[^3]。 #### AUC的意义 AUC代表的是ROC曲线下方所围成区域的面积大小,取值范围介于0至1之间。理论上讲,如果某个分类器完全随机猜测,则其对应的AUC应接近0.5;而理想情况下,优秀的分类器应当具备较高的AUC得分,意味着更有可能将真实的正样本排在前面[^4]。 具体来说,AUC可以按照如下公式进行计算: \[ AUC=\frac{\sum_{i \in \text { positive class }} \operatorname{rank}_{i}-\frac{M(1+M)}{2}}{M \times N} \] 其中\( M \)指代正类的数量,\( N \)则对应总测试样例数减去正类数量后的剩余部分。 #### 实际应用场景 为了更好地理解应用这两个概念,考虑一个简单的例子——垃圾邮件过滤系统。假设有一个训练好的逻辑回归模型用来区分正常邮件垃圾邮件。那么在这个场景里,“正类”就是那些确实属于垃圾邮件的消息。随着设定的不同截断概率,我们可以观察到不同的误报情况,并据此画出相应的ROC曲线及其下方的AUC数值。 ```python from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 假设y_true是我们的真实标签,y_score是模型给出的概率分数 fpr, tpr, thresholds = roc_curve(y_true, y_score) plt.figure() lw = 2 plt.plot(fpr, tpr, color='darkorange', lw=lw, label=f'ROC curve (area = %0.2f)' % auc(fpr,tpr)) plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') plt.xlim([0.0, 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() ``` 上述代码片段展示了如何利用Python库`sklearn`快速生成ROC曲线并计算AUC值的方法[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值