模型评估指标全解析|准确率/召回率/F1/AUC/ROC曲线+混淆矩阵图解

发布时间:2026/7/26 9:44:49
模型评估指标全解析|准确率/召回率/F1/AUC/ROC曲线+混淆矩阵图解 摘要模型评估指标全解析准确率、精确率、召回率、F1值、AUC、ROC曲线详解附混淆矩阵图解。为什么99%准确率的模型可能是完全失败的本文通过癌症筛查案例详解各指标的计算方法、适用场景和权衡取舍覆盖考试必考计算题。模型评估指标详解准确率/召回率/F1/AUC一次全搞懂所属模块卷三 · 知识体系篇 · 第三部分 模型训练与调优考试权重★★★★★必考中的必考每次考试必有计算题阅读时长约28分钟一、为什么一个准确率不够用先看一个场景某癌症筛查模型在1000名患者中990名健康10名患癌模型直接预测所有人健康。准确率 990/1000 99%——看起来很完美但这个模型把所有癌症患者都漏诊了是彻底失败的模型这就是为什么需要更丰富的评估指标体系。二、混淆矩阵Confusion Matrix一切指标的基础2.1 混淆矩阵结构预测值 正例(1) 负例(0) ┌─────────────────────────┐ 真 正例 │ TP │ FN │ 实 (1) │ (真正例) │ (假负例) │ 值 ──────┼───────────┼────────────┤ 负例 │ FP │ TN │ (0) │ (假正例) │ (真负例) │ └─────────────────────────┘ TPTrue Positive预测正实际也正 ✅ TNTrue Negative预测负实际也负 ✅ FPFalse Positive预测正实际负 ❌误报/虚警 FNFalse Negative预测负实际正 ❌漏报2.2 各象限含义记忆口诀“T看对不对P看预测什么”TTrue 预测对了FFalse 预测错了PPositive 预测为正NNegative 预测为负三、分类指标四件套3.1 准确率AccuracyAccuracy T P T N T P T N F P F N \text{Accuracy} \frac{TP TN}{TP TN FP FN}AccuracyTPTNFPFNTPTN​含义整体预测正确的比例适用类别均衡时不适用类别不平衡如癌症检测、欺诈检测3.2 精确率/查准率PrecisionPrecision T P T P F P \text{Precision} \frac{TP}{TP FP}PrecisionTPFPTP​含义预测为正的样本中实际为正的比例宁可漏报不能误报适用场景垃圾邮件过滤宁可放过垃圾邮件也不误删正常邮件3.3 召回率/查全率RecallRecall T P T P F N \text{Recall} \frac{TP}{TP FN}RecallTPFNTP​含义实际为正的样本中被预测为正的比例宁可误报不能漏报适用场景癌症检测宁可误报健康人也不漏诊癌症患者3.4 F1分数F1 ScoreF1 2 × Precision × Recall Precision Recall \text{F1} \frac{2 \times \text{Precision} \times \text{Recall}}{\text{Precision} \text{Recall}}F1PrecisionRecall2×Precision×Recall​含义Precision和Recall的调和平均数比算术平均更严格适用希望Precision和Recall都高的场景3.5 精确率 vs 召回率的权衡精确率 ↑ 召回率 ↑ ┌──────────────────────────────────────┐ │ 代价漏报增多 代价误报增多 │ │ 适合垃圾邮件 适合癌症检测/ │ │ 推荐系统 欺诈识别 │ └──────────────────────────────────────┘ 调节阈值影响二者 阈值↑更严格判正→ Precision↑Recall↓ 阈值↓更宽松判正→ Precision↓Recall↑四、完整指标体系六大核心指标一览指标公式适用场景Accuracy(TPTN)/总数类别均衡PrecisionTP/(TPFP)误报代价高RecallTP/(TPFN)漏报代价高F1 Score2·P·R/(PR)综合评价F-beta(1β²)·P·R/(β²·PR)β1偏重Recallβ1偏重PrecisionAUC-ROCROC曲线下面积阈值无关的综合性能五、ROC曲线与AUC阈值无关的评估利器5.1 ROC曲线原理ROC曲线坐标轴 Y轴TPRTrue Positive Rate Recall TP/(TPFN) X轴FPRFalse Positive Rate FP/(FPTN) → 误报率 通过遍历所有分类阈值0→1得到一系列(FPR, TPR)点连成曲线 TPR 1 │ * │ * │ * │ * │* 0 └──────────────── FPR 0 1 对角线 随机猜测AUC0.5 曲线越靠左上角越好AUC越接近1.05.2 AUC值解读标准AUC值范围模型性能1.0完美通常意味着数据泄露0.9 ~ 1.0优秀0.8 ~ 0.9良好0.7 ~ 0.8一般需改进0.5 ~ 0.7较差接近随机 0.5比随机还差标签可能反了5.3 PR曲线 vs ROC曲线比较点ROC曲线PR曲线X轴FPR误报率Recall召回率Y轴TPR召回率Precision精确率适用数据类别均衡类别严重不平衡反映问题整体分类能力正例识别能力基线对角线AUC0.5随正例比例变化✅记忆规则类别不平衡时优先看PR曲线ROC可能虚高。六、多分类评估宏平均 vs 微平均当类别数2时F1等指标需要聚合各类别结果示例3分类类A/B/C各自的Precision和Recall 类A 类B 类C P 0.9 0.7 0.5 R 0.8 0.6 0.4 F1 0.85 0.65 0.44 样本数200 50 50聚合方式计算方法特点macro avg各类别F1的算术平均对每个类别一视同仁小类别影响大weighted avg各类别F1按样本量加权反映整体性能适合不均衡micro avg全局TP/FP/FN汇总后计算等同于accuracy无权重差异时macro F1 (0.85 0.65 0.44) / 3 0.647 weighted F1 (0.85×200 0.65×50 0.44×50) / 300 0.748七、回归任务评估指标指标公式特点MAE(1/n)Σ|ŷ-y|绝对误差单位同原始MSE(1/n)Σ(ŷ-y)²放大大误差对异常值敏感RMSE√MSE单位同原始综合常用R²决定系数1 - SS_res/SS_tot越接近1越好可为负数MAPE(1/n)Σ|ŷ-y|/y × 100%相对误差跨量纲比较R² 1 表示完美拟合 R² 0 表示模型等同于用均值预测 R² 0 表示模型比均值预测还差八、代码示例完整评估指标计算importnumpyasnpfromsklearn.metricsimport(accuracy_score,precision_score,recall_score,f1_score,roc_auc_score,roc_curve,precision_recall_curve,confusion_matrix,classification_report,mean_absolute_error,mean_squared_error,r2_score)importmatplotlib.pyplotasplt# ──────────────────────────────────────────# 一、分类指标完整计算# ──────────────────────────────────────────# 模拟预测结果y_truenp.array([1,1,1,0,0,0,1,0,1,0])y_prednp.array([1,0,1,0,1,0,1,0,0,0])y_scorenp.array([0.9,0.4,0.8,0.2,0.7,0.1,0.95,0.3,0.45,0.15])# 混淆矩阵cmconfusion_matrix(y_true,y_pred)TP,FP,FN,TNcm[1,1],cm[0,1],cm[1,0],cm[0,0]print( 混淆矩阵 )print(fTP{TP}, FP{FP}, FN{FN}, TN{TN})# 各项指标accuracyaccuracy_score(y_true,y_pred)precisionprecision_score(y_true,y_pred)recallrecall_score(y_true,y_pred)f1f1_score(y_true,y_pred)aucroc_auc_score(y_true,y_score)print(f\n 核心指标 )print(fAccuracy :{accuracy:.4f}({TPTN}/{len(y_true)}))print(fPrecision:{precision:.4f}(TP/(TPFP) {TP}/{TPFP}))print(fRecall :{recall:.4f}(TP/(TPFN) {TP}/{TPFN}))print(fF1 Score :{f1:.4f})print(fAUC-ROC :{auc:.4f})# 完整分类报告print(\n 分类报告sklearn标准格式)print(classification_report(y_true,y_pred,target_names[负例,正例]))# ──────────────────────────────────────────# 二、ROC曲线绘制# ──────────────────────────────────────────fpr,tpr,thresholdsroc_curve(y_true,y_score)plt.figure(figsize(10,4))plt.subplot(1,2,1)plt.plot(fpr,tpr,b-,linewidth2,labelfROC (AUC{auc:.3f}))plt.plot([0,1],[0,1],k--,label随机猜测 (AUC0.5))plt.xlabel(FPR误报率)plt.ylabel(TPR召回率)plt.title(ROC曲线)plt.legend()# PR曲线precision_curve,recall_curve,_precision_recall_curve(y_true,y_score)plt.subplot(1,2,2)plt.plot(recall_curve,precision_curve,r-,linewidth2)plt.xlabel(Recall召回率)plt.ylabel(Precision精确率)plt.title(PR曲线)plt.tight_layout()# plt.savefig(evaluation_curves.png, dpi150)# ──────────────────────────────────────────# 三、多分类评估# ──────────────────────────────────────────print(\n 多分类评估 )y_true_multinp.array([0,1,2,0,1,2,0,1,2,0])y_pred_multinp.array([0,1,1,0,2,2,0,1,2,1])print(classification_report(y_true_multi,y_pred_multi,target_names[类A,类B,类C]))# ──────────────────────────────────────────# 四、回归指标# ──────────────────────────────────────────print( 回归指标 )y_reg_truenp.array([3.0,5.0,2.5,7.0,4.5])y_reg_prednp.array([2.8,5.2,2.0,7.5,4.2])maemean_absolute_error(y_reg_true,y_reg_pred)msemean_squared_error(y_reg_true,y_reg_pred)rmsenp.sqrt(mse)r2r2_score(y_reg_true,y_reg_pred)print(fMAE {mae:.4f})print(fMSE {mse:.4f})print(fRMSE {rmse:.4f})print(fR² {r2:.4f})# ──────────────────────────────────────────# 五、手动计算F-betaβ≠1时# ──────────────────────────────────────────deff_beta(precision,recall,beta): beta 1: 更看重Recall漏报代价高如医疗 beta 1: 更看重Precision误报代价高如垃圾邮件 beta 1: 标准F1 ifprecisionrecall0:return0return(1beta**2)*precision*recall/(beta**2*precisionrecall)print(f\n F-beta )p,r0.8,0.6print(fF0.5偏Precision{f_beta(p,r,0.5):.4f})print(fF1 均衡 {f_beta(p,r,1.0):.4f})print(fF2 偏Recall {f_beta(p,r,2.0):.4f})九、指标选择决策树你的任务类型是 │ ├── 分类 │ │ │ ├── 类别均衡 │ │ ├── 是 → Accuracy F1 │ │ └── 否 → F1(weighted) AUC-PR │ │ │ ├── 漏报代价 误报代价 │ │ └── 重点看 Recall如癌症检测、欺诈识别 │ │ │ ├── 误报代价 漏报代价 │ │ └── 重点看 Precision如垃圾邮件、推荐系统 │ │ │ └── 需要与阈值无关的综合评估 │ └── AUC-ROC均衡或 AUC-PR不均衡 │ └── 回归 ├── 关注绝对误差量级 → MAE / RMSE ├── 关注相对比例 → MAPE └── 关注解释方差比例 → R²十、考试必背计算题模板给定混淆矩阵TP80, FP20, FN40, TN160求各指标。总数N 802040160 300 Accuracy (80160)/300 80.0% Precision 80/(8020) 80.0% Recall 80/(8040) 66.7% F1 2×0.8×0.667/(0.80.667) 72.7% FPR 20/(20160) 11.1% Specificity TN/(TNFP) 160/180 88.9%下一篇预告《过拟合与欠拟合的识别与处理》——如何通过训练曲线诊断模型状态并用正则化、Dropout、数据增强等手段对症下药相关推荐专栏完整导读77篇全系列导航过拟合与欠拟合怎么解决正则化/Dropout/Early Stopping代码实现Prompt Engineering入门Zero-shot/Few-shot/思维链CoTCRISPy框架超参数调优四大方法网格搜索vs随机搜索vs贝叶斯优化Python代码图像标注四类方法详解分类检测分割关键点标注实操耗时对比