我正在关注上一个关于如何在Matplotlib中绘制混淆矩阵的线程。脚本如下所示:
from numpy import *
import matplotlib.pyplot as plt
from pylab import *
conf_arr = [[33,2,0,0,0,0,0,0,0,1,3], [3,31,0,0,0,0,0,0,0,0,0], [0,4,41,0,0,0,0,0,0,0,1], [0,1,0,30,0,6,0,0,0,0,1], [0,0,0,0,38,10,0,0,0,0,0], [0,0,0,3,1,39,0,0,0,0,4], [0,2,2,0,4,1,31,0,0,0,2], [0,1,0,0,0,0,0,36,0,2,0], [0,0,0,0,0,0,1,5,37,5,1], [3,0,0,0,0,0,0,0,0,39,0], [0,0,0,0,0,0,0,0,0,0,38] ]
norm_conf = []
for i in conf_arr:
a = 0
tmp_arr = []
a = sum(i,0)
for j in i:
tmp_arr.append(float(j)/float(a))
norm_conf.append(tmp_arr)
plt.clf()
fig = plt.figure()
ax = fig.add_subplot(111)
res = ax.imshow(array(norm_conf), cmap=cm.jet, interpolation='nearest')
for i,j in ((x,y) for x in xrange(len(conf_arr))
for y in xrange(len(conf_arr[0]))):
ax.annotate(str(conf_arr[i][j]),xy=(i,j))
cb = fig.colorbar(res)
savefig("confusion_matrix.png", format="png")
我想把坐标轴改成字母串,比如说(A,B,C,...),而不是整数(0,1,2,3,... 10)。怎么能做到呢?
7条答案
按热度按时间rsl1atfo1#
我猜你想要的是:
jgwigjjp2#
以下是您需要的内容:
图像输出示例如下:
如果你想要一个更完整的混淆矩阵作为 matlab 的默认值,在每个单元格上有总数(最后一行和最后一列)和百分比,请参见下面的模块。
因为我搜索了互联网,并没有发现一个混淆矩阵像这个在python上,我开发了一个与这些改进和分享在git上。
参考编号:
https://github.com/wcipriano/pretty-print-confusion-matrix(第一个字母)
输出示例如下:
nwwlzxa73#
只需使用
matplotlib.pyplot.xticks
和matplotlib.pyplot.yticks
即可。例如:
vzgqcmou4#
要得到看起来像sklearn为你创建的图形,只需使用他们的代码!
我通过转到https://scikit-learn.org/stable/modules/generated/sklearn.metrics.plot_confusion_matrix.html并单击“source”链接来解决这个问题。
以下是结果图:
o3imoua45#
如果您将结果存储在csv文件中,则可以直接使用此方法,否则您可能需要进行一些更改以适应结果的结构。
来自sklearn网站的修改示例:
输出如下所示:
gpnt7bae6#
我们可以像这样使用sklearn的内置函数:
代码和图像取自here。
c6ubokkw7#
下面是另一个纯Matplotlib的例子:
Python代码-实用程序函数
conf_matrix_creator
和使用第一个函数的示例函数conf_matrix_example
:用法: