7

Ben Scikit öğrenmeyi kullanıyorum ve True pozitif (TP), Yanlış Pozitif (FP), True Negative (TN) ve Yanlış Negatif (FN) hesaplamalıyım) böyle bir karışıklık matrisinden:Scikit-learn: True Negative nasıl hesaplanır

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

ben tp, FP ve FN hesaplamak ama TN almak için nasıl bilmiyorum biliyorum. Birisi bana söyleyebilir mi?

cevap

8

Bence bu çok-sınıflı sınıflandırmayı bire bir şekilde ele almalısınız (böylece her 2x2 tablosu i, her bir obsesyonun i etiketine ait olup olmadığıyla ilgili bir ikili sınıflandırma probleminin performansını ölçer). Sonuç olarak, her bir etiket için TP, FP, FN, TN hesaplayabilirsiniz.

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 
+0

Harika yanıt! Tartışmaya biraz eklemek için, 'scikit-learn' in de çok sınıflı puanlama metrikleri için işlevselliğe sahip olduğunu belirteceğim. TP, FP, FN ve TN'yi bir ROC'ye toplamayı planlıyorsanız, [burada belgelendirilmiş] olan puanlama metrik yöntemlerini kullanmanızı öneririm (http://scikit-learn.org/stable/modules/classes.html # sklearn-metrics-metrics) ve [buradaki kullanım kılavuzu] 'da (http://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics) ele alınmıştır. F1-skoru gibi metrikler çok sayıda ders verildiğinde çok kafa karıştırıcı olur, bu yüzden bu metrikler çok faydalıdır. – AN6U5

-2

Bunun gibi bir multislass problemi için bu 4 sınıftan hangisinin pozitif olarak değerlendirilebileceğine karar vermelisiniz ve 3 negatifini negatif olarak hesaplamak zorundasınız. Ayrıntılı tartışma here yapıldı.