一文理清楚,准确率,精度,召回率,真正率,假正率,ROC/AUC

本文深入解析了混淆矩阵的概念,包括真正、真负、假正、假负等概念,并详细阐述了各种评估指标,如准确率、精度、召回率、F1度量以及ROC/AUC曲线的含义和计算方式,帮助读者全面理解模型评估的关键。

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

一.混淆矩阵

在这里插入图片描述
如上图为一个混淆矩阵,
True Positive (真正, TP)被模型预测为正的正样本;

True Negative(真负 , TN)被模型预测为负的负样本 ;

False Positive (假正, FP)被模型预测为正的负样本;

False Negative(假负 , FN)被模型预测为负的正样本;

相对应的,

True Positive Rate(真正率 , TPR)或灵敏度(sensitivity)
TPR = TP /(TP + FN)
正样本预测结果数 / 正样本实际数

True Negative Rate(真负率 , TNR)或特指度(specificity)
TNR = TN /(TN + FP)
负样本预测结果数 / 负样本实际数

False Positive Rate (假正率, FPR)
FPR = FP /(FP + TN)
被预测为正的负样本结果数 /负样本实际数

False Negative Rate(假负率 , FNR)
FNR = FN /(TP + FN)
被预测为负的正样本结果数 / 正样本实际数

二.其它的定义:

准确率:
预测对的样本占样本总数的比例

准确率 = 预测情况与真实情况一致的样本个数 / 样本总数

Accurancy = ( TP + TN ) / ( TP + TN + FP +FN )

精度p:
预测为正样本的里面有多少是真正的正样本

精度 = 预测为正的正样本个数 / 预测为正的样本个数 =TP/(TP+FP)

召回率r:
召回率 = 被预测为正的样本个数 /正样本个数=TP/(TP+FN)

召回率的值等于真正率

F1度量:
对于精度和召回率之间的平衡,我们取两者的调和平均作为F1度量,可以有效的同时考虑到精度和召回率两者。
F1=2/(1/r+1/p)
F1趋向于接近r和p中的较小数,因此一个高的F1度量值确保精度和召回率都比较高。

三.ROC/AUC

ROC中文名为接收者操作特征曲线,显示的是分类器真正率和假正率之间折中的一种图形化方法。在ROC曲线中,Y轴代表着真正率,X轴代表着假正率。在这里插入图片描述

一个好的分类器应该更靠近图的左上角,而一个随机的分类器其曲线为点(0,0)和(0,1)的连线。

ROC曲线下方的面积AUC提供了评价模型平均性能的另一种方法,如果模型是完美的,则AUC=1,即曲线下方面积为1。如果模型是随机猜测的,则AUC=0.5.模型越好,其曲线下方面积应该越大。

产生ROC曲线:
如果大家对二值分类模型熟悉的话,都会知道其输出一般都是预测样本为正例的概率,而事实上,ROC曲线正是通过不断移动分类器的“阈值”来生成曲线上的一组关键点的。
一般输出样本为正例的概率,即输出值为0~1,我们把阈值从0-1之间调整,阈值每调整一次,每次取一个输出的概率,则可以得到一次对应的真正率和假正率,当所有的概率都取过之后,则得到完整的ROC曲线。

另外AUC是不受正负样本不均衡影响的。比如负样本数翻10倍,通过公式可以看出TPR是不变的,而FPR上下是成比例增加的,也基本不变,所以AUC曲线基本不变。

参考书籍:
《数据挖掘导论》由人民邮电出版社出版,[美]作者Pang-Ning Tan,Michael Steinbach,Vipin Kumar 合著

### 准确率 准确率(Accuracy)是指被确分类的样本占总样本的比例。其计算公式如下: \[ \text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{P} + \text{N}} \] 其中 TP 表示真阳性(True Positive),即实际为类且预测也为类;TN 表示真阴性(True Negative),即实际为类且预测也为类;P 和 N 分别表示类和类的实际数量[^1]。 ```python def accuracy_score(y_true, y_pred): correct_predictions = sum([1 for true, pred in zip(y_true, y_pred) if true == pred]) total_samples = len(y_true) return correct_predictions / total_samples ``` ### 召回率 召回率(Recall),也称为灵敏度或查全,指的是在所有实际为类的样本中,成功识别出来的比例。计算方式如下所示: \[ \text{Recall} = \frac{\text{TP}}{\text{TP}+\text{FN}} \] 这里 FN 是指阴性(False Negative),也就是实际上属于类却被误判成类的情况[^2]。 ```python from sklearn.metrics import recall_score recall = recall_score(y_true, y_pred, average='binary') print(f'Recall Score: {recall}') ``` ### AUC 曲线及其解释 AUC (Area Under Curve) 值代表的是 ROC 曲线下方区域面积大小的个数值描述。ROC 曲线描绘了 TPR (True Positive Rate,真)随 FPR (False Positive Rate,)变化的趋势图象。当模型表现越佳时,该曲线上升得更快更陡峭,对应的 AUC 就会越大,理想情况下接近于 1[^3]。 具体来说, - **真(TPR)** 或者说敏感度 Sensitivity :\(\frac{\text{TP}}{\text{TP}+\text{FN}}\); - **(FPR)** : \( \frac{\text{FP}}{\text{FP}+\text{TN}} \) 绘制 ROC 曲线并计算 AUC 的 Python 实现可以这样写: ```python import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, auc fpr, tpr, thresholds = roc_curve(y_test, probas_) 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='--') 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() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值