如何将自定义列表数据转换为Seaborn热力图(混淆矩阵样式)
如何将自定义嵌套列表转换为混淆矩阵热力图?
你的数据是[真实标签, 预测标签, 得分]的三元组列表,要转换成seaborn热力图所需的矩阵结构,按以下步骤操作:
1. 提取唯一标签,确定矩阵维度
从列表中提取所有真实标签和预测标签,去重后作为矩阵的行/列类别:
my_list = [ ['scoreA', 'scoreA', None],['scoreA', 'scoreB', 0.5], ['scoreA', 'scoreC', 0.4], ['scoreB', 'scoreB', None],['scoreB', 'scoreA', 0.5], ['scoreB', 'scoreC', 0.9] ] # 提取并排序所有唯一标签 labels = sorted({item[0] for item in my_list} | {item[1] for item in my_list}) n = len(labels)
2. 构建并填充混淆矩阵
创建空矩阵,遍历列表将得分填入对应位置(None可按需替换为指定值,示例用0):
import numpy as np # 初始化n×n的零矩阵 confusion_matrix = np.zeros((n, n)) # 填充数据 for true_label, pred_label, score in my_list: true_idx = labels.index(true_label) pred_idx = labels.index(pred_label) confusion_matrix[true_idx][pred_idx] = score if score is not None else 0
3. 绘制Seaborn热力图
将矩阵转为带行列标签的DataFrame,再调用热力图函数:
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd df = pd.DataFrame(confusion_matrix, index=labels, columns=labels) plt.figure(figsize=(8, 6)) sns.heatmap(df, annot=True, cmap='Blues', fmt='.1f') plt.xlabel('预测标签') plt.ylabel('真实标签') plt.title('混淆矩阵热力图') plt.show()
调整cmap(配色)、fmt(标注格式)或None的替换值,可匹配你的可视化需求。
内容的提问来源于stack exchange,提问作者user8793002
相关产品推荐
相关产品推荐

