什么是混淆矩阵?
混淆矩阵(Confusion Matrix) 是用于评估分类模型性能的一种表格形式表示。它展示了模型在不同类别上的预测结果与实际标签之间的对应关系,用于衡量分类模型的准确性、召回率、精确率和F1值等指标。
混淆矩阵通常是一个N×N的矩阵,其中N是类别的数量。对于二分类问题,混淆矩阵如下图片所示:
在混淆矩阵中,每个单元格代表了不同的预测结果:
- TP(True Positive): 预测为正类(Positive)且实际为正类的样本数量。
- FN(False Negative): 预测为负类(Negative)但实际为正类的样本数量。
- FP(False Positive): 预测为正类但实际为负类的样本数量。
- TN(True Negative): 预测为负类且实际为负类的样本数量。
根据混淆矩阵,可以计算出各种分类性能指标:
- 准确率(Accuracy): 分类正确的样本数占总样本数的比例,即 (TP + TN) / (TP + FN + FP + TN)。
- 精确率(Precision): 在所有预测为正类的样本中,实际为正类的比例,即 TP / (TP + FP)。
- 召回率(Recall): 在所有实际为正类的样本中,被正确预测为正类的比例,即 TP / (TP + FN)。
- F1值(F1 Score): 综合考虑精确率和召回率的指标,是精确率和召回率的调和平均值,即 2 * (Precision * Recall) / (Precision + Recall)。
混淆矩阵可以提供详细的分类性能信息,帮助分析模型在不同类别上的表现,并选择适当的评估指标来评估分类模型的性能。
实现代码
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
# 实际标签
label = [1, 0, 0, 1, 1, 0, 1, 0, 1, 0]
# 模型输出
output = [1, 0, 1, 1, 0, 0, 1, 0, 0, 1]
# 计算混淆矩阵
cm = confusion_matrix(label, output)
# 从混淆矩阵中提取 TP、FN、FP、TN 的值
TP = cm[1, 1]
FN = cm[1, 0]
FP = cm[0, 1]
TN = cm[0, 0]
# 打印 TP、FN、FP、TN 的值
print("True Positive (TP):", TP)
print("False Negative (FN):", FN)
print("False Positive (FP):", FP)
print("True Negative (TN):", TN)
# 创建混淆矩阵热力图
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, cmap='Blues', fmt='g', cbar=False, square=True)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()
在上述代码中,首先定义了实际标签 label 和模型输出 output,然后使用sklearn库中的 confusion_matrix 函数计算混淆矩阵并将结果存储在变量 cm 中。
接下来,使用 seaborn 的 heatmap 函数创建热力图。
设置参数:
annot=True: --------------------可以在热力图中显示具体数值
cmap=‘Blues’: -----------------设置颜色映射为蓝色调
fmt=‘g’: ---------------------------设置数值格式为普通数字
cbar=False: ---------------------隐藏颜色条
square=True: -------------------使热力图为正方形
最后,通过添加横轴标签、纵轴标签和标题,使用 plt.xlabel()、plt.ylabel() 和 plt.title() 函数来为图表添加标签和标题。
运行该代码,你将获得一个美观的混淆矩阵可视化图表。根据你的实际数据,可以适当调整代码中的变量和参数,以满足你的需求。