计算混淆矩阵

时间:2017-08-13 19:14:33

标签: python numpy sklearn-pandas confusion-matrix

我目前正在计算多个混淆矩阵并对它们进行规范化。

for i in range(0,215)

 [...]
 matrix_confusion[i] = np.asarray(confusion_matrix(Y_test, Y_pred))
 matrix_confusion[i] = matrix_confusion[i].astype(float) / 
 matrix_confusion[i].sum(axis=1)[:,np.newaxis]

目标是计算上面循环中填充的所有混淆矩阵的均值。问题是很多矩阵都没有填充,因为我在引发ValueError时跳过了迭代。所以我有一些空的矩阵(预填充零)。

现在我考虑做以下事情:

matrix_confusion = matrix_confusion[matrix_confusion!=0]

但是这也会使标准化计算的混淆矩阵中的0被杀死。如果我只是想要一个混淆矩阵来表示循环中所有先前填充的2x2混淆矩阵的平均值并且不能预先填充预先填充的矩阵,我该怎么办?

#prefilling
matrix_confusion = np.zeros((200,2,2))

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

首先找到并非全为零的矩阵:

valids = np.logical_or.reduce(matrix_confusion != 0, axis=(1, 2))

然后计算平均值:

matrix_confusion_mean = np.mean(matrix_confusion[valids], axis=0)

你应该还是要小心,至少某些矩阵是有效的,否则你会得到一个NaN的矩阵。你可以这样做:

if np.any(valids):
    matrix_confusion_mean = np.mean(matrix_confusion[valids], axis=0)
else:
    matrix_confusion_mean = np.zeros((2, 2))
相关问题