当前位置: 首页 > news >正文

【机器学习】Macro-F1(宏平均 F1)是什么?


宏观直觉(给初学者)

一句话:
macro-F1 = 先分别算每个类别的F1,再对所有类别做等权平均
它让小众类别(比如某些稀有攻击)和大类(比如 Normal)同样重要,不会被“大样本”掩盖。

English 1-liner:
Macro-F1 is the unweighted mean of per-class F1 scores. It gives equal voice to each class—great for imbalanced data.


公式(不用背,理解就好)

  • 每个类别 ccc

    Precisionc=TPcTPc+FPc,Recallc=TPcTPc+FNc,F1c=2⋅Precisionc⋅RecallcPrecisionc+Recallc \text{Precision}_c=\frac{TP_c}{TP_c+FP_c},\quad \text{Recall}_c=\frac{TP_c}{TP_c+FN_c},\quad F1_c=\frac{2\cdot \text{Precision}_c\cdot \text{Recall}_c}{\text{Precision}_c+\text{Recall}_c} Precisionc=TPc+FPcTPc,Recallc=TPc+FNcTPc,F1c=Precisionc+Recallc2PrecisioncRecallc

  • Macro-F1

    Macro-F1=1K∑c=1KF1c \text{Macro-F1}=\frac{1}{K}\sum_{c=1}^K F1_c Macro-F1=K1c=1KF1c

    其中 KKK 是类别数(多分类时 K>2K>2K>2,二分类时 K=2K=2K=2)。


为什么在你的课题里很关键?

你的项目要比较二分类(正常vs攻击)多分类(DoS/DDoS/Recon/Mirai…)
现实中样本分布极不平衡:Normal很多、某些攻击很少。只看Accuracy,模型把大部分样本都猜“Normal”也可能很高;而macro-F1惩罚你忽视小类的行为,因为每一类的F1都要算、而且等权进入平均。


结合你的案例:两个小算例

A) 多分类(Normal / DoS / Mirai)

假设在测试集上,你得到(来自 classification_report 的)每类F1:

  • Normal:0.95
  • DoS:0.80
  • Mirai(很稀有):0.30

Macro-F1=0.95+0.80+0.303=0.683 \text{Macro-F1}=\frac{0.95+0.80+0.30}{3}=\mathbf{0.683} Macro-F1=30.95+0.80+0.30=0.683

解读: 虽然 Normal 很准,但 Mirai 被严重漏掉,导致 Macro-F1 被“拉低”。这就是小类不被忽视的信号——写报告时可以据此讨论“多分类对稀有家族的召回不足”。

B) 二分类(Attack=1 / Normal=0)

常见做法是只报正类(Attack)的F1;但macro-F1会把 Attack 的F1Normal 的F1 平均

  • F1(Attack) = 0.86
  • F1(Normal) = 0.76
    Macro-F1 = (0.86 + 0.76)/2 = 0.81
    解读: 这比只看“Attack的F1=0.86”更全面,因为它也在问:把正常误报成攻击了吗?(Normal的F1能反映这点)

它跟别的平均方式的区别

  • Macro-F1(等权):每类“一人一票”,对不平衡最公平
  • Weighted-F1(按样本数加权):大类权重大,更接近整体
  • Micro-F1(先汇总再算):整体层面,常与Accuracy接近,容易被大类主导

在你的论文里:主报 Macro-F1,同时可在附录/表格里放 Weighted/Micro 作为补充。


在你的脚本输出里怎么找 Macro-F1?

  • summary_binary.csvsummary_multiclass.csv 有一列 macro_f1(就是Macro-F1)。
  • classification_report_*.csvmacro avg 也给出 macro 平均(precision/recall/F1)。
  • 你的脚本还会画 binary_macro_f1.png / multiclass_macro_f1.png ——这两张柱状图正是各模型的 Macro-F1 对比,直接贴到PPT和报告里。

报告/答辩可直接粘贴的表述(中英)

中文(放“指标选择”小节)
“我们采用 macro-F1 作为主指标:先分别计算每个类别的F1,再等权平均,从而公平反映稀有攻击家族的识别能力,避免仅凭整体准确率掩盖小类的漏检问题。”

English
“We prioritize macro-F1: it averages per-class F1 scores with equal weights, fairly reflecting performance on minority attack families and avoiding the ‘high-accuracy but poor minority recall’ pitfall.”


小技巧(业务解读)

  • 当 macro-F1 明显低:通常意味着某些小类F1过低 → 查 classification_report 看哪类的 recall(召回)特别差;把其在混淆矩阵中的错配(常被误判成哪一类)截图放进讨论。
  • 二 vs 多的选择:如果多分类相对二分类 macro-F1 提升很有限,但推理时延/模型体积/FPR上涨明显,在线告警更倾向二分类;否则,若你真的需要家族级判断,多分类更有价值。

##(可选)用一句“门槛线”帮助结论落地

  • 示例决策规则:多分类相对二分类 Macro-F1 ↑ < 0.02代价↑ > 30% → 选二分类;否则选多分类。
    (这个阈值可在讨论里说“基于业务容忍度设置”。)

http://www.dtcms.com/a/337540.html

相关文章:

  • SWMM排水管网水力、水质建模及在海绵与水环境中的应用技术-模拟降雨和污染物质经过地面、排水管网、蓄水和处理
  • Jenkins启动端口修改失败查找日志
  • 音频算法工程师技能1
  • Vue2篇——第五章 Vue.js 自定义指令与插槽核心
  • 【序列晋升】:9 Service Mesh微服务通信的基础设施革命
  • 电子元器件-电容终篇:基本原理、参数解读、电路作用、分类及区别、应用场景、选型、降频及实战案例
  • Linux 系统~存储高级技术
  • C++ 中的 delete 与 default 关键字详解
  • diffusion model(1.4) 相关论文阅读清单
  • 遥感数字图像处理教程——第三章课后习题
  • flutter项目适配鸿蒙
  • 人工智能 | 基于大数据的皮肤病症状数据可视化分析系统(matlab源码)
  • Java设计模式-桥接模式
  • Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
  • API 接口在电商中的重要应用​||关于API接口接入
  • 构建者设计模式 Builder
  • python学习DAY45打卡
  • 【运维实战】系统全链路监测方案~架构到实践
  • 【HTML】document api
  • 【每天学点‘音视频’】前向纠错 和 漏包重传
  • 图像分类精度评价的方法——误差矩阵、总体精度、用户精度、生产者精度、Kappa 系数
  • 在 PyCharm Notebook 中安装 YOLO
  • Google 的 Opal:重新定义自动化的 AI 平台
  • 【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备
  • ARM架构下的cache transient allocation hint以及SMMUv2的TRANSIENTCFG配置详解
  • kafka 冲突解决 kafka安装
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pygame’问题
  • 数据赋能(401)——大数据——持续学习与优化原则
  • 删除并获得点数
  • 线程间通信(互斥锁,死锁,信号量)