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.