目录

机器学习 - 混淆矩阵


在此页面上,W3schools.com 与纽约数据科学院,为我们的学生提供数字培训内容。


什么是混淆矩阵?

它是一个用于分类问题的表格,用于评估模型中出现错误的位置。

这些行代表结果应有的实际类别。各列代表我们所做的预测。使用此表可以轻松看出哪些预测是错误的。

创建混淆矩阵

可以通过逻辑回归的预测来创建混淆矩阵。

现在,我们将利用 NumPy 生成实际值和预测值:

import numpy

接下来,我们需要生成 "actual" 和 "predicted" 值的数字。

actual = numpy.random.binomial(1, 0.9, size = 1000)
predicted = numpy.random.binomial(1, 0.9, size = 1000)

为了创建混淆矩阵,我们需要从 sklearn 模块导入指标。

from sklearn import metrics

导入指标后,我们可以对实际值和预测值使用混淆矩阵函数。

confusion_matrix = metrics.confusion_matrix(actual, predicted)

为了创建更易于解释的视觉显示,我们需要将表格转换为混淆矩阵显示。

cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix, display_labels = [False, True])

可视化显示需要我们从 matplotlib 导入 pyplot。

import matplotlib.pyplot as plt

最后,为了显示绘图,我们可以使用 pyplot 中的函数plot()和show()。

cm_display.plot()
plt.show()

查看整个示例的实际效果:

示例

import matplotlib.pyplot as plt
import numpy
from sklearn import metrics

actual = numpy.random.binomial(1,.9,size = 1000)
predicted = numpy.random.binomial(1,.9,size = 1000)

confusion_matrix = metrics.confusion_matrix(actual, predicted)

cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix, display_labels = [False, True])

cm_display.plot()
plt.show()

结果

运行示例 »

结果解释

创建的混淆矩阵有四个不同的象限:

假阴性(左上象限)
误报(右上象限)
真阴性(左下象限)
真阳性(右下象限)

True 表示值被准确预测,False 表示存在错误或错误的预测。

现在我们已经制作了混淆矩阵,我们可以计算不同的度量来量化模型的质量。首先,让我们看看准确性。


广告


创建的指标

该矩阵为我们提供了许多有用的指标,帮助我们评估分类模型。

不同的衡量标准包括:准确度、精确度、灵敏度(召回率)、特异性和 F 分数,如下所述。


准确性

准确性衡量模型正确的频率。

如何计算

(真阳性 + 真阴性)/总预测

示例

Accuracy = metrics.accuracy_score(actual, predicted)
运行示例 »

精确

在预测的阳性结果中,真正阳性的百分比是多少?

如何计算

真阳性 /(真阳性 + 假阳性)

Precision 不评估正确预测的负例:

示例

Precision = metrics.precision_score(actual, predicted)
运行示例 »

灵敏度(召回率)

在所有阳性病例中,预测呈阳性的百分比是多少?

灵敏度(有时称为召回率)衡量模型预测积极结果的能力。

这意味着它会考虑真阳性和假阴性(即被错误预测为阴性的阳性)。

如何计算

真阳性 /(真阳性 + 假阴性)

敏感性有助于理解模型对积极事物的预测效果:

示例

Sensitivity_recall = metrics.recall_score(actual, predicted)
运行示例 »

特异性

该模型预测负面结果的能力如何?

特异性与敏感性类似,但从阴性结果的角度来看。

如何计算

真阴性/(真阴性+假阳性)

由于它与 Recall 正好相反,因此我们使用recall_score 函数,取相反的位置标签:

示例

Specificity = metrics.recall_score(actual, predicted, pos_label=0)
运行示例 »

F分数

F 分数是精度和灵敏度的"harmonic mean"。

它考虑了误报和漏报情况,并且适用于不平衡的数据集。

如何计算

2 * ((精度 * 灵敏度) / (精度 + 灵敏度))

该分数未考虑真阴性值:

示例

F1_score = metrics.f1_score(actual, predicted)
运行示例 »

所有计算合而为一:

示例

#metrics
print({"Accuracy":Accuracy,"Precision":Precision,"Sensitivity_recall":Sensitivity_recall,"Specificity":Specificity,"F1_score":F1_score})
运行示例 »