Визуализация вашей матрицы путаницы
X = [[41, 0, 0, 2, 1, 0, 0, 0, 0, 4],
[1, 0, 0, 0, 4, 0, 0, 0, 0, 2],
[3, 0, 12, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 51, 10, 0, 0, 0, 0, 0],
[1, 0, 0, 3, 78, 0, 0, 0, 0, 5],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 3],
[4, 0, 0, 0, 2, 0, 5, 0, 0, 4],
[0, 0, 1, 1, 3, 0, 0, 2, 0, 1],
[4, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[10, 0, 0, 5, 15, 0, 0, 0, 0, 24]]
cm = pd.DataFrame(X, columns=list("ABCDEFGHIJ"), index=list("ABCDEFGHIJ"))
print(cm)
Вывод:
A B C D E F G H I J
A 41 0 0 2 1 0 0 0 0 4
B 1 0 0 0 4 0 0 0 0 2
C 3 0 12 0 1 0 0 0 0 0
D 0 0 0 51 10 0 0 0 0 0
E 1 0 0 3 78 0 0 0 0 5
F 1 0 0 0 0 0 0 0 0 3
G 4 0 0 0 2 0 5 0 0 4
H 0 0 1 1 3 0 0 2 0 1
I 4 0 0 0 1 0 0 0 0 0
J 10 0 0 5 15 0 0 0 0 24
Чтение матрицы путаницы происходит следующим образом: строки - это фактические метки, столбцы - это предсказанные метки. Идеальная модель будет иметь диагональ матрицу путаницы, поскольку она будет правильно предсказывать все время! Подробнее о матрицах путаницы .
Здесь вы можете прочитать, что ваша модель иногда неверна. Он предсказал A
10 раз, когда ответ был на самом деле J
... Но это особенно хорошо для категории G
: в пяти случаях это было предсказано, это всегда было правильно!
Точность категории
Точность категории достигается при подсчете того, сколько раз вы хорошо ее предсказали, среди всех предсказанных вами раз:
>>> cm["A"]["A"] / cm.sum(axis=0)["A"]
0.6307692307692307
>>> cm["D"]["D"] / cm.sum(axis=0)["D"]
0.8225806451612904
>>> cm["E"]["E"] / cm.sum(axis=0)["E"]
0.6782608695652174
TP, TN, FP, FN для каждого
Эти меры обычно имеют смысл в бинарной классификации, но для данной категории вы можете себе представить, что вы находитесь в единой конфигурации (рассматривается как категория против всех остальных), которая выглядит как бинарная, следовательно, рассчитайте эти меры.
Воспользовавшись этим ответом , вы можете получить все значения TP, TN, FP, FN для каждой категории, используя следующее:
FP = cm.sum(axis=0) - np.diag(cm)
FN = cm.sum(axis=1) - np.diag(cm)
TP = pd.Series(np.diag(cm), index=list("ABCDEFGHIJ"))
TN = np.matrix(cm).sum() - (FP + FN + TP)
Теперь FP для категория A
- это:
>>> FP["A"]
24 # you can verify, it's the sum of all values except diagonal element
Та же логика c применяется для всех других мер.