神经网络混淆矩阵绘图空行但打印非空的问题排查
混淆矩阵热力图空行问题解决方案
排查方向1:确认矩阵维度与数据完整性
先在绘图前打印矩阵的维度:
print(confusion_matrix.shape)
你提供的正常矩阵维度应为(3, 3),如果输出是(5, 3),说明代码中(尤其是添加总计行时)不小心插入了空行数据。检查拼接总计行/列的代码,确保是基于原矩阵的求和结果拼接,而非手动添加空数组。
排查方向2:重置绘图环境
之前的绘图缓存可能导致布局异常,在绘图代码开头添加:
import matplotlib.pyplot as plt plt.clf() plt.close('all')
清空残留的绘图状态后再重新绘制。
排查方向3:修正热力图参数
以下是经过验证的两种绘图代码,替换你的代码测试:
简化版热力图
import seaborn as sns import matplotlib.pyplot as plt import numpy as np cm = np.array([[28, 23, 51], [19, 104, 123], [47, 127, 174]]) plt.figure(figsize=(8, 6)) sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['类别0', '类别1', '类别2'], yticklabels=['类别0', '类别1', '类别2']) plt.xlabel('预测类别') plt.ylabel('真实类别') plt.show()
带总计行/列的热力图
import seaborn as sns import matplotlib.pyplot as plt import numpy as np cm = np.array([[28, 23, 51], [19, 104, 123], [47, 127, 174]]) # 正确添加总计列 cm_with_col_total = np.hstack([cm, cm.sum(axis=1, keepdims=True)]) # 正确添加总计行 cm_with_total = np.vstack([cm_with_col_total, cm_with_col_total.sum(axis=0, keepdims=True)]) plt.figure(figsize=(9, 7)) sns.heatmap(cm_with_total, annot=True, fmt='d', cmap='Blues', xticklabels=['类别0', '类别1', '类别2', '总计'], yticklabels=['类别0', '类别1', '类别2', '总计']) plt.xlabel('预测类别') plt.ylabel('真实类别') plt.show()
排查方向4:修复环境依赖问题
如果上述方法无效,尝试更新依赖库:
pip install --upgrade seaborn matplotlib
Jupyter Notebook用户可以重启内核后重新运行代码,清除环境缓存。
内容的提问来源于stack exchange,提问作者Totoro
相关产品推荐
相关产品推荐

