我目前正在计算多个混淆矩阵并对它们进行规范化。
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))
感谢您的帮助!
答案 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))