← 返回题目列表

多分类评估怎么做?macro、micro、weighted 平均有什么区别?

高频 中等 第 2 / 25 题 更新于 2026/09/25
模型评估多分类macromicro
学习 AI 实战项目

简化版

多分类通常先把每类视为 one-vs-rest 计算 P/R/F1,再汇总。Macro 对每类等权,适合“类别本身一票”的目标,也会让极小类高方差更明显;Micro 先汇总各类计数,单标签完整预测时 micro-P/R/F1 都等于 Accuracy,但多标签时不成立;Weighted 按真实类 support 加权每类指标,更接近流量构成,却不等同于 micro,且容易掩盖小类。任何平均都应配合 per-class 指标、样本量和混淆矩阵。

详细版

三种平均对比:

平均方式算法特点适用
macro(宏)各类指标算术平均每类等权,小类影响大关注少数类、类别不平衡
micro(微)汇总所有 TP/FP/FN 再算被大类主导;=整体准确率关注整体、样本级性能
weighted(加权)各类指标按真实类 support 加权由大类主导但保留逐类运算想按评估流量构成汇总

关键区别(不平衡时最明显):

  • macro:把每个类当作同等重要——一个小类表现差,会明显拉低 macro 值(保护少数类)。
  • micro:把每个样本当作同等重要——大类样本多,主导结果(小类差了也看不太出来)。

多分类混淆矩阵: C×C 矩阵,对角线是各类分对数;每个类用「该类 vs 其余」得到自己的 TP/FP/FN。

完整版教学

一、从二分类到多分类:先分类算,再平均

精确率、召回率、F1 本是二分类指标。多分类(C 个类别)要先把它们扩展到每个类别,再汇总:

  • 对每个类别 k,用「该类为正、其余所有类为负(One-vs-Rest)」的视角,算出这个类的 TP、FP、FN,进而得到该类的精确率、召回率、F1。
  • 这样得到 C 组「每类指标」后,用某种平均方式汇总成一个整体数值——不同的平均方式(macro / micro / weighted)就是本题的核心。

先看多分类的混淆矩阵:它是 C×C 的,行是真实类、列是预测类,对角线是各类分对的数量,非对角线是各种混淆。每个类的 TP/FP/FN 都能从这个矩阵读出。

二、macro(宏平均):每个类别一票

macro 先算出每个类别各自的指标,然后直接取算术平均(不管每类多少样本):

macro-F1 = (F1_类1 + F1_类2 + ... + F1_类C) / C

特点:每个类别权重相等——一个只有 10 个样本的小类,和一个有 10000 个样本的大类,在 macro 里贡献一样大。

  • 优点:保护少数类——如果模型在某个小类上表现很差,macro 会明显下降、把问题暴露出来。
  • 适用:类别不平衡、且我们同等关心每个类别(尤其小类) 的场景,比如疾病多分类里每种罕见病都重要。

三、micro(微平均):每个样本一票

micro 不分类别,而是把所有类别的 TP、FP、FN 先分别加总,再用总数算一个整体指标:

micro-Precision = ΣTP / (ΣTP + ΣFP)   (所有类的 TP、FP 加起来)
micro-Recall    = ΣTP / (ΣTP + ΣFN)
micro-F1        = 由上面两个算

特点:每个样本权重相等——样本多的大类主导结果,小类的好坏几乎被淹没。

重要结论:在单标签多分类里,每个样本恰好一个真实类、一个预测类,所以 ΣFP = ΣFN(一个样本被错判,既是某类的 FP 又是另一类的 FN),于是 micro-Precision = micro-Recall = micro-F1 = 整体准确率(Accuracy)。所以多分类里报 micro-F1,其实就是在报准确率。

四、weighted(加权平均):按样本数折中

weighted 介于两者之间——算出各类指标后,按每个类别的样本数(支持度 support)加权平均:

weighted-F1 = Σ (该类样本占比 × 该类F1)

特点是大类权重大、小类权重小。它保留“先算每类指标再加权”的运算,因此通常不等于 micro;但不能说它必然比 micro 更照顾小类,也不保证数值位于 macro 与 micro 之间。

五、三者怎么选——看你在乎什么

关键区别在**「谁一票」**:

一票单位谁主导适用
macro每个类别各类平等(小类影响大)关注少数类、类别平等重要
micro每个样本大类(样本多的)关注整体样本级性能
weighted按真实类 support 加权每类指标大类为主按评估流量构成汇总逐类指标

选择原则:

  • 在意每个类别、尤其少数类 → macro(不平衡时最能反映小类问题)。
  • 在意整体样本预测对多少 → micro(=准确率) 或 weighted。
  • 不平衡场景里,macro 和 micro 差距大本身就是信号:说明模型在小类和大类上表现悬殊。

六、常见追问

  • 多分类 micro-F1 为什么等于准确率? 单标签下 ΣFP=ΣFN,导致 micro 的 P=R=F1=正确样本/总样本=准确率。
  • 不平衡多分类该看哪个? macro(每类等权,暴露小类问题),别只看 micro/准确率。
  • macro 和 weighted 区别? macro 各类等权(小类影响大);weighted 按样本数加权(大类影响大)。
  • 多标签分类呢? 每个样本可属多个类,micro/macro 仍适用但 micro-F1 不再等于准确率,需按标签集合评估。
  • 怎么快速诊断? 看每类的 P/R/F1(sklearn 的 classification_report),再结合 macro/micro 平均。

七、从三分类混淆矩阵算出三种平均

设行是真实类、列是预测类,混淆矩阵为 [[40,5,5],[4,20,6],[1,4,15]],总计 100 个样本,正确 75 个。A/B/C 的召回率分别是 40/50=0.80、20/30≈0.667、15/20=0.75,macro-recall≈0.739;按 support 加权后 weighted-recall=(50×0.8+30×0.667+20×0.75)/100=0.75。

单标签多分类:
ΣTP = 正确预测数
ΣFP = ΣFN = 错误预测数
micro-P = micro-R = micro-F1 = Accuracy
汇总本例含义容易掩盖什么
macro三个类各占 1/3不体现真实流量占比
micro100 个样本各一票少数类错误
weighted按 50/30/20 加权每类指标小类权重仍然小

weighted 不是数学上保证落在 macro 与 micro 之间的“折中”;尤其 weighted-F1 与 micro-F1 可以不同方向变化。等式“micro-F1=accuracy”也只适用于每个样本恰有一个真实标签和一个预测标签的单标签多分类。

记忆钩子:macro 问“平均一个类别表现怎样”,micro 问“平均一个标签决策怎样”,weighted 问“按真实流量加权后怎样”。

八、常见误区与追问

  • 误区:多分类场景下 micro-F1 永远等于 accuracy。 该结论依赖单标签完整预测,多标签任务不成立。
  • 误区:weighted-F1 一定介于 macro-F1 和 micro-F1 之间。 加权的是每类 F1,micro 则先汇总计数,运算顺序不同。
  • 追问:某类没有真实样本时 Recall 怎么办? 分母为零,应声明 zero-division 规则并检查数据切分。
  • 追问:为什么必须看 per-class 指标? 任何单个平均值都可能隐藏具体哪个类别失败。
  • 追问:类别层级不同怎么办? 可同时报告叶子类指标和按业务层级聚合后的指标。

九、加强记忆

多分类先按 one-vs-rest 得到每类 P/R/F1。Macro 直接平均每类指标,表达“每类一票”,但极小类估计会很不稳定;Micro 先汇总 TP/FP/FN,表达“标签决策一票”,只有单标签完整预测时 micro-P/R/F1 才等于 Accuracy;Weighted 按真实类 support 加权每类指标,由大类主导且不等于 micro,也不保证夹在 macro 与 micro 之间。选择取决于决策单位,不能把 macro 自动等同公平。最终同时报告 per-class 样本量、混淆矩阵和 zero-division 约定,避免任何单一平均隐藏失败类别。