1
我有一个二进制分类问题和数据不平衡我试图计算宏/微F1。我认为这可以使用Sickitlearn完成,但在检查文档here似乎是当分类是二元的,计算将只针对正类。因此,我正在试图计算它的自我。 作为开始,我计算TP,TN,FP,FN使用下面的函数:Macro和Micro 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)
所以为了计算微观/宏观F1 I需要分别计算用于每一类别的精确度和召回(我不知道怎么做),然后,作为一个例子,F1宏可以计算如下一样(如果我理解正确的话):
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
参考可以发现here计算F1Macro &微
那么,是否有计算这些度量的方法(TP/TN/FP/FN & precision & recall)? 任何帮助表示赞赏。