【NLP】10. 机器学习模型性能评估指标(含多类别情况), ROC,PRC

ops/2025/3/17 19:32:57/

机器学习模型性能评估指标(含多类别情况)

1. 模型评估指标简介

机器学习中,模型的性能评估非常重要。常用的模型评估指标有:

  • 准确率(Accuracy)
  • 精度(Precision)
  • 召回率(Recall)
  • F-Score
  • Micro Average 和 Macro Average

这些指标能够帮助我们了解模型在预测中的表现,尤其是在不同类别不平衡的情况下,选择适合的评估标准非常重要。

2. 常用的评估指标

2.1 准确率(Accuracy)

准确率是正确预测的样本占所有样本的比例,计算公式为:
Accuracy = T P + T N T P + T N + F P + F N \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} Accuracy=TP+TN+FP+FNTP+TN
其中:

  • TP:真正例(True Positive)
  • TN:真反例(True Negative)
  • FP:假正例(False Positive)
  • FN:假反例(False Negative)

准确率适用于类别分布比较均衡的情况,但在类别不平衡的情况下,可能会导致误导。

2.2 精度(Precision)

精度表示预测为正类的样本中,实际为正类的比例,计算公式为:
Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP
精度可以帮助我们了解预测为正的样本有多少是准确的。

2.3 召回率(Recall)

召回率表示实际为正类的样本中,被正确预测为正类的比例,计算公式为:
Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP
召回率能够告诉我们有多少正类被模型捕获。

2.4 F-Score

F-Score 是精度和召回率的调和平均值,计算公式为:

F − S c o r e = 2 × Precision × Recall Precision + Recall F-Score = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} FScore=2×Precision+RecallPrecision×Recall
F-Score 综合了精度和召回率,是常用的评估指标,尤其在不平衡分类问题中尤为重要。


3. 多类别评估

当我们面临多类别问题时,计算方式稍微复杂一些。常用的评估方式包括 Micro AverageMacro Average

3.1 多类别混淆矩阵

在多类别分类问题中,混淆矩阵会扩展为一个矩阵,其中每一行表示真实类别,每一列表示预测类别。举个例子,如果有四个类别(0, 1, 2, 3),混淆矩阵如下所示:

类别预测为 0预测为 1预测为 2预测为 3
实际为 050532
实际为 1154023
实际为 284605
实际为 334530

我们可以从这个混淆矩阵中计算出每个类别的 TP, FP, FN, TN

3.2 每个类别的指标

例如,类别 0 的 TP, FP, FN, TN 计算如下:

  • TP: 50(实际为 0 且预测为 0)
  • FP: 15 + 8 + 3 = 26(实际不是 0,但预测为 0)
  • FN: 5 + 3 + 2 = 10(实际为 0,但预测为其他类别)
  • TN: 所有其他未预测为 0 的项:40 + 60 + 30 + 3 + 4 + 5 = 142

类似地,我们可以计算其他类别的指标。

3.3 Precision, Recall 和 F-Score 的计算

接下来,我们根据每个类别的 TP, FP, FN 来计算 Precision, RecallF-Score

类别TPFPFNPrecisionRecallF-Score
05026100.6570.8330.740
14017200.7010.6670.684
26012140.8330.8110.822
33012100.7140.7500.731
3.4 Micro Average 和 Macro Average
  • Micro Average:先汇总所有类别的 TP, FP, FN,然后计算 Precision, RecallF-Score
  • Macro Average:对每个类别的 Precision, RecallF-Score 进行平均。

Micro AverageMacro Average 的计算可以帮助我们从整体和类别均值两个角度评估模型。

Micro Average
  • Micro TP = 50+40+60+30=180
  • Micro FP = 26+17+12+12=67
  • Micro FN = 10+20+14+10=54

Micro Precision =
180 180 + 67 = 0.729 \frac{180}{180 + 67} = 0.729 180+67180=0.729
Micro Recall =
180 180 + 54 = 0.769 \frac{180}{180 + 54} = 0.769 180+54180=0.769
Micro F-Score =
2 × 0.729 × 0.769 0.729 + 0.769 = 0.748 2 \times \frac{0.729 \times 0.769}{0.729 + 0.769} = 0.748 2×0.729+0.7690.729×0.769=0.748

Macro Average

Macro Precision =
0.657 + 0.701 + 0.833 + 0.714 4 = 0.751 \frac{0.657 + 0.701 + 0.833 + 0.714}{4} = 0.751 40.657+0.701+0.833+0.714=0.751

Macro Recall =
0.833 + 0.667 + 0.811 + 0.750 4 = 0.765 \frac{0.833 + 0.667 + 0.811 + 0.750}{4} = 0.765 40.833+0.667+0.811+0.750=0.765

Macro F-Score =
0.740 + 0.684 + 0.822 + 0.731 4 = 0.744 \frac{0.740 + 0.684 + 0.822 + 0.731}{4} = 0.744 40.740+0.684+0.822+0.731=0.744


4. 总结

指标类别 0类别 1类别 2类别 3Micro AverageMacro Average
Precision0.6570.7010.8330.7140.7290.751
Recall0.8330.6670.8110.7500.7690.765
F-Score0.7400.6840.8220.7310.7480.744
  • 准确率(Accuracy):适用于类别分布较为平衡的情况。
  • 精度(Precision):反映了模型对正类预测的准确性。
  • 召回率(Recall):反映了模型捕获到正类的能力。
  • F-Score:综合了精度和召回率,是综合性评估指标。
  • Micro Average:考虑每个样本的贡献,适合不平衡数据集。
  • Macro Average:对各类别的表现取平均,适合类别均衡时的综合评估。

5. 应用场景

这些评估指标广泛应用于分类问题,尤其是当数据类别不平衡时,F-ScoreMacro Average 常常比 Accuracy 更具参考价值。

6. 任务相关性对评估指标选择的影响

不同任务对 False Positive (FP)False Negative (FN) 的容忍度不同,因此在选择评估指标时,必须考虑任务的目标和后果。

6.1 垃圾邮件检测(Spam Detection)

在垃圾邮件检测任务中:

  • False Positive (FP):将一个真实邮件误判为垃圾邮件。这个错误的影响比较大,因为用户可能会错过重要的邮件。
  • False Negative (FN):将垃圾邮件误判为正常邮件。这个错误影响较小,用户可以手动删除多余的垃圾邮件。

模型评估建议

  • 对于垃圾邮件检测任务,False Positives (FP) 更为严重,因为用户宁愿删除一些额外的垃圾邮件,也不希望错过重要邮件。
  • 因此,在这种情况下,我们应该更加关注 Precision,即我们预测为正的邮件中,有多少是真正的垃圾邮件。
6.2 法院文件提交(Providing Document in Court)

在法庭文件提交任务中:

  • False Positive (FP):错误地提交了不相关的文件。这个错误的后果较小,可能仅会导致一些额外的工作。
  • False Negative (FN):漏掉了需要提交的重要文件。这个错误的后果非常严重,可能会导致案件失败或法律后果。

模型评估建议

  • 对于这种任务,False Negatives (FN) 更为严重,因为漏掉重要文件可能会对案件产生灾难性的后果。
  • 因此,我们应该更加关注 Recall,即模型能识别出多少真实需要提交的文件。
6.3 任务翻转的影响

如果任务发生翻转,评估指标的优先级也可能发生变化。例如:

  • 如果将“垃圾邮件检测”任务翻转为“相关邮件检测”任务,目标是找出所有与用户相关的重要邮件,而不仅仅是过滤垃圾邮件,那么 Recall 变得更加重要。
  • 在这种情况下,漏掉一个重要邮件(False Negative)可能比误将一些不重要邮件标记为重要(False Positive)更加严重。

7. ROC 曲线与 Precision-Recall 曲线

7.1 什么是 ROC 曲线?

7.1.1 ROC 曲线的定义

ROC(Receiver Operating Characteristic)曲线用于评估分类模型在不同阈值下的表现。它描绘了模型的 True Positive Rate (TPR)False Positive Rate (FPR) 之间的关系。

  • TPR(True Positive Rate),即 Recall:表示模型在所有实际为正类的样本中预测正确的比例。
  • FPR(False Positive Rate):表示模型在所有实际为负类的样本中错误预测为正类的比例,计算公式为:

F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP

7.1.2 ROC 曲线的含义

  • TPR(True Positive Rate) 对应的是 Recall
  • FPR(False Positive Rate) 对应的是 1 - Specificity,其中 Specificity 是指模型在所有实际为负类的样本中预测正确的比例。

通过绘制不同阈值下的 TPRFPR,我们可以得到 ROC 曲线。ROC 曲线的理想情况是 TPR 为 1,FPR 为 0,这意味着模型的分类能力完美。

7.1.3 AUC(Area Under Curve)

AUC 是 ROC 曲线下的面积,值越接近 1,表示模型越好。AUC 值为 0.5 表示模型没有任何区分能力,相当于随机猜测。


7.2 什么是 Precision-Recall 曲线?

ROC 曲线类似,Precision-Recall 曲线也是评估模型性能的一种方法,但其更加关注正类样本的表现。当数据集是高度不平衡时,Precision-Recall 曲线往往比 ROC 曲线更能准确反映模型的性能。

7.2.1 Precision-Recall 曲线的定义

  • Precision-Recall 曲线 描绘了 PrecisionRecall 在不同阈值下的变化。我们通过调整分类阈值来计算不同阈值下的 PrecisionRecall,然后绘制出曲线。

7.2.2 Precision-Recall 曲线的作用

  • Precision-Recall 曲线 可以帮助我们理解模型在正类样本的分类表现,尤其是当正类样本数量较少时。
  • 如果 PrecisionRecall 都较高,则说明模型在正类预测时既准确又完整。

7.3 如何计算 Precision 和 Recall 并绘制 Precision-Recall 曲线

7.3.1 准备数据

假设我们有以下数据集,包含了每个样本的真实标签和模型输出的预测概率:

样本编号真实标签 (y_true)模型预测概率 (y_scores)
110.9
200.7
310.8
400.4
510.85

7.3.2 选择不同阈值并计算 Precision 和 Recall

根据预测概率排序:

样本编号真实标签 (y_true)模型预测概率 (y_scores)
110.9
310.8
510.85
200.7
400.4

选择阈值:0.9, 0.8, 0.7, 0.5,分别计算 Precision 和 Recall。

阈值 = 0.9
  • 预测为正类的样本:样本 1
  • TP = 1, FP = 0, FN = 2, TN = 2
  • Precision = 1, Recall = 0.33
阈值 = 0.8
  • 预测为正类的样本:样本 1, 3, 5
  • TP = 3, FP = 1, FN = 0, TN = 1
  • Precision = 0.75, Recall = 1
阈值 = 0.7
  • 预测为正类的样本:样本 1, 2, 3, 5
  • TP = 3, FP = 1, FN = 0, TN = 1
  • Precision = 0.75, Recall = 1
阈值 = 0.5
  • 预测为正类的样本:样本 1, 2, 3, 4, 5
  • TP = 3, FP = 2, FN = 0, TN = 0
  • Precision = 0.6, Recall = 1

7.3.3 绘制 Precision-Recall 曲线

通过计算不同阈值下的 PrecisionRecall,我们可以绘制 Precision-Recall 曲线。以下是不同阈值下的 PrecisionRecall 的数据:

阈值PrecisionRecall
0.910.33
0.80.751
0.70.751
0.50.61

使用 matplotlib 绘制 Precision-Recall 曲线:

import matplotlib.pyplot as plt# Precision 和 Recall 的值
precision = [1, 0.75, 0.75, 0.6]
recall = [0.33, 1, 1, 1]
thresholds = [0.9, 0.8, 0.7, 0.5]# 绘制 Precision-Recall 曲线
plt.plot(recall, precision, marker='o', color='b')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.grid(True)
plt.show()

7.4 总结

7.4.1 ROC 曲线与 AUC

  • ROC 曲线 提供了模型的 TPRFPR 之间的关系,通过不同阈值下的分类性能展示模型的表现。
  • AUC(Area Under Curve)表示 ROC 曲线下的面积,AUC 值越高,模型的性能越好。

7.4.2 Precision-Recall 曲线(PRC)

  • Precision-Recall 曲线 聚焦于正类的分类表现,尤其在数据集不平衡时,提供了对模型性能的更好评估。
  • 精度(Precision)和召回率(Recall)是关键的评估指标,二者可以通过调整阈值来平衡。
文章来源:https://blog.csdn.net/weixin_48846514/article/details/146285005
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/ops/166598.html

相关文章

专题地图的立体表达-基于QGIS和PPT的“千层饼”视图制作实践

目录 前言 一、QGIS准备基础数据 1、QGIS 相关插件 2、图层标绘操作 二、PPT中制作 1、调整图片的规格 2、设置旋转 3、添加文字 三、总结 前言 在信息爆炸的时代,数据的可视化呈现变得愈发关键,而专题地图作为传递地理空间信息的有力工具&#…

NET进行CAD二次开发之二

本文主要针对CAD 二次开发入门与实践:以 C# 为例_c# cad-CSDN博客的一些实践问题做一些补充。 一、DLL介绍 在 AutoCAD 中,accoremgd.dll、acdbmgd.dll 和 acmgd.dll 都是与.NET API 相关的动态链接库,它们在使用.NET 语言(如 C#、VB.NET)进行 AutoCAD 二次开发时起着关…

总结 HTTP 协议的基本格式, 相关知识以及抓包工具fiddler的使用

目录 1 HTTP是什么 2 HTTP协议格式 3 HTTP请求(Request) 3.1 认识URL 3.2 方法 3.3 认识请求"报头"(header) 3.3.1 Host 3.3.2 Content-Length 3.3.3 Content-Type 3.3.4 User-Agent (简称UA) 3.3.5 Referer 3.3.6 Cookie和Session 4 HTTP响应详解 4.…

外呼系统破局电话管控:AI电销机器人合规运营实战指南

随着运营商对电话卡管控日趋严格,某金融科技公司曾因单日外呼超限导致80%号码被封——这一案例暴露出AI电销机器人在效率与合规间的矛盾。但数据显示,采用合规策略的企业外呼接通率仍能保持38%以上,关键在于建立适配监管环境的智能外呼体系。…

PHP语法基础

PHP语法基础 一,变量 在PHP中,变量是存储数据的容器,其灵活性和动态类型系统是PHP的核心特性之一。以下是PHP变量的详细解析,涵盖声明、作用域、类型转换及最佳实践: 1. 变量基础 声明与命名规则 无需显式声明类型&…

【一起来学kubernetes】14、StatefulSet使用详解

一、核心特性二、架构与组件三、生命周期管理四、典型应用场景**五、注意事项与最佳实践六、对比Deployment一、应用场景二、Pod管理三、部署与更新策略四、其他特性 七、常见问题八、拓展 前文中我们介绍了k8s中常用的一种控制器 Deployment,与之向对应的&#xff…

vscode 导入语句排序和删除未使用的导入

vscode 自带的格式化 vscode 默认支持导入语句排序和删除未使用的导入。 对应的配置是:source.organizeImports 可选值: never:关闭explicit:仅在显式手动保存时触发always:自动保存时也会触发 我喜欢在手动 Ctrl…

算法专题一:双指针

1.移动零 题目链接:283. 移动零 - 力扣(LeetCode) 我们可以定义一个dest,一个cur,dest表示数组中不为零的数的最后一位,cur用来遍历数组 class Solution {public void moveZeroes(int[] nums) {for(int cur…