Macro and Micro F1



我有一个二进制分类问题,并且随着数据不平衡,我正在尝试计算宏/micro f1 ..我认为可以使用Sickitlearn进行此操作,但是在此处检查文档后,似乎当分类为二进制时,计算将仅针对积极级别。因此,我试图将其计算为我的自我。首先,我使用以下功能计算TP,TN,FP,FN:

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,我需要分别计算每个类的精度和回忆(我不知道如何!),然后,它可以像以下那样计算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 

可以在此处找到用于计算f1macro& micro

的参考。

因此,是否有一种方法可以分别给出上述函数(计算)的每个类别分别计算这些度量(TP/TN/FP/FN& tocision&召回)?任何帮助。

您确实可以使用Scikit-Learn的例程。设置pos_label=None如果要在二进制问题上使用指定的平均值。但是,这些措施并不是特别有用。用于二进制或多类问题的微平均F1与普通的旧精度相同。宏观平均召回率,也称为平衡精度,在二进制问题上比宏观平均F1更有用。

相关内容

  • 没有找到相关文章

最新更新