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

时间:2019-05-10 21:11:08

标签: machine-learning scikit-learn confusion-matrix precision-recall

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

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

我在另一篇文章中应用了这段代码:

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

但是,这是召回率,而不是精度。如何显示精度?

2 个答案:

答案 0 :(得分:1)

精度的答案将是

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

精度为TP/(TP+FP),因此对角线值即为正值,即列的总和。

更新1: 根据您的评论

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

答案 1 :(得分:0)

找到它,只需更改axis = 0而不是axis = 1

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,但不等于1。

已解决

使用此:

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