Однако, когда я даю параметру labels
информацию о том, что мне нужны только метрики из «синего» * 1003 *
Так не работает.
В мультиклассовых настройках, таких как ваша, точность и отзыв вычисляются для класса из всей матрицы путаницы.
Я подробно объяснил обоснование и расчеты в другой ответ ; вот как это применимо к вашему делу для вашей собственной матрицы путаницы cm
:
import numpy as np
# your comfusion matrix:
cm =np.array([[1, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 1]])
# true positives:
TP = np.diag(cm)
TP
# array([1, 1, 0, 1])
# false positives:
FP = np.sum(cm, axis=0) - TP
FP
# array([1, 0, 1, 0])
# false negatives
FN = np.sum(cm, axis=1) - TP
FN
# array([1, 0, 1, 0])
Теперь из определения точности и отзыва мы имеем:
precision = TP/(TP+FP)
recall = TP/(TP+FN)
, которые, для вашего примера, дают:
precision
# array([ 0.5, 1. , 0. , 1. ])
recall
# array([ 0.5, 1. , 0. , 1. ])
т.е. для вашего «синего» класса вы получаете 50% точности и отзыв.
Тот факт, что точность и отзыв здесь оказываются идентичными, является чисто случайным, потому что массивы FP и FN оказываются идентичными; попробуй с разными предсказаниями почувствовать ...