计算混淆矩阵

Calculating Confusion matrices

我目前正在计算多个混淆矩阵并对其进行归一化。

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

感谢您的帮助!

先求出不全为零的矩阵:

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