1.需求
需要将Spyder里面的预测标签和真实标签输出,并保存为Mat格式,以通过Matlab生成混淆矩阵,为什么要用Matlab生成混淆矩阵呢?python不是也是可以的吗?
import pandas as pd
import torch
from sklearn.metrics import confusion_matrix
df = pd.read_csv(r'C:\Users\Victor\Desktop\whd123\utf8.csv',encoding='utf-8')
Pred = []
for num , label in enumerate(df['pred_label']):
class_label = label.split(':')
nums = class_label[-1].split(']')
Pred.append(int(nums[0][-1]))
GT = []
for num , label in enumerate(df['gt_label']):
class_label = label.split(':')
nums = class_label[-1].split(']')
GT.append(int(nums[0][-1]))
print(confusion_matrix(GT, Pred))
生成的效果如下:
自己也搜集了一些Github上绘制使用Python绘制混淆矩阵的代码,其中也有模仿Matlab视觉效果的,但是配色不如Matlab好看,所以自己想将标签数据导出,然后利用Matlab进行混淆矩阵绘制。
实现
利用上面的代码可以将预测标签和真实标签从csv文件读出。通过变量查看器可以看出都是list类型。
元素是整型。我们将两列数据并列输出,命令:
merged_list = list(zip(Pred, GT))
生成
也是list结构,元素的数据类型是tuple(元组)。
将该元组数据保存为Mat格式,在变量查看器上方,可以save as 为Mat数据类型,只能保存为两种数据类型,一种是Mat,一种是*.spydata。
- 用matlab打开Mat数据文件,Matlab已卸载,后面有时间再安装。
- 使用python生成混淆矩阵,github搜索confusion_matrix。
参考代码
https://pypi.org/project/pycm/ 史上最强机器学习分类评估库,可以根据混淆矩阵自动生成各种指标。
- 改变图片大小
# -*- coding: utf-8 -*-
"""
Created on Sun May 21 12:10:04 2023
@author: Victor
"""
from matplotlib import pyplot as plt
from pycm import *
plt.rcParams['figure.figsize'] = (12, 8) # 设置图像大小为宽度为6英寸,高度为4英寸
plt.rcParams['figure.dpi'] = 100 # 设置图像的 DPI 值为100
cm = ConfusionMatrix(actual_vector=GT, predict_vector=Pred)
cm.classes
cm.print_matrix()
#fig = plt.figure(figsize=(1200, 1200), dpi=300)
cm.plot(cmap=plt.cm.Greens, number_label=True, plot_lib="matplotlib")
plt.tight_layout() #去除多余白边
plt.savefig('confusion_matrix.png')