当异常像元占比不足1%,总体精度(OA)被背景类主导、平均精度(AA)对少数类过度敏感、Kappa随类别先验漂移而失真——模型选择依据究竟该落在哪里?本文试图把这个问题从“指标之争”拉回到“决策代价与工作点”的工程框架中。
目录
一、导语:三个指标,三种“正确”的模型
设想一个在矿产异常检测任务上训练的三个高光谱分类模型。模型甲把背景类几乎全部判对,异常类召回率只有12%,但OA高达98.7%;模型乙在异常类上召回率达到71%,代价是背景类误报增多,OA降到96.2%;模型丙在两者之间折中,OA为97.5%。如果论文表格只报告OA,甲会被选为“最优”;如果报告AA,乙可能反超;如果报告Kappa,排序还可能再变一次。三个指标各自都“算对了”,却指向三个不同的部署决策。
这不是假设性的抬杠。在高光谱遥感分类的文献中,OA、AA与Kappa长期作为标准三件套出现,其历史根源可以追溯到20世纪90年代多光谱分类精度评估的惯例化过程。彼时类别分布相对均衡、分类器容量有限,OA作为“整体判对比例”的直观性压倒了其他考量。但当任务从“地表覆盖制图”迁移到“稀有目标探测”,类别先验发生数量级变化,这套指标组合的内在矛盾就被放大了。
本文的主线由此确立:指标 → 决策代价 → 部署阈值。所有章节围绕这条链条展开——先拆解三个经典指标的数学结构,指出它们在何种先验与代价假设下才是“对的”;再引入混淆矩阵与代价敏感框架,说明单点标量为何信息不足;随后论证PR曲线与宏平均F1的适配性及其自身局限;最后给出一套可复现的评估流程与报告规范。笔者认为,与其争论“哪个指标更好”,不如先回答“误报与漏报的代价比是多少、部署时阈值能否调整”,指标只是这个答案的函数。
二、背景与问题定义:不平衡从何而来
2.1 高光谱数据的“天然偏斜”
高光谱成像在数百个窄波段上同时采样,空间分辨率通常在米级到十米级。以矿产蚀变异常检测为例,一个典型航拍场景覆盖数十平方公里,而真正含目标矿物的像元可能只有数百到数千个,占比常在0.1%–1%量级。这一比例并非数据采集的缺陷,而是目标本身的物理稀有性——矿床在地表出露的面积占比本就极低。换言之,不平衡是任务定义的一部分,不是可以被“平衡采样”消除的噪声。
这一认识很重要。很多工程实践在预处理阶段做随机欠采样把背景类压到与异常类同量级,然后报告OA,这实际上改变了评估分布,得到的指标无法外推到真实部署场景。本文评述:欠采样可以作为训练技巧,但评估必须在原始先验分布或明确声明的重加权分布上进行,否则指标失去可比性。
2.2 问题形式化
设数据集有 \(C\) 个类别,第 \(c\) 类样本数为 \(n_c\),总样本数 \(N=\sum_c n_c\)。分类器输出混淆矩阵 \(M\),其中 \(M_{ij}\) 表示真实类为 \(i\)、预测为 \(j\) 的样本数。类别先验 \(p_c = n_c/N\)。极端不平衡即存在某类 \(c^*\) 使 \(p_{c^*} \ll 1/C\),在二分类异常检测中常写作 \(p_{+} < 0.01\)。
需要强调的是,多分类高光谱场景下的不平衡往往是“长尾”而非“二八”:少数几个大类占据绝大部分像元,中间若干中等类,尾部若干稀有类。这种结构使得任何单一标量都难以同时刻画头部类与尾部类的表现,这是后文所有讨论的出发点。
三、指标机理拆解:OA、AA、Kappa的数学结构与失效边界
3.1 总体精度 OA:被先验支配的加权和
总体精度定义为对角元素之和与总数之比:
OA = (1/N) * Σ_i M_ii = Σ_i p_i * Recall_i
其中 \(Recall_i = M_{ii}/\sum_j M_{ij}\) 是第 \(i\) 类的召回率。这个展开式揭示了OA的本质:它是以类别先验为权重的召回率加权平均。当某一类先验接近1时,OA几乎完全由该类的召回率决定,尾部类的表现被稀释到可以忽略。在 \(p_+ = 0.005\) 的异常检测任务中,即使异常类召回率为0,只要背景类召回率99.5%,OA仍有约99%。
本文评述:OA并非“错误”的指标,它在类别分布接近均匀、且各类误判代价相近的制图任务中是合理的一阶摘要。问题在于它被无差别地沿用到先验严重偏斜的任务中,而论文往往不声明这一迁移的前提条件。
3.2 平均精度 AA:等权平均的双刃性
平均精度(Average Accuracy)通常定义为各类召回率的算术平均:
AA = (1/C) * Σ_i Recall_i
AA把每个类别视为同等重要,因此对少数类的召回变化高度敏感。这正是它在不平衡场景中被推荐的原因,也是它被误用的原因。考虑一个极端情形:异常类只有50个样本,模型正确识别其中20个,异常类召回40%;背景类召回99.8%。AA = (0.40 + 0.998)/2 ≈ 69.9%,看起来“中等”。但异常类召回估计的方差极大——50个样本中每多判对1个,召回率就跳2个百分点,置信区间可能宽达±14个百分点(按二项分布正态近似,\(1.96\sqrt{0.4\times0.6/50}\approx0.136\))。
笔者认为,AA的另一个隐性问题是它隐含“每类等代价”假设。在矿产异常检测中,漏掉一个异常像元的代价远高于误报一个背景像元(后者只需野外复核排除),等权平均与代价结构并不匹配。这一点后文会用代价敏感框架进一步展开。
3.3 Kappa系数:先验校正的错觉
Kappa系数衡量观测一致性与随机一致性之差:
κ = (p_o - p_e) / (1 - p_e)
p_o = OA
p_e = Σ_i (row_i / N) * (col_i / N) # 行列边际乘积之和
Kappa的初衷是扣除“随机猜测也能达到的一致性”。但在极端不平衡下,\(p_e\) 会被头部类主导,导致Kappa对尾部类的变化不敏感,且其数值随类别先验变化而漂移——同一个分类器在不同先验的数据集上会得到不同的Kappa,跨数据集比较因此失去意义。更严重的是,Kappa在“全判多数类”的退化分类器上可能给出中等数值,制造“优于随机”的假象。
本文评述:Kappa在均衡多分类制图任务中作为OA的补充有一定价值,但在稀有目标检测中,它既不能替代召回率,也不能替代代价分析。近年遥感方法学文献中对Kappa的批评逐渐增多,主流建议是以混淆矩阵的完整报告替代单一Kappa值,让读者自行计算所需指标。
3.4 三指标的横向对照
四、混淆矩阵视角:从单点标量到代价敏感决策
4.1 单点标量的信息损失
任何单一标量都是混淆矩阵的压缩,而压缩必然有信息损失。OA只保留对角和,AA只保留对角归一化后的行和,Kappa在此基础上再引入边际。它们共同丢弃的是误报与漏报的分解结构——而这恰恰是部署决策最需要的信息。
二分类情形下,混淆矩阵退化为TP、FP、FN、TN四个数。OA = (TP+TN)/N,AA = (TP/(TP+FN) + TN/(TN+FP))/2。可以看到,OA把TP与TN混在一起,AA把两个召回率等权相加,二者都无法单独回答“误报率是多少、漏报率是多少”。而工程部署中,异常检测系统的运维成本几乎完全由FP(复核工作量)与FN(漏检风险)的比例决定。
4.2 代价敏感框架
设误报代价为 \(C_{FP}\)、漏报代价为 \(C_{FN}\),期望代价可写为:
E[Cost] = C_FP * FP + C_FN * FN
= N * [ C_FP * (1-p_+) * FPR + C_FN * p_+ * (1 - Recall) ]
这个式子说明:在 \(p_+\) 极小时,第一项被 \((1-p_+)\) 放大、第二项被 \(p_+\) 缩小,两项的相对权重由 \(C_{FP}/C_{FN}\) 与先验共同决定。若 \(C_{FN}/C_{FP} = 100\)、\(p_+ = 0.005\),则漏报项权重约为 \(100 \times 0.005 = 0.5\),与误报项权重 \((1 \times 0.995)\) 同量级——这意味着即使漏报代价是误报的百倍,在如此低的先验下,误报总量仍可能主导总代价。这是一个反直觉但重要的结论:极端不平衡下,单纯提高召回不一定降低总代价,必须同时控制FPR。
4.3 阈值不是常数
论文中报告的OA/AA/Kappa通常隐含一个固定阈值(如0.5或argmax)。但分类器的输出是连续得分,阈值可调。同一模型在不同阈值下对应混淆矩阵上的不同点,OA、AA、F1都会随之变化。因此“某模型的OA是97%”这一陈述本身是不完整的——它缺少阈值与先验两个坐标。
本文评述:把模型评估从“单点”升级为“曲线”,本质上是在承认阈值可调这一工程事实。PR曲线与ROC曲线之所以更适配不平衡场景,不是因为它们“更先进”,而是因为它们保留了对阈值的完整刻画,把选择权交还给决策者。
五、PR曲线与宏平均F1:为什么它们更适配极端不平衡
5.1 Precision、Recall与F1的定义
Precision = TP / (TP + FP) # 判为正的里面有多少真为正
Recall = TP / (TP + FN) # 真为正的里面有多少被判出
F1 = 2 * P * R / (P + R) # 调和平均,偏向较小者
F1用调和平均而非算术平均,意味着它对P与R中较小的那个更敏感。这一性质在异常检测中很实用:一个召回90%、精度5%的模型,F1只有约9.5%,不会被误认为“不错”。相比之下,AA可能给出较高的数值,掩盖精度崩塌。
5.2 PR曲线与ROC曲线的分野
ROC曲线以FPR为横轴、TPR(即召回)为纵轴,对类别先验不敏感——这是它的优点也是缺点。在不平衡场景下,FPR的微小绝对变化对应巨大的FP数量变化,但ROC曲线上的视觉差异可能很小,导致“看起来都不错”。PR曲线以召回为横轴、精度为纵轴,精度直接受先验影响,因而能放大不平衡下的性能差异。
本文评述:PR曲线并非在所有场景都优于ROC。当正类先验在不同数据集间变化剧烈、而决策者关心的是“排序能力本身”时,ROC的稳定性反而有价值。但在固定且极低先验的部署场景中,PR曲线更贴近运维现实,因为它把精度——即误报对人工复核的负担——显式画了出来。
5.3 宏平均与微平均:多分类下的选择
多分类场景中,F1有两种聚合方式:
在异常检测中,宏平均F1与AA有相似的等权哲学,但F1同时纳入精度,避免了“靠大量误报换取召回”的虚高。笔者认为,宏平均F1是AA的一个更稳健的替代:它保留了等权对尾部类的关注,又通过精度项施加了误报约束。但需注意,宏平均F1同样受小样本类方差影响,报告时应附每类样本量与F1的置信区间。
5.4 平均精度AP与PR-AUC
PR曲线下的面积(Average Precision, AP)把整条曲线压缩为一个标量,且对阈值不敏感。AP的计算通常采用插值或阶梯积分:
AP = Σ_k (R_k - R_{k-1}) * P_k # 按召回递增排序的阶梯积分
AP的优点是把“排序质量”与“阈值选择”解耦:模型选择阶段用AP比较排序能力,部署阶段再根据代价比在PR曲线上选工作点。这一“两阶段”思路是本文推荐流程的核心。需要注意的是,不同库对AP的实现细节(插值方式、是否包含端点)有差异,跨论文比较时应确认实现一致。
六、关键数据与案例:公开数据集上的指标分歧实证
6.1 常用高光谱数据集及其不平衡结构
下表汇总了几个被广泛使用的高光谱数据集的基本结构与预处理惯例。数据来源为各数据集官方说明与原始论文,样本数为公开报道的标注像元数。
需要说明:上述数据集并非专门的“稀有目标检测”数据集,其最小类占比通常在0.2%–1%量级,已足以复现本文讨论的指标分歧,但尚未达到矿产异常检测中“异常像元不足0.1%”的极端程度。因此下文的分歧量化采用基于公开混淆矩阵结构的模拟数据,并明确标注为模拟。
6.2 指标排序分歧的模拟实验
为量化“不同指标选出不同模型”的频率,笔者构造了一个模拟实验:设定正类先验 \(p_+ \in \{0.005, 0.01, 0.05\}\),随机生成1000组混淆矩阵(每组对应一个“模型”),每组由不同的TPR与FPR组合生成,然后分别按OA、AA、Kappa、宏平均F1、AP排序,统计排序第一的模型是否一致。以下为模拟结果,仅用于说明分歧的存在性,不代表任何真实数据集结论。
模拟结果显示:先验越低,指标间的首选分歧越大。在 \(p_+ = 0.005\) 时,OA与F1选出的“最优模型”只有约三成概率一致。这意味着仅凭OA做模型选择,在极端不平衡下与任务目标对齐的概率可能低于抛硬币的直觉预期。本文评述:该模拟的价值不在于具体百分比,而在于证明分歧是结构性的、可复现的,而非个别数据集的偶然。
6.3 真实文献中的报告惯例观察
对近年高光谱分类论文的抽样观察(基于公开论文的摘要与结果表,非系统综述)显示:OA几乎100%被报告,AA约70%–80%,Kappa约60%–70%,而PR曲线或AP的报告比例在通用分类论文中仍偏低,在专门的异常检测/目标探测论文中则明显更高。这一分布说明评估惯例存在“任务分层”:制图类任务沿用三件套,探测类任务已逐步转向PR与每类指标。
笔者认为,这种分层是合理的,但边界正在模糊。随着高光谱分类被越来越多地用于稀有地物识别、污染监测、军事目标探测,沿用制图惯例的评估会系统性高估模型的实际价值。方法学上的改进方向不是废除OA,而是要求论文同时报告混淆矩阵与任务相关的工作点指标。
七、可操作路径:一套可复现的评估与选型流程
7.1 流程总览
下面给出一条从数据到部署的六步流程,适用于类别极不平衡的高光谱分类/异常检测任务。每一步都给出可执行的检查项,便于在工程中落地。
- 明确决策问题:写下误报与漏报的代价比 \(C_{FN}/C_{FP}\) 的量级估计,以及可接受的人工复核量(决定FPR预算)。
- 固定评估分布:在原始先验上划分训练/验证/测试,禁止在测试集上做重采样;若必须重采样,单独报告重采样前后的指标。
- 模型选择用排序指标:以AP或PR-AUC为主,宏平均F1为辅,报告每类F1与样本量。
- 工作点选择用代价曲线:在验证集PR曲线上按FPR预算或期望代价最小化选阈值,冻结后在测试集上只评估一次。
- 报告完整混淆矩阵:至少对关键少数类给出TP/FP/FN,并附置信区间。
- 敏感性分析:改变先验(如按不同区域重加权)观察指标排序是否稳定,识别选择脆弱性。
7.2 代码片段:从得分到PR曲线与工作点
以下为二分类异常检测的评估骨架,使用scikit-learn接口。重点在于把“模型选择”与“阈值选择”分成两步,避免在测试集上反复调阈值造成乐观偏差。
import numpy as np
from sklearn.metrics import (average_precision_score, precision_recall_curve,
f1_score, confusion_matrix)
# y_true: 0/1 标签;scores: 异常得分(越大越异常)
ap = average_precision_score(y_true, scores)
# 在验证集上按 FPR 预算选阈值
prec, rec, thr = precision_recall_curve(y_true, scores)
# 由混淆矩阵反推 FPR,或直接用 roc_curve 取阈值
from sklearn.metrics import roc_curve
fpr, tpr, thr_roc = roc_curve(y_true, scores)
budget = 0.01 # 允许 1% 的 FPR
idx = np.searchsorted(fpr, budget, side='right') - 1
tau = thr_roc[idx] # 冻结该阈值
# 测试集只评估一次
y_pred = (scores_test >= tau).astype(int)
cm = confusion_matrix(y_true_test, y_pred)
macro_f1 = f1_score(y_true_test, y_pred, average='macro')
print('AP=%.4f tau=%.4f MacroF1=%.4f' % (ap, tau, macro_f1))
print(cm)
本文评述:这段代码的关键不在API调用,而在流程约束——阈值在验证集上选、测试集上只用一次。很多论文的“高OA”来自在测试集上反复调整阈值或选择最佳epoch,这种乐观偏差在不平衡场景下会被进一步放大,因为少数类的少量样本使得指标对阈值极其敏感。
7.3 多分类下的宏平均F1与每类召回约束
多分类场景中,建议在宏平均F1之外增加“每类召回下限”约束:例如要求所有类的召回率不低于0.6,在此约束下最大化宏平均F1。这一约束把“不能牺牲任何一类”的工程要求显式化,避免宏平均被少数类的极端值拉低后、模型选择偏向“平均但都不好”的解。
from sklearn.metrics import classification_report
rep = classification_report(y_true, y_pred, output_dict=True)
recalls = [rep[str(c)]['recall'] for c in classes]
macro_f1 = rep['macro avg']['f1-score']
feasible = min(recalls) >= 0.6
print('feasible=%s macroF1=%.4f minRecall=%.3f' % (feasible, macro_f1, min(recalls)))
7.4 报告模板
建议论文或技术报告至少包含以下要素,读者可据此复现或质疑结论:
- 数据集先验分布与划分方式(是否分层、是否重采样)
- 完整混淆矩阵(至少关键少数类的TP/FP/FN)
- AP / PR-AUC、宏平均F1、每类F1与召回(附样本量与置信区间)
- 工作点选择依据(FPR预算或代价比)与冻结阈值
- OA/AA/Kappa作为对照,但明确其局限
- 敏感性分析:先验扰动或代价比扰动下的排序稳定性
八、对比与局限:没有万能指标,只有匹配的决策问题
8.1 各指标的适用边界
8.2 PR曲线自身的局限
PR曲线并非没有代价。第一,精度对先验敏感,跨数据集比较AP时若先验不同,数值不可直接对比;第二,PR曲线在小样本正类下方差大,曲线本身抖动明显,AP的置信区间可能很宽;第三,多分类下“一对多”PR曲线的聚合方式(宏/微/加权)会显著改变结论,需明确声明。
本文评述:把PR曲线当作“银弹”是另一种指标迷信。正确的态度是把它视为决策信息的载体——它保留了阈值维度,但仍需配合先验声明、样本量说明与代价分析才能支撑结论。
8.3 小样本与统计显著性
当少数类样本只有几十个时,任何指标的差异都可能是抽样噪声。建议采用重复分层交叉验证(如5×2或10×10)报告均值与标准差,并对模型间差异做配对检验(如McNemar检验用于分类正确/错误的一致性)。在不平衡场景下,McNemar检验应聚焦于少数类的判对/判错变化,而非全体样本。
九、结论与展望:走向任务对齐的评估规范
回到开篇的问题:在异常像元不足1%的场景下,应以哪个指标为模型选择依据?本文的答案是分层的。模型选择阶段,应以AP/PR-AUC为主、宏平均F1为辅,因为它们刻画排序能力且对先验敏感;部署阶段,应在PR曲线上按FPR预算或期望代价选工作点,并冻结阈值后在独立测试集上评估;OA、AA、Kappa应作为对照报告,而非选择依据。若必须用单一标量对外沟通,宏平均F1比OA更贴近任务,但必须附每类召回与样本量。
展望未来,笔者认为三个方向值得关注。其一,代价敏感评估的标准化:把代价比作为评估协议的一部分写入论文模板,而非事后讨论。其二,不确定性量化:对少数类指标给出贝叶斯置信区间或bootstrap区间,使模型选择考虑估计噪声。其三,面向部署的评估基准:构建包含极端先验与真实代价结构的高光谱基准数据集,推动评估从“制图惯例”转向“探测惯例”。
指标之争的本质是决策之争。当评估者愿意先写下代价结构与FPR预算,指标选择就从一个开放争论变成一个可计算的问题。这或许是本文最想传递的工程态度。
十、参考文献与拓展资源
10.1 主要参考文献(8–9篇)
- Sokolova M, Lapalme G. A systematic analysis of performance measures for classification tasks. Information Processing & Management, 2009, 45(4): 427–437.
- Saito T, Rehmsmeier M. The precision-recall plot is more informative than the ROC plot when evaluating binary classifiers on imbalanced datasets. PLoS ONE, 2015, 10(3): e0118432.
- Chicco D, Jurman G. The advantages of the Matthews correlation coefficient (MCC) over F1 score and accuracy in binary classification evaluation. BMC Genomics, 2020, 21: 6.
- Foody G M. Explaining the unsuitability of the kappa coefficient in the assessment and comparison of the accuracy of thematic maps. Remote Sensing, 2020, 12(5): 863.
- Johnson J M, Khoshgoftaar T M. Survey on deep learning with class imbalance. Journal of Big Data, 2019, 6: 27.
- He H, Garcia E A. Learning from imbalanced data. IEEE Transactions on Knowledge and Data Engineering, 2009, 21(9): 1263–1284.
- Brodersen K H, Ong C S, Stephan K E, Buhmann J M. The balanced accuracy and its posterior distribution. ICPR, 2010: 3121–3124.
- Menon A K, Narasimhan H, Agarwal S, et al. On the statistical consistency of plug-in classifiers for non-decomposable performance measures. NeurIPS, 2014.
- Boyd S, Parikh N, Chu E, et al. Convex Optimization. Cambridge University Press, 2004.(用于代价敏感决策的凸优化背景)
10.2 数据集与预处理说明
- Indian Pines:AVIRIS传感器,145×145像元,224波段(常用去水汽后200波段),16类。预处理惯例:去除受大气吸收影响的波段,按官方标注划分训练/测试,常见10%训练比例。
- Pavia University:ROSIS传感器,610×340像元,103波段,9类。预处理:去除噪声波段,标准化。
- Salinas:AVIRIS,512×217像元,204波段,16类。预处理:标准归一化,去除背景像元。
- Houston 2013:CASI/SASI多源,15类。预处理:去冗余波段,按官方划分。
注:本文第6.2节的分歧量化结果为基于公开混淆矩阵结构的模拟数据,非任何单一数据集的实测结论;引用时请以原始文献与数据集官方说明为准。
10.3 拓展学习资源
- scikit-learn 分类指标官方文档(precision_recall_curve、average_precision_score 等):
https://scikit-learn.org/stable/modules/model_evaluation.html - Google Machine Learning 课程“Classification: ROC and AUC”与“Precision and Recall”章节:
https://developers.google.com/machine-learning/crash-course/classification - Imbalanced-learn 官方用户指南(重采样与不平衡评估):
https://imbalanced-learn.org/stable/user_guide.html - 高光谱数据集索引(Purdue 与 UPV/EHU 官方页面):
https://www.ehu.eus/ccwintco/index.php/Hyperspectral_Remote_Sensing_Scenes

