模型泛化能力的评估(准确率、精确率、召回率、F1、ROC、AUC)与代码实现

本文详细介绍了模型泛化能力的评估指标,包括准确率、精确率、召回率、F1分数以及ROC曲线和AUC值。在不同的业务场景下,这些指标各有侧重,例如在关注误报风险时,召回率显得尤为重要。理解这些指标有助于选择和优化模型,以适应具体的应用需求。

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

模型泛化能力的评估

泛化能力指训练好的模型在测试集上的表现
指标:准确度、精确率、召回率、F1值、ROC、AUC等。
对于二分类问题,有混淆矩阵:

实际结果 1 实际结果 0
预测结果 111(TP) 10 (FP)
预测结果 001(FN) 00 (TN)

T----True; F—False; P(positive) =1; N(Negative) =0
注: 先看预测结果(P/N),再针对实际结果对比预测结果,给出判断结果(T/F)

准确率(Accuracy)

定义
预测正确的结果占总样本的百分比
准确率 = (TP + TN) / (TP + TN + FP + FN)
特点
可以判断总的正确率,但在样本不均衡的情况下,并不能很好的来衡量结果。

from sklearn.metrics import accuracy_score
accuracy(y_test, y_pred)

精确率(Precision)(查准率)

定义
针对预测结果而言,含义是在所有被预测为正的样本中实际为正的样本的概率。
精确度 = TP/(TP+FP)
准确率与精确率的区别
准确率代表整体的预测准确程度,包含正样本和负样本;
精确率代表对正样本结果中的预测准确程度。

召回率(Recall)(查全率)

定义
针对原样本而言,在实际为正的样本中被预测为正的概率。
召回率 = TP/(TP+FN)

F1分数(F1-Score)

精确率和召回率可通过P-R图表示,两者是矛盾,无法做到双高。
F1-Score可以同时考虑精确率和召回率,让两者同时达到最高,取得平衡。
平衡点: F1-Score = 2PrecisionRecall / (Precision + Recall)

ROC曲线和AUC曲线----不受样本失衡影响

TPR(真正率)= TP/(TP+FN) : 模型预测覆盖的程度
FPR(假正率) = FP/(FP+TN) : 模型虚报的程度
这两个指标分别针对不同类别计算,不会受到样本不平衡的影响。
ROC曲线
FPR为横坐标,TPR为纵坐标
TPR越大越好,FPR越小越好
因此ROC曲线越好越陡峭
AUC曲线
取值:[0.5, 1]
定义:表示ROC曲线下面的面积,用于判断模型的优劣
AUC判别标准:
0.5~0.7 : 效果较低
0.7~0.85 : 效果一般
0.85~0.95 : 效果很好
0.95~1 : 效果非常好

代码实现

from sklearn.metrics import classification_report
model.score(y_test, y_pred)
model.classification_report(y_test, y_pred)

总结

我在学这一块儿知识的时候会有疑惑:这么多指标到底看哪一个呢?
通常在选择最优模型时看的Accuracy和loss。后来接触了实际的项目发现,一个模型的部署要考虑其业务场景,比如当误报的风险比较大,漏报的风险不是很大时,要考虑Recall(这个要看具体的0和1是怎么指定的)。有些业务场景只需要全局的准确率足够高即可。

理论参考 《西瓜书》 BY 周志华
代码参考:github: datawhalechina
机器学习笔记

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

余额充值