【发布时间】:2015-01-07 03:15:07
【问题描述】:
我有一个关于 numpy 矩阵的非常普遍的问题:我尝试根据线条对结果进行归一化,但我得到了一些奇怪的白线。这是因为在除法的某个地方卡住了一些零吗?
代码如下:
import numpy as np
from matplotlib.pylab import *
def confusion_matrix(results,tagset):
# results : list of tuples (predicted, true)
# tagset : list of tags
np.seterr(divide='ignore', invalid='ignore')
mat = np.zeros((len(tagset),len(tagset)))
percent = [0,0]
for guessed,real in results :
mat[tagset.index(guessed),tagset.index(real)] +=1
if guessed == real :
percent[0] += 1
percent[1] += 1
else :
percent[1] += 1
mat /= mat.sum(axis=1)[:,np.newaxis]
matshow(mat,fignum=100)
xticks(arange(len(tagset)),tagset,rotation =90,size='x-small')
yticks(arange(len(tagset)),tagset,size='x-small')
colorbar()
show()
#print "\n".join(["\t".join([""]+tagset)]+["\t".join([tagset[i]]+[str(x) for x in
(mat[i,:])]) for i in xrange(mat.shape[1])])
return (percent[0] / float(percent[1]))*100
感谢您的宝贵时间! (希望答案不要太明显)
【问题讨论】:
-
一个示例图像可能会有所帮助(什么是“奇怪的白线”)。为了使调试更容易,您可能会尝试将代码分成两部分:一部分创建矩阵,另一部分绘制矩阵。然后在 ipython (或其他)中运行第一个函数来获取矩阵。检查整行的数据中没有零或 NaN,并且它看起来与您预期的一样。
标签: python numpy confusion-matrix