如何在混淆矩阵中显示精度

How to show precision in a confusion matrix

我正在使用 scikit learn,我想以混淆矩阵的形式显示精度。所以我有这个混淆矩阵:

array([[1266,   45,    6],
       [  25, 1507,   19],
       [  36,   82,  858]], dtype=int64)

我应用了这段代码,来自另一个post这里:

cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]

输出是:

array([[0.96127563, 0.03416856, 0.00455581],
       [0.01611863, 0.97163121, 0.01225016],
       [0.03688525, 0.08401639, 0.87909836]])

但是,这是召回率,不是准确率。我怎样才能让它显示精度?

精度的答案是

import numpy as np
precision = np.diag(cm) / np.sum(cm, axis = 0)

精度为 TP/(TP+FP) 因此对角线值是真阳性和列的总和。

更新一: 根据您的评论

precision = []
for x in np.nditer(cm):
    precision.append(x / np.sum(cm, axis = 0))

找到了,把axis=1换成axis=0就可以了

cm = cm.astype('float') / cm.sum(axis=0)[:, np.newaxis]

好的,但是这段代码有问题,我有这样的输出:

array([[0.954, 0.034, 0.005],
       [0.015, 0.922, 0.012],
       [0.041, 0.093, 0.972]])

当您对任何行求和时,它应该等于 1,但事实并非如此。

已解决

使用这个:

C / C.astype(np.float).sum(axis=0)