Вычисление матриц путаницы

В настоящее время я вычисляю несколько матриц путаницы и нормализую их.

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

Спасибо за вашу помощь!


person inneb    schedule 13.08.2017    source источник


Ответы (1)


Сначала найдите матрицы, которые не все равны нулю:

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

Затем вычислите среднее значение:

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

Вы все равно должны быть осторожны, чтобы по крайней мере какая-то матрица была допустимой, иначе вы получите матрицу NaNs. Вы можете сделать:

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