如何在混淆矩阵中显示精度
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)
我正在使用 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)