本文主要是介绍python调用matplotlib包画混淆矩阵图异常处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我在调用matplotlib包画交叉矩阵时,出现如下错误。
相关代码如下:
# 定义混淆矩阵画图函数
def plot_confusion_matrix(cm, # 混淆矩阵target_names, # 标签名title='Confusion matrix', # 设置矩阵名称cmap='Blues', # 这个地方设置混淆矩阵的颜色主题,这个主题看着就干净normalize=True):accuracy = np.trace(cm) / float(np.sum(cm)) # 计算准确率misclass = 1 - accuracy # 计算错误率if cmap is None:cmap = plt.get_cmap('Blues') # 如果没有设置主题颜色,就设置主题颜色为'Blues'plt.figure(figsize=(9, 7)) # 设置图的尺寸大小plt.imshow(cm, interpolation='nearest', cmap=cmap) # 显示图像plt.imshow(cm, cmap=cmap) # 显示图像plt.title(title)plt.colorbar()if target_names is not None:tick_marks = np.arange(len(target_names))plt.xticks(tick_marks, target_names, rotation=45) # 画出x轴各点的相应标签,rotation表示标签逆时针旋转45度plt.yticks(tick_marks, target_names) # 画出y轴各点的相应标签if normalize:cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] # 归一化,左上角特异度,右下角灵敏度thresh = cm.max() / 1.5 if normalize else cm.max() / 2 # 设定矩阵颜色阈值for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):if normalize:plt.text(j, i, "{:0.4f}".format(cm[i, j]),horizontalalignment="center",color="white" if cm[i, j] > thresh else "black")else:plt.text(j, i, "{:,}".format(cm[i, j]),horizontalalignment="center",color="white" if cm[i, j] > thresh else "black") # 将cm数值填入到混淆矩阵中plt.tight_layout()plt.ylabel('True label', size=15) # 设置Y轴名称及字体尺寸plt.xlabel('Predicted label\naccuracy={:0.4f}; misclass={:0.4f}'.format(accuracy, misclass), size=15) # 设置X轴名称及字体尺寸plt.savefig('./Confusion_Matrix.png', format='png', bbox_inches='tight') # 将混淆矩阵保存为图片plt.show()
问题是出在如下代码的地方:
if target_names is not None:tick_marks = np.arange(len(target_names))plt.xticks(tick_marks, target_names, rotation=45) # 画出x轴各点的相应标签,rotation表示标签逆时针旋转45度plt.yticks(tick_marks, target_names) # 画出y轴各点的相应标签
我查了很多资料,发现代码是没有错的,我推测的原因可能是我在安装graphviz包时,相关依赖包进行了更新,可能导致包出现变更,于是我重新对anaconda3进行安装,问题得到解决。
需要注意的是在卸载anaconda3时需要把C盘地址下的文件及文件也一并删除,相关文件如下图所示:
还有记得用户夹下的相关文件一并删除:
重新安装后,异常消失,显示如下:
这篇关于python调用matplotlib包画混淆矩阵图异常处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!