我正在使用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]])
但是,这是召回率,而不是精度。如何显示精度?
答案 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)