Matriz de confusión con el número de instancias clasificadas / clasificadas erróneamente en ella (Python / Matplotlib)

Estoy trazando una matriz de confusión con matplotlib con el siguiente código:

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") 

Pero quiero que la matriz de confusión muestre los números como este gráfico (el correcto). ¿Cómo puedo trazar el conf_arr en el gráfico?

matriz de confusión

Puedes usar texto para poner texto arbitrario en tu ttwig. Por ejemplo, al insertar las siguientes líneas en su código, se escribirán los números (tenga en cuenta que las primeras y últimas líneas son de su código para mostrarle dónde insertar mis líneas):

 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) 

matriz con numeros

La única manera que realmente podía ver de hacerlo era usar anotaciones. Prueba estas líneas:

 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)) 

Antes de guardar la figura. Agrega los números, pero te dejaré averiguar cómo obtener los tamaños de los números cómo los quieres.