Scikit-learn: cómo calcular el verdadero negativo

Estoy usando Scikit-learning y necesito calcular el Verdadero Positivo (TP), el Falso Positivo (FP), el Verdadero Negativo (TN) y el Falso Negativo (FN) de una matriz de confusión como esta:

[[2 0 3 4] [0 4 5 1] [1 0 3 2] [5 0 0 4]] 

Sé cómo calcular el TP, el FP y el FN, pero no sé cómo obtener el TN. ¿Puede alguien decirme?

Creo que debería tratar esta clasificación de múltiples clases de una manera frente a la del rest (de modo que cada tabla 2×2 i mide el rendimiento de un problema de clasificación binaria que determina si cada observación pertenece a la etiqueta i ). En consecuencia, puede calcular el TP, FP, FN, TN para cada etiqueta individual.

 import numpy as np confusion_matrix = np.array([[2,0,3,4], [0,4,5,1], [1,0,3,2], [5,0,0,4]]) def process_cm(confusion_mat, i=0, to_print=True): # i means which class to choose to do one-vs-the-rest calculation # rows are actual obs whereas columns are predictions TP = confusion_mat[i,i] # correctly labeled as i FP = confusion_mat[:,i].sum() - TP # incorrectly labeled as i FN = confusion_mat[i,:].sum() - TP # incorrectly labeled as non-i TN = confusion_mat.sum().sum() - TP - FP - FN if to_print: print('TP: {}'.format(TP)) print('FP: {}'.format(FP)) print('FN: {}'.format(FN)) print('TN: {}'.format(TN)) return TP, FP, FN, TN for i in range(4): print('Calculating 2x2 contigency table for label{}'.format(i)) process_cm(confusion_matrix, i, to_print=True) Calculating 2x2 contigency table for label0 TP: 2 FP: 6 FN: 7 TN: 19 Calculating 2x2 contigency table for label1 TP: 4 FP: 0 FN: 6 TN: 24 Calculating 2x2 contigency table for label2 TP: 3 FP: 8 FN: 3 TN: 20 Calculating 2x2 contigency table for label3 TP: 4 FP: 7 FN: 5 TN: 18 

Creo que para un problema multiclase como este, debe decidir cuál de estas 4 clases puede considerarse positiva y debe combinar el rest 3 como negativo para calcular el verdadero negativo. Aquí se realizó una discusión detallada.