唐山市网站建设_网站建设公司_GitHub_seo优化
2026/1/5 11:43:53 网站建设 项目流程

摘要:混淆矩阵是评估分类模型性能的重要工具,通过对比实际类别和预测类别来展示分类结果。它包含四个关键指标:真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)。以垃圾邮件分类为例,TP表示正确识别的垃圾邮件,TN表示正确识别的非垃圾邮件,FP表示非垃圾邮件被误判为垃圾邮件,FN表示垃圾邮件被误判为非垃圾邮件。通过混淆矩阵可以计算准确率、精确率、召回率等性能指标。在Python中可以使用scikit-learn的confusion_matrix()函数实现,并配合Seaborn库进行可视化展示。混淆矩阵为分类模型的评估和改进提供了直观有效的方法。

目录

什么是混淆矩阵?

混淆矩阵实用示例

基于混淆矩阵的分类指标

准确性

精度

召回还是敏感

特异性

F1 积分

第一类错误率

II型错误率

如何在 Python 中实现混淆矩阵?


什么是混淆矩阵?

机器学习中的混淆矩阵是衡量分类问题性能的最简单方法,当输出可以是两种或更多类型的类时。它不过是一个有两个维度的表格,即“实际”和“预测”,而且这两个维度都有“真阳性(TP)”、“真阴性(TN)”、“假阳性(FP)”、“假阴性(FN)”,如下所示 −

举个例子,将电子邮件分类为“垃圾邮件”和“非垃圾邮件”,以便更好地理解。这里垃圾邮件标注为“正面”,而合法(非垃圾邮件)则标注为负面邮件。

与混淆矩阵相关的术语解释如下 −

  • 真阳性(TP)− 当实际类别和预测类别数据点皆为1时,情况即为真阳性。分类模型正确预测数据样本的正向类别标签。例如,“垃圾邮件”被归类为“垃圾邮件”。

  • 真负(TN)− 当实际类别和预测类别数据点均为0时,情况即为真负。该模型正确预测了数据样本的负面类别标签。例如,“非垃圾邮件”邮件被归类为“非垃圾邮件”。

  • 假阳性(FP)− 当实际数据点类别为0,预测类别为1时,即为假阳性。该模型错误地预测了数据样本的正向类别标签。例如,一封“非垃圾邮件”被错误归类为“垃圾邮件”。这被称为第一类错误

  • 假阴性(FN)− 当实际数据类别为1,预测类别为0时,即为假阴性。模型错误地预测了数据样本的负面类别标签。例如,一封“垃圾邮件”被错误归类为“非垃圾邮件”。它也被称为II型错误

我们使用混淆矩阵来寻找正确和错误的分类 −

  • 正确的分类——TP和TN是正确分类的数据点。
  • 错误分类− FP 和 FN 是错误分类的数据点。

我们可以利用混淆矩阵计算不同的分类指标,如准确性、精确度、召回率等。但在讨论这些指标之前,让我们先了解如何借助一个实用的示例来创建混淆矩阵。

混淆矩阵实用示例

让我们举一个实用的例子,区分电子邮件“垃圾邮件”和“非垃圾邮件”。这里我们把垃圾邮件的班级表示为正面(1),非垃圾邮件为负面(0)。所以电子邮件被分类为以下两种类型——

  • 垃圾桶 (1) − 正类勒贝尔
  • 非垃圾邮件(0) − 负类勒贝尔

实际和预测的类别/类别如下 −

实际分类0101100111
预测分类0101010011

根据上述结果,我们来确定某个特定分类属于TP、TN、FP或FN。请看下面的表格——

实际分类0101100111
预测分类0101010011
结果TNTPTNTPFNFPTNFNTPTP

在上表中,当我们比较实际分类集与预测分类时,观察到有四种不同的结局类型。首先,真阳性(1,1),即实际分类为阳性,预测分类也是正值。这意味着分类器正确识别了阳性样本。第二,假阴性(1,0),即实际分类为阳性,预测分类为阴性。分类器将阳性样本识别为阴性。

第三种是假阳性(0,1),即实际分类为阴性,预测分类为正值。阴性样本被错误地识别为正值。第四,真负(0,0),即实际和预测的分类均为负。模型正确识别阴性样本为阴性样本。

我们来计算每个类别的样本总数。

  • TP(真阳性):4
  • 假阴性(FN):2
  • 假阳性(FP):1
  • TN(真阴性):3

现在我们创建混淆矩阵,如下 −

实际级别
正(1)负面(0)
预测班级
正(1)4(TP)1(FP)
负面(0)2(FN)3(田纳西州)

到目前为止,我们已经为上述问题创建了混淆矩阵。我们从上述矩阵推断一些含义 −

  • 在10封邮件中,有4封“垃圾邮件”被正确归类为“垃圾邮件”(TP)。
  • 在10封邮件中,有两封“垃圾邮件”被错误地归类为“非垃圾邮件”(FN)。
  • 在10封邮件中,有一封“非垃圾邮件”被错误归类为“垃圾邮件”(FP)。
  • 在10封邮件中,有三封“非垃圾邮件”被正确归类为“非垃圾邮件”(TN)。
  • 所以在10封邮件中,有7封邮件被正确分类(TP和TN),另外3封邮件被错误分类(FP和FN)。

基于混淆矩阵的分类指标

我们可以利用混淆矩阵定义许多分类卡特伦性能指标。我们将考虑上述实际例子,并利用该示例中的数值计算指标。其中一些如下 −

  • 准确性
  • 精度
  • 召回还是敏感
  • 特异性
  • F1 积分
  • 第一类错误率
  • II型错误率

准确性

准确性是评估分类模型的最常用指标。它是总修正预测与所有预测的比率。数学上,我们可以使用以下公式计算准确率−

我们计算准确率 −

因此,该模型的分类准确率为70%。

精度

准确度衡量真阳性病例在所有预测阳性病例中的比例。它是通过真阳性实例数与真阳性和假阳性实例之和的比率计算的。

我们计算精度 −

召回还是敏感

回忆(灵敏度)定义为分类器对阳性分类的数量。我们可以用以下公式计算它

我们计算召回率 −

特异性

特异性与回忆不同,定义为分类器返回的阴性数量。我们可以用以下公式 − 来计算它

我们计算特异性−

F1 积分

F1评分是一种平衡的衡量标准,兼顾了准确度和回忆能力。它是精确性和记忆的谐波平均。

我们可以利用以下公式计算F1分数 −

我们计算F1分数−

因此,F1 分数为 0.727。

第一类错误率

第一类错误发生在分类器预测为正向分类但实际上是负分类时。I型错误率计算为−

II型错误率

II型错误发生在分类器预测为负但实际上是正类时。II型错误率可计算为−

如何在 Python 中实现混淆矩阵?

要在 Python 中实现混淆矩阵,可以使用 scikit-learn 库sklearn.metrics模块中的confusion_matrix() 函数

注:请注意,confusion_matrix()函数返回一个二维数组,对应于以下混淆矩阵−

预测班级
负面(0)正(1)

实际级别

负面(0)真阴性(田纳西州)假阳性(FP)
正(1)假阴性(FN)真阳性(TP)

这里有一个简单的示例,说明如何使用confusion_matrix()函数 −

from sklearn.metrics import confusion_matrix # Actual values y_actual = [0, 1, 0, 1, 1, 0, 0, 1, 1, 1] # Predicted values y_pred = [0, 1, 0, 1, 0, 1, 0, 0, 1, 1] # Confusion matrix cm = confusion_matrix(y_actual, y_pred) print(cm)

在这个例子中,我们有两个数组:y_actual包含目标变量的实际值,y_pred代表目标变量的预测值。然后调用confusion_matrix()函数,将y_actualy_pred作为参数传递。该函数返回一个二维数组,代表混淆矩阵。

上述代码的输出将如下 −

[[3 1] [2 4]]

将上述结果与我们之前创建的混淆矩阵进行比较。

  • 真阴性(TN):3
  • 假阳性(FP):1
  • 假阴性(FN):2
  • 真阳性(TP):4

我们也可以用热力图可视化混淆矩阵。下面是我们如何使用Seaborn库中的热图()函数实现这一点

import seaborn as sns # Plot confusion matrix as heatmap sns.heatmap(cm, annot=True, cmap='summer')

这将生成一个热图,显示混淆矩阵−

在该热图中,横轴表示预测值,纵轴表示实际值。热力图中每个方块的颜色表示各类别的样本数量。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询