准确率,错误率 精准率 召回率,ROC,AUC 的区别和联系

本文深入探讨了评估机器学习模型性能的各种关键指标,包括精准率、召回率、准确率、错误率及ROC曲线等,解释了它们在不同场景下的应用及相互之间的联系。

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

网上对于每个定义分别讲述的很深,但是很少又把他们联系起来的。

首先,所有的定义均来自下面的图,一定要理解好。

 

1  精准率和召回率,通常用在搜索的评价场合。

    精准率表示:应该被搜索到的而且实际也搜索出来的(TP)/所有搜索出来的(TP+FP)

    召回率表示:应该被搜索到的而且实际也搜索出来的(TP)/所有应该被搜索到(TP+FN)

而 TN 表示不应该被搜索到实际也没搜索出来的,搜索系统一般不关心,所以没有纳入这个指标。

P和R指标有的时候是矛盾的,综合考虑精确率(precision)和召回率(recall)这两个度量值。很容易理解,F1综合了P和R的结果,当F1较高时则比较说明实验方法比较理想。

综合评价指标(F-Measure)是Precision和Recall加权调和平均:

当参数a=1时,就是最常见的F1了:

 

2  准确率和错误率。这一般是分类器采用的指标。而且不但二分类可以用,也可以扩充到多分类的情况。

        准确率=准确分类个数/总体=TP+TN/TP+TN+FN+FP

        错误率=错误分类个数/总体=FN+FP/TP+TN+FN+FP

3 ROC。

      上述方法有个缺点 还需要对预测概率设分类阔值,比如预测概率大于|萄值为正例,反之为负例这使得模型多了一个超参数,并且这个超参数会影 响模型的泛化能力 。

    ROC的方法没有这样的限制,ROC实质是把所有的分类阈值从0-1都在曲线上展示了一下,然后就可以看出整个模型的好坏。

下面是ROC绘制的一个实例。AUC其实就是曲线的面积,越大表示模型越好。

    其一是真正类率(true positive rate ,TPR), 计算公式为TPR=TP/ (TPFN),即敏感度,刻画的是分类器所识别出的 正实例占所有正实例的比例。另外一个是假正类率(false positive rate, FPR),计算公式为FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例,即特异度。还有一个真负类率(True Negative Rate,TNR),也称为specificity,计算公式为TNR=TN/ (FPTN) = 1 - FPR

    其正例数为此部分里实际的正类数。也就是说,将逻辑回归得到的结 果按从大到小排列,倘若以前10%的数值作为阈,即将前10%的实例都划归为正类,6180个。其中,正确的个数为4879个,占所有正类的 4879/14084*100%=34.64%,即敏感度;另外,有6180-4879=1301个负实例被错划为正类,占所有负类的1301 /47716*100%=2.73%,即1-特异度。以这两组值分别作为y值(敏感度)和x值(1-特异度),在excel中作散点图。得到ROC曲线如下(红色曲线与数据无关其只是一个参考,蓝色曲线是ROC曲线):

 

参考 https://blog.youkuaiyun.com/abcd1f2/article/details/51862988

        https://baike.baidu.com/item/ROC曲线/775606?fr=aladdin

 

 

 

### AUC、ACC、F1、准确率召回率的应用场景及计算方式 #### 一、AUC (Area Under the Curve) AUC表示ROC曲线下方的面积,其取值范围通常在0.5到1之间。这一指标用于评估二元分类器的整体性能,在不同阈值下综合考虑真正(True Positive Rate, TPR)假正(False Positive Rate, FPR)[^2]。 对于实战应用而言,当面对数据集不平衡的情况时,即某一类别样本显著多于另一类别,此时使用AUC作为评价标准更为合理。因为即使模型预测大多数为多数类也能获得较高的准确度,但这并不代表模型具有良好的泛化能力。而通过观察整个ROC曲线及其下方区域大小(AUC),可以更全面地理解模型区分两类的能力。 Python代码实现: ```python from sklearn.metrics import roc_auc_score import numpy as np # 假设y_true是真实标签,y_scores是概估计或决策函数得分 auc_value = roc_auc_score(y_true, y_scores) print(f"AUC Value: {auc_value}") ``` #### 二、ACC (Accuracy) 准确性指的是被正确分类的数据点所占比例。尽管简单易懂,但在处理不均衡数据集时可能会给出误导性的高分。因此,在某些情况下可能不是最佳的选择。 计算公式: \[ \text{Accuracy}=\frac{\text{TP+TN}}{\text{P+N}}\] 其中 TP 表示 True Positives(真阳性),TN 表示 True Negatives (真阴性), P N 分别指代总共有多少个正例反例。 Python代码实现: ```python from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_true, y_pred) print(f"Accuracy Score: {accuracy:.4f}") ``` #### 三、F1-Score F1值是对Precision(精度)与Recall(召回率)的一种加权调平均数,能够平衡两者之间的关系并提供更加稳健的结果。特别是在存在类别失衡的情况下,F1分数往往比单独依赖 Precision 或 Recall 更具代表性[^1]。 计算公式: \[ F_1=2\times(\frac{{Precision}\times{Recall}}{{Precision}+{Recall}})\] Python代码实现: ```python from sklearn.metrics import f1_score f1 = f1_score(y_true, y_pred, average='binary') print(f"F1 Score: {f1:.4f}") ``` #### 四、Recall (召回率) 召回率反映了模型识别所有实际存在的正向实例的能力。具体来说就是从所有真实的正样例中找出的比例有多少被成功检测出来了。这对于那些误报成本较低但是漏检代价高昂的任务非常重要,比如医疗诊断领域中的疾病筛查等[^3]。 计算公式: \[ \text{Recall}= \frac{\text{TP}}{\text{TP + FN}}\] 这里FN代表False Negatives(假阴性) Python代码实现: ```python recall = recall_score(y_true, y_pred, average='binary') print(f"Recall Score: {recall:.4f}") ``` #### 五、Precision (精确) 精确关注的是在所有被判定为正向的例子中有多少确实是真正的正向案例。它适用于希望减少错误肯定情况发生的场合,例如垃圾邮件过滤系统里尽可能避免把正常邮件错判成垃圾邮件[^4]。 计算公式: \[ \text{Precision}=\frac{\text{TP}}{\text{TP + FP}}\] FP表示False Positives(假阳性) Python代码实现: ```python from sklearn.metrics import precision_score precision = precision_score(y_true, y_pred, average='binary') print(f"Precision Score: {precision:.4f}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值