机器学习 - 混淆矩阵
在本页,W3schools.com 与 纽约数据科学学院 合作,为我们的学生提供数字培训内容。
什么是混淆矩阵?
它是一个表格,用于在分类问题中评估模型的错误所在。
行表示结果应该属于的实际类别。而列表示我们做出的预测。使用该表格,可以很容易地看到哪些预测是错误的。
创建混淆矩阵
混淆矩阵可以通过逻辑回归做出的预测创建。
现在,我们将使用 NumPy 生成实际值和预测值。
import numpy
接下来,我们需要生成“实际值”和“预测值”的数字。
actual = numpy.random.binomial(1, 0.9, size = 1000)
predicted = numpy.random.binomial(1, 0.9, size = 1000)
为了创建混淆矩阵,我们需要从 sklearn 模块导入 metrics。
from sklearn import metrics
导入 metrics 后,我们可以使用混淆矩阵函数对我们的实际值和预测值进行计算。
confusion_matrix = metrics.confusion_matrix(actual, predicted)
为了创建更易于理解的视觉显示,我们需要将表格转换为混淆矩阵显示。
cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = confusion_matrix, display_labels = [0, 1])
可视化显示需要我们从 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 = [0, 1])
cm_display.plot()
plt.show()
结果
运行示例 »结果解释
创建的混淆矩阵有四个不同的象限
真阴性 (左上角象限)
假阳性 (右上角象限)
假阴性 (左下角象限)
真阳性 (右下角象限)
真表示值被准确预测,假表示存在错误或错误预测。
现在我们已经创建了混淆矩阵,我们可以计算不同的指标来量化模型的质量。首先,让我们看一下准确率。
广告
创建的指标
矩阵为我们提供了许多有用的指标,可以帮助我们评估分类模型。
不同的指标包括:准确率、精确率、敏感度(召回率)、特异度和 F 分数,具体解释如下。
准确率
准确率衡量模型的正确率。
如何计算
(真阳性 + 真阴性) / 总预测
精确率
在预测的阳性结果中,真正阳性的比例是多少?
如何计算
真阳性 / (真阳性 + 假阳性)
精确率不会评估正确预测的阴性结果
敏感度 (召回率)
在所有阳性结果中,预测为阳性的比例是多少?
敏感度(有时称为召回率)衡量模型预测阳性的好坏程度。
这意味着它会查看真阳性和假阴性(被错误预测为阴性的阳性结果)。
如何计算
真阳性 / (真阳性 + 假阴性)
敏感度有助于了解模型预测结果为阳性的效果如何
特异度
模型预测负面结果的效果如何?
特异度类似于敏感度,但从负面结果的角度进行查看。
如何计算
真阴性 / (真阴性 + 假阳性)
由于它只是召回率的反面,因此我们使用 recall_score 函数,并采用相反的位置标签
F 分数
F 分数是精确率和敏感度的“调和平均数”。
它考虑了假阳性和假阴性结果,对于不平衡数据集效果很好。
如何计算
2 * ((Precision * Sensitivity) / (Precision + Sensitivity))
该分数没有考虑真阴性结果
所有计算合并在一个代码块中
示例
#metrics
print({"Accuracy":Accuracy,"Precision":Precision,"Sensitivity_recall":Sensitivity_recall,"Specificity":Specificity,"F1_score":F1_score})
运行示例 »