Python混淆矩阵
引言
混淆矩阵是机器学习和统计学中常用的评估分类模型性能的工具。它将分类模型的预测结果与真实标签进行比较,从而帮助我们了解模型的准确性、召回率、精确率等指标。本文将详细介绍混淆矩阵的概念、构建方式以及 Python 中如何生成和使用混淆矩阵。
混淆矩阵概述
混淆矩阵(Confusion Matrix),也称为误差矩阵或分类表格,是一个 n×n 的矩阵,其中 n 表示类别的个数。对于二分类问题,混淆矩阵将数据分为真正例(True Positive, TP)、真负例(True Negative, TN)、假正例(False Positive, FP)和假负例(False Negative, FN)四个类别,如下所示:
预测为正例 | 预测为负例 | |
---|---|---|
实际为正例 | TP | FN |
实际为负例 | FP | TN |
- TP(True Positive):实际为正例,模型预测也为正例
- TN(True Negative):实际为负例,模型预测也为负例
- FP(False Positive):实际为负例,模型预测为正例
- FN(False Negative):实际为正例,模型预测为负例
通过混淆矩阵,我们可以计算出多个衡量分类模型性能的指标,如准确性(Accuracy)、召回率(Recall)、精确率(Precision)等。
构建混淆矩阵
为了构建混淆矩阵,我们需要已知的真实标签和模型的预测结果。以下是一个简单的示例,假设我们有200个样本,模型的预测结果保存在 predicted_labels
列表中,真实标签保存在 true_labels
列表中。
true_labels = [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1]
predicted_labels = [1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0]
首先,我们需要导入 numpy
和 sklearn.metrics
模块。
import numpy as np
from sklearn.metrics import confusion_matrix
然后,使用 confusion_matrix
函数计算混淆矩阵。
cm = confusion_matrix(true_labels, predicted_labels)
得到的混淆矩阵 cm
如下所示:
array([[7, 4],
[4, 5]], dtype=int64)
这个矩阵的第一行表示实际为正例的样本,第一列表示模型预测为正例的样本。
Python中的混淆矩阵应用
在 Python 中,我们可以使用混淆矩阵计算多个与分类模型性能有关的指标,例如准确性、召回率和精确率等。
准确性(Accuracy)
准确性是分类模型预测正确的样本数量与总样本数量的比率。可以通过以下公式计算准确性:
Accuracy = \frac{TP + TN}{TP + TN + FP + FN}
在 Python 中,我们可以使用下面的代码计算准确性:
accuracy = (cm[0][0] + cm[1][1]) / np.sum(cm)
在上述示例中,准确性为 0.6。
召回率(Recall)和精确率(Precision)
召回率是正确预测为正例的样本数量与实际为正例的样本数量的比率。可以通过以下公式计算召回率:
Recall = \frac{TP}{TP + FN}
精确率是正确预测为正例的样本数量与模型预测为正例的样本数量的比率。可以通过以下公式计算精确率:
Precision = \frac{TP}{TP + FP}
在 Python 中,我们可以使用下面的代码计算召回率和精确率:
recall = cm[0][0] / (cm[0][0] + cm[0][1])
precision = cm[0][0] / (cm[0][0] + cm[1][0])
在上述示例中,召回率为 0.6364,精确率为 0.6364。
F1 分数
F1 分数是召回率和精确率的调和平均值,用于综合评估分类模型的性能。可以通过以下公式计算 F1 分数:
F1_score = \frac{2 \cdot Precision \cdot Recall}{Precision + Recall}
在 Python 中,我们可以使用下面的代码计算 F1 分数:
f1_score = 2 * precision * recall / (precision + recall)
在上述示例中,F1 分数为 0.6364。
其他指标
除了上述指标,还有许多其他指标可以从混淆矩阵中计算,例如特异度(Specificity)、假正例率(False Positive Rate)、假负例率(False Negative Rate)等。
总结
混淆矩阵是一个有用的工具,用于衡量分类模型的性能。通过混淆矩阵,我们可以计算多个与分类模型性能相关的指标,例如准确性、召回率和精确率等。在 Python 中,可以使用 sklearn.metrics
模块的 confusion_matrix
函数构建混淆矩阵,并利用混淆矩阵计算各种性能指标。