混淆矩阵是一种表格化的方式,用于可视化预测模型的性能。混淆矩阵中的每个条目表示模型分类正确或错误的类别预测次数。
已经熟悉混淆矩阵的人都知道,它通常是针对二元分类问题进行解释的。但是,这篇文章不是针对二元分类的解释。今天,我们将看看混淆矩阵在多类机器学习模型上的工作原理。但是,我们将从二元分类开始,以便更好地了解。
二元分类的混淆矩阵
二元分类的混淆矩阵
如你所见,二元分类问题只有两个类别可供分类,最好是正类和负类。现在让我们看看混淆矩阵的指标。
真正(TP): 它是指分类器正确预测正类为正类的预测次数。
真负(TN): 它是指分类器正确预测负类为负类的预测次数。
假正(FP): 它是指分类器错误地将负类预测为正类的预测次数。
假负(FN): 它是指分类器错误地将正类预测为负类的预测次数。
最好将混淆矩阵用作机器学习模型的评估标准。它为你的模型提供了非常简单但有效的性能指标。以下是你可以从混淆矩阵中使用的最常见性能指标。
准确率:它给出模型的整体准确率,即分类器正确分类的样本总数的分数。要计算准确率,请使用以下公式:(TP+TN)/(TP+TN+FP+FN)。
分类错误率:它告诉你预测的哪一部分是错误的。它也称为分类错误率。你可以使用(FP+FN)/(TP+TN+FP+FN)或(1-准确率)来计算它。
精度:它告诉你实际上是正类的预测中有多少是正类。要计算精度,请使用以下公式:TP/(TP+FP)。
召回率:它告诉你分类器正确预测为正类的所有正样本的分数。它也称为真正率(TPR)、灵敏度、检测概率。要计算召回率,请使用以下公式:TP/(TP+FN)。
特异性:它告诉你分类器正确预测为负类的所有负样本的分数。它也称为真负率(TNR)。要计算特异性,请使用以下公式:TN/(TN+FP)。
**F1值:**它将精度和召回率结合为单个度量。在数学上,它是精度和召回率的调和平均值。它可以计算如下:
在理想的情况下,我们希望模型的精度为1,召回率为1。这意味着F1得分为1,即100%的准确性,这通常不适用于机器学习模型。因此,我们应该尝试获得更高的精度和更高的召回率。现在,我们已经了解了混淆矩阵的性能指标,让我们看看如何在多类机器学习模型中使用它。
多类分类的混淆矩阵
为简单起见,让我们将我们的多类分类问题视为3类分类问题。假设我们有一个数据集,其中包含三个类标签,即苹果、橙子和芒果。以下是这些类的可能混淆矩阵。
多类分类的混淆矩阵
与二元分类不同,这里没有正类或负类。一开始可能很难找到TP、TN、FP和FN,因为没有正类或负类,但实际上很容易。我们必须为每个单独的类找到TP、TN、FP和FN。例如,如果我们选择苹果类,那么让我们看看混淆矩阵中指标的值。
- TP = 7
- TN = (2+3+2+1) = 8
- FP = (8+9) = 17
- FN = (1+3) = 4
由于我们从混淆矩阵中获得了类Apple的所有必要指标,现在我们可以计算类Apple的性能指标。例如,类Apple具有
- 精度 = 7/(7+17) = 0.29
- 召回率 = 7/(7+4) = 0.64
- F1值 = 0.40
同样,我们可以计算其他类的指标。以下是显示每个类的每个指标值的表格。
每个类的精度、召回率和F1值
现在我们可以更多地利用这些指标。我们可以组合每个类的F1值,以获得整个模型的单个指标。有几种方法可以做到这一点,让我们现在看看它们。## 微观平均 F1
这被称为微观平均 F1 分数。它通过考虑模型的总 TP、总 FP 和总 FN 来计算。它不考虑每个类别,而是全局计算指标。因此,对于我们的示例,
- 总 TP = (7+2+1) = 10
- 总 FP = (8+9)+(1+3)+(3+2) = 26
- 总 FN = (1+3)+(8+2)+(9+3) = 26
因此,
- 精确度 = 10/(10+26) = 0.28
- 召回率 = 10/(10+26) = 0.28
现在我们可以使用常规的 F1 分数公式,使用上述精度和召回率来获取微观平均 F1 分数。
微观平均 F1 = 0.28
正如你所看到的,当我们全局计算指标时,所有度量值变得相等。此外,如果你计算准确度,你会发现:
精确度 = 召回率 = 微观平均 F1 = 准确度
宏观平均 F1
这是宏观平均 F1 分数。它为每个类别单独计算指标,然后取度量的无权平均值。正如我们从图 “每个类别的精确度、召回率和 F1 分数” 中看到的,
- 类别 Apple 的 F1 分数 = 0.40
- 类别 Orange 的 F1 分数 = 0.22
- 类别 Mango 的 F1 分数 = 0.11
因此,
宏观平均 F1 = (0.40+0.22+0.11)/3 = 0.24
加权 F1
最后一个是加权平均 F1 分数。与宏观平均 F1 不同,它采用度量的加权平均值。每个类别的权重是该类别的样本总数。由于我们有 11 个 Apples、12 个 Oranges 和 13 个 Mangoes,
加权 F1 = ((0.40*11)+(0.22*12)+(0.11*13))/(11+12+13) = 0.24
最后,让我们看一个使用 Python 的 Scikit-learn 计算这些度量的脚本。
这是脚本的输出。
来源:Google Colab
注意:Scikit-Learn 使用行作为“真实类别”,列作为“预测类别”。这与我们对 Apple、Orange 和 Mango 示例的考虑相反,但逻辑上相似。你可以以任何方式考虑真实和预测类别。但是,如果你使用 Scikit-Learn,则必须按照他们的规则操作。
希望你找到了你要寻找的内容。谢谢阅读。
评论(0)