Verwirrung Matrix mit der Anzahl der klassifizierten / fehlklassifiziert Instanzen auf sie (Python / Matplotlib)
-
04-10-2019 - |
Frage
Ich bin eine Verwirrung Matrix mit matplotlib mit dem folgenden Code Plotten:
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')
cb = fig.colorbar(res)
savefig("confmat.png", format="png")
Aber ich will die Konfusionsmatrix die Zahlen darauf, wie diese Grafik (der rechte) zu zeigen. Wie kann ich die conf_arr
auf der Grafik zeichnen?
Lösung
Sie können mit Text um beliebigen Text in Ihrem Grundstück zu setzen. Zum Beispiel wird die folgenden Zeilen in Ihren Code einfügen, schreibt die Zahlen (man beachte die erste und letzte Zeile aus dem Code sind Ihnen zu zeigen, wo meine Zeilen einfügen):
res = ax.imshow(array(norm_conf), cmap=cm.jet, interpolation='nearest')
for i, cas in enumerate(conf_arr):
for j, c in enumerate(cas):
if c>0:
plt.text(j-.2, i+.2, c, fontsize=14)
cb = fig.colorbar(res)
Andere Tipps
Die einzige Art, wie ich es wirklich war Anmerkungen sehen konnte, zu tun zu verwenden. Versuchen Sie die folgenden Zeilen:
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))
vor der Figur zu speichern. Sie fügt hinzu, die Zahlen, aber ich lasse Sie herausfinden, wie die Größe der Zahlen zu bekommen, wie Sie wollen.