什么是机器学习中的混淆矩阵?

混淆矩阵是一种用于评估监督学习算法在分类任务中表现的有力工具。

什么是混淆矩阵?

人类对于事物的认知存在差异,即使是对真理和谎言的判断也可能不同。例如,一条线段在我看来可能是 10 厘米,而在你看来可能是 9 厘米。然而,其实际长度可能是 9、10 或其他值。我们所猜测的是预测值!

人类的思维模式

正如我们的大脑会运用自身的逻辑来预测事物一样,机器也会运用各种算法(被称为机器学习算法)来得出问题的预测值。同样,这些预测值可能与实际值一致或不一致。

在一个竞争激烈的环境中,我们渴望知道我们的预测是否准确,以此来评估我们的表现。同样,我们也可以通过正确预测的次数来衡量机器学习算法的性能。

那么,什么是机器学习算法呢?

机器学习算法是机器尝试通过应用特定的逻辑或指令集来解决问题的过程。机器学习算法主要分为三大类:监督学习、无监督学习和强化学习。

最简单的一类是监督学习,在监督学习中,我们已经知道答案,并通过大量数据来训练算法,使其学习得出该答案。这就像一个孩子通过反复观察不同年龄段的人的特征来区分他们一样。

监督机器学习算法又可以细分为分类和回归两大类。

分类算法根据预先设定的标准对数据进行分类或排序。例如,如果你想让算法根据客户的食物偏好对他们进行分组——喜欢披萨的和不喜欢披萨的,你可以使用决策树、随机森林、朴素贝叶斯或支持向量机 (SVM) 等分类算法。

那么,这些算法中哪一个效果最好呢?为什么你应该选择一种算法而不是另一种?

这时候,混淆矩阵就派上用场了……

混淆矩阵是一个矩阵或表格,它提供了关于分类算法在数据集上分类准确性的信息。虽然这个名字听起来可能有点令人困惑,但如果错误的预测太多,可能就意味着算法的确被“迷惑”了 😉!

因此,混淆矩阵是一种评估分类算法性能的方法。

它是如何工作的呢?

假设你使用不同的算法来处理我们之前提到的二元问题:根据人们是否喜欢披萨对他们进行分类。为了评估哪个算法最接近正确答案,你将使用混淆矩阵。对于一个二元分类问题(喜欢/不喜欢、真/假、1/0),混淆矩阵会给出四个网格值:

  • 真正 (TP)
  • 真负 (TN)
  • 假正 (FP)
  • 假负 (FN)

混淆矩阵中的四个网格是什么?

使用混淆矩阵确定的这四个值构成了矩阵的网格。

真正 (TP) 和真负 (TN) 是分类算法正确预测的值:

  • TP 代表喜欢披萨的人,模型正确地将他们分类。
  • TN 代表不喜欢披萨的人,模型也正确地将他们分类。

假正 (FP) 和假负 (FN) 是分类器错误预测的值:

  • FP 代表不喜欢披萨的人(实际为负),但分类器预测他们喜欢披萨(错误地预测为正)。 FP 也称为第一类错误。
  • FN 代表喜欢披萨的人(实际为正),但分类器预测他们不喜欢披萨(错误地预测为负)。 FN 也称为第二类错误。

为了更好地理解这个概念,让我们看一个实际的例子。

假设你有一个包含 400 人的数据集,这些人都接受了新冠病毒检测。现在,你得到了各种算法的结果,这些结果用于确定新冠阳性和阴性的人数。

以下是两个用于比较的混淆矩阵:

通过观察这两个矩阵,你可能会认为第一个算法更准确。但是,为了得到具体的结果,我们需要一些指标来衡量准确率、精确率和其他一些值,以证明哪个算法更好。

使用混淆矩阵的度量及其意义

以下是一些帮助我们确定分类器是否做出正确预测的主要指标:

#1. 召回率/灵敏度

召回率或灵敏度或真正率 (TPR) 或检测概率是正确预测为阳性的数量 (TP) 与所有实际阳性的数量(即 TP 和 FN)的比率。

R = TP/(TP + FN)

召回率衡量的是在所有可能产生的正确阳性结果中,实际被模型识别出的正确阳性结果的数量。召回率越高,意味着假阴性越少,这对算法是有利的。当假阴性的后果比较严重时,应该使用召回率。例如,如果一个人的心脏有多个阻塞,而模型却显示他完全没问题,这可能会导致致命的后果。

#2. 精确率

精确率衡量的是在所有预测为阳性的结果中,正确预测为阳性的数量,包括真阳性和假阳性。

Pr = TP/(TP + FP)

当假阳性的后果比较严重时,应该使用精确率。例如,如果一个人没有糖尿病,但模型显示他患有糖尿病,医生可能会开出不必要的药物,这可能会导致严重的副作用。

#3. 特异性

特异性或真负率 (TNR) 是在所有可能为负的结果中找到的正确负结果。

S = TN/(TN + FP)

它衡量分类器识别负值的能力。

#4. 准确率

准确率是指在所有预测中正确预测的数量。因此,如果你在 50 个样本中正确识别出 20 个正值和 10 个负值,那么模型的准确率将为 30/50。

准确率 A = (TP + TN)/(TP + TN + FP + FN)

#5. 患病率

患病率是指在所有结果中获得阳性结果的数量。

P = (TP + FN)/(TP + TN + FP + FN)

#6. F 分数

有时,仅使用精确率和召回率很难比较两个分类器(模型),因为它们只是四个网格值的简单算术平均值。在这种情况下,我们可以使用 F 分数或 F1 分数,它是调和平均值,它更准确,因为它对于极端值不会发生太大的变化。较高的 F 分数(最大为 1)表示模型更好。

F 分数 = 2 * 精确率 * 召回率 / (召回率 + 精确率)

当同时处理假阳性和假阴性都至关重要时,F1 分数是一个很好的指标。例如,那些实际上不是新冠阳性(但算法显示如此)的人不需要被不必要地隔离。同样,那些新冠阳性(但算法说他们不是)的人需要被隔离。

#7. ROC 曲线

如果数据是平衡的,那么准确率和精确率等参数是很好的指标。但是,对于不平衡的数据集,高准确率并不一定意味着分类器有效。例如,假设在一批 100 名学生中,有 90 名会说西班牙语。即使你的算法说所有 100 人都会说西班牙语,它的准确率也将是 90%,这可能会给出关于模型的错误判断。在数据集不平衡的情况下,ROC 等指标是更有效的决定因素。

ROC(接收者操作特征)曲线直观地显示了二元分类模型在各种分类阈值下的性能。它是 TPR(真正率)与 FPR(假正率)的图,FPR 在不同阈值下计算为 (1-特异性)。图中,最接近 45 度(左上角)的值是最准确的阈值。如果阈值太高,我们将不会有很多假阳性,但我们会得到更多的假阴性,反之亦然。

通常,在绘制各种模型的 ROC 曲线时,具有最大曲线下面积 (AUC) 的模型被认为是更好的模型。

让我们计算分类器 I 和分类器 II 混淆矩阵的所有度量值:

我们可以看到,分类器 II 的精确率更高,而分类器 I 的召回率略高。决策者可以根据手头的问题选择分类器 I 或 II。

N x N 混淆矩阵

到目前为止,我们看到的都是二元分类器的混淆矩阵。如果类别不止是/否或者喜欢/不喜欢呢?例如,如果你的算法要对红色、绿色和蓝色的图像进行排序。这种分类称为多类分类。输出变量的数量决定了矩阵的大小。因此,在这种情况下,混淆矩阵将是 3×3。

总结

混淆矩阵是一个很好的评估系统,因为它提供了关于分类算法性能的详细信息。它适用于二元和多类分类器,其中有两个以上的参数需要处理。混淆矩阵很容易可视化,我们可以使用混淆矩阵生成所有其他性能指标,如 F 分数、精确率、ROC 和准确率。

您还可以查看如何为回归问题选择 ML 算法。