kappa 偏小,先别急着改模型
kappa 算出来偏小,很多人第一反应是回去调分类器。我建议先停一下,看一眼混淆矩阵。
如果你的矩阵里有一类占了大头,那这个数字低,很可能跟分类做得好不好没关系。
先看它是怎么算的
κ = (Po − Pe) / (1 − Pe)
Po 是总体精度,对角线之和除以总样本数。Pe 是"随机乱猜也能对上的概率",由混淆矩阵的行列边际推出来。
问题就出在 Pe 上。它跟着类别分布走:某一类占了绝大多数,Pe 就被抬得很高,分母 1 − Pe 变得很小。同样的 Po,算出来的 κ 被压下去。
举个数:玉米占八成、其他作物合起来占两成。一个把所有地块都判成玉米的模型,Po 直接就是 0.8。这时候 Pe 也接近 0.8,分母只剩 0.2,κ 大概 0.0 出头。
这个模型一个"其他作物"都没认出来,但它的总体精度有 80%。kappa 说它等于瞎猜——这个判断反而是对的。
反过来另一种情况:模型其实分得不错,但玉米占九成,kappa 仍然上不去。这时候 κ 低是数学结构造成的,不是模型差。
所以第一步不是调参,是把混淆矩阵打出来,看三样东西:总体精度 Po、每一类的 UA 和 PA、还有行列边际的分布。看完才知道属于哪一种。
这个指标本身就有点问题
不是我的个人偏见,学界二十多年前就说过。
Feinstein 和 Cicchetti 在 1990 年指出两个悖论:完全不同的表现可以算出同一个 kappa;类别不均衡时,高精度反而得到低 kappa。
更要命的是抽样能操纵它。同一份分类结果,只改验证样本的类别比例——按面积比例抽,还是按类别等量分层抽——kappa 的数值就变了。一个会被抽样设计左右的指标,不适合当唯一判据。
后来的走向也清楚:Pontius 和 Millones 在 2011 年提出用数量误差和位置误差取代它;Foody 在 2020 年系统论证了 kappa 不适用于遥感。现在主流期刊基本不再把 kappa 当主要指标。
那该报什么
短答案:OA 加 UA/PA,必要时补 F1,位置精度看具体任务。
- 总体精度 OA:整体分对的比例。可以报,但必须写明样本是怎么抽的,否则这个数没意义。
- 用户精度 UA:你判成"玉米"的地块里,有多少真是玉米。衡量误分进来的。
- 生产者精度 PA:真的玉米地里,有多少被你找出来了。衡量漏掉的。
UA 和 PA 一定要分开报。只报一个"准确率",看不出错在哪——是错得多,还是漏得多,这两个对使用者的含义完全不同。
涉及面积的时候再加两个:数量误差(总亩数差多少)和位置误差(图斑叠不叠得上)。这两个跟面积的对应关系,比 kappa 直接得多。
我自己怎么用的
做农险定损,最后一公里要落到"面积准不准",所以我们这边不看 kappa,看两个数:
一是分类得到的作物面积,对上承保面积或统计面积,落在 95% 到 100% 之间;二是作物图斑与参考图斑的叠合度不低于 90%。两个同时满足才算过。
为什么不用 kappa——它不告诉你面积对不对。
一张 kappa 0.9 的分类图,面积照样可能偏三成。因为误差可能全集中在某一类上,而那一类的面积恰恰是最后要报的数。kappa 看到的是"整体分对了多少",看不到"你最关心的那一类差了多少"。
还有个更实际的原因:kappa 是个 0 到 1 之间的数,甲方看不懂,也没法拿去核。而"差 12 亩"是个人人都能对的事实。
一句话
kappa 小,先看行列边际,别先改模型。边际严重不均衡的时候,它低是正常的。
真要做的是换一套指标:OA 加 UA/PA,面积任务再加数量误差和位置误差。kappa 可以留着当参考,但别当成判据。