1. 从二分类到多分类:理解混淆矩阵的核心概念
第一次接触机器学习分类问题时,很多人都是从二分类场景入手的。比如判断邮件是否为垃圾邮件,或者诊断患者是否患病。这时候的混淆矩阵非常简单,只有四个格子:TP、FP、FN、TN。但当我第一次遇到10个类别的图像分类任务时,突然发现原来的理解完全不够用了——每个类别的预测结果都需要单独计算,整个评估过程变得复杂得多。
让我们从一个实际案例开始。假设我们正在开发一个水果识别系统,需要区分苹果、香蕉和橙子三类。对于"苹果"这个类别来说:
- TP(真正例):模型预测为苹果且确实是苹果的样本
- FP(假正例):模型预测为苹果但实际是香蕉或橙子的样本
- FN(假负例):实际是苹果但被预测为香蕉或橙子的样本
- TN(真负例):实际不是苹果且预测也不是苹果的样本
这里有个容易混淆的点:TN的计算。在多分类中,TN不是简单地"预测为负类",而是"预测为其他所有类别"。比如对于苹果类别,预测为香蕉或橙子都算作"不是苹果"。
我曾经在一个电商商品分类项目中犯过错误:误以为TN就是模型预测为"明确否定"的样本。实际上,在多分类里,TN更像是"非此即彼"的概念。理解这点后,再看混淆矩阵就清晰多了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 多分类场景下的性能指标计算
2.1 单类别指标计算
当我们有了每个类别的TP、FP、FN、TN后,就可以计算各类指标了。以准确率为例,很多人以为多分类的准确率就是所有类别准确率的平均值,这其实是个常见误区。
准确率的正确定义是:
code复制总正确预测数 / 总样本数
= (TP₁ + TP₂ + ... + TPₖ) / N
其中k是类别数,N是总样本数。也就是说,它直接看模型在所有类别上的整体正确率。
但在实际项目中,我发现单纯看准确率会掩盖很多问题。比如在一个医学影像分类项目中,某些罕见病的识别准确率可能很低,但因为样本量少,对整体准确率影响很小。这时候就需要更细致的指标:
-
精确率(Precision):预测为该类别的样本中,确实属于该类别的比例
code复制Precision = TP / (TP + FP) -
召回率(Recall):实际属于该类别的样本中,被正确预测的比例
code复制Recall = T
