如何加理解(两个模型)准确率(ACC)和AUC变化不一致

本文探讨了在二分类模型中,AUC(曲线下面积)和正确率(ACC)可能存在不一致的情况。模型A正确率85%,AUC 0.98,模型B正确率93%,AUC 0.92。文章指出,正确率依赖于特定截断值,而AUC综合所有截断值,更适合处理偏态样本。因此,建议依据AUC选择模型,推荐使用AUC作为评估和比较分类器的单一指标。

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

1. 问题

当我们建立两个模型都是二分类的,并应用常见的Logistic回归模型得到结果如下:模型A的正确率为85%,AUC为0.98;模型B的正确率为93%,AUC为0.92。那么选择哪个模型呢?

很多朋友首先应该会质疑方法使用的正确性,不过出现这个问题的可能性很小,我们假设方法是正确的,主要探讨AUC和正确率矛盾的问题

查阅文献,发现不少朋友也遇到同样的问题,更巧的是已有学者通过模拟研究证实矛盾的存在。下面图表中的最后一列展示的正是AUC和正确率结论的一致比例,较低可达93.5%。
在这里插入图片描述

2. 解释

接着我们从简单的理论出发解释一下,两者出现矛盾的可能原因。正确率是基于较佳的截断值计算的,所以很多朋友觉得他应该可靠。但是他们可能不知道, AUC是基于所有可能的截断值计算的,AUC应该更加稳健

怎么理解“稳健”这个词呢?
我们可以理解为计算正确率时所基于的较佳截断值并不是总体分布中的较佳截断值,正确率只是某个随机样本的一个属性指标。而AUC不关注某个截断值的表现如何,可以综合所有截断值的预测性能,所以正确率高,AUC不一定大,反之亦然。

“The implicit goal of AUC is to deal with situations where you have a skewed sample distr

### AUCACC、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、付费专栏及课程。

余额充值