Python 计算混淆矩阵

Python 计算混淆矩阵,python,numpy,sklearn-pandas,confusion-matrix,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] 目标是计算上述循环中填充的所有混淆矩阵的平均

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

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
s的矩阵。你可以做:

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