2016-06-23 7 views
1

Ich habe ein binäres Klassifizierungsproblem und da die Daten unausgeglichen sind, versuche ich, das Makro/Mikro F1 zu berechnen. Ich dachte, dass dies mit Sickitlearn getan werden kann, aber nach der Überprüfung der Dokumentation here scheint es, dass wenn Klassifizierung ist binär, die Berechnung wird nur für die positive Klasse sein .. und deshalb versuche ich es selbst zu berechnen. Als Start, berechne ich die TP, TN, FP, FN die folgende Funktion:Makro und Mikro F1

def calculate(y_actual, y_pred): 
    TP = 0 
    FP = 0 
    TN = 0 
    FN = 0 

    for i in range(len(y_pred)): 
     if y_actual[i]==y_pred[i]==1: # true positive 
      TP += 1 
    for i in range(len(y_pred)): 
     if y_actual[i]==1 and y_pred[i]==0: 
      FN += 1 
    for i in range(len(y_pred)): 
     if y_actual[i]==y_pred[i]==0: # true negative 
      TN += 1 
    for i in range(len(y_pred)): 
     if y_actual[i]==0 and y_pred[i]==1: 
      FP += 1 

    return(TP, FP, TN, FN) 

So um die Micro/Macro F1 I separat die Genauigkeit und Recall für jede Klasse berechnen müssen zu berechnen (die ich nicht wissen, wie) und dann, als ein Beispiel, F1 Makro berechnet werden wie folgt (wenn ich es richtig verstehe):

F1 for class one: 2(precision*recall)/(precision+recall) 
F1 for class two: 2(precision*recall)/(precision+recall) 
F1 Macro = (F1 for class one + F1 for class two)/2 

eine Referenz here zur Berechnung F1Macro & Micro gefunden werden kann

Gibt es also eine Möglichkeit, diese Maße (TP/TN/FP/FN & Präzision & Rückruf) für jede Klasse getrennt zu berechnen, die obige Funktion (berechnen) gegeben? jede Hilfe geschätzt.

Antwort

2

Sie können tatsächlich scikit-lernen Routine verwenden. Legen Sie pos_label=None fest, wenn Sie einen bestimmten Durchschnittswert für ein binäres Problem verwenden möchten. Diese Maßnahmen sind jedoch nicht besonders nützlich. Mikro-gemittelte F1 für ein Binär- oder Multiklassenproblem ist identisch mit der alten Genauigkeit. Macro-gemittelter Rückruf, auch bekannt als ausgewogene Genauigkeit, ist populär und nützlicher als Makro-gemittelte F1 für ein binäres Problem.