Python 2.7 宏微观

Python 2.7 宏微观,python-2.7,machine-learning,scikit-learn,Python 2.7,Machine Learning,Scikit Learn,我有一个二元分类问题,由于数据不平衡,我试图计算宏观/微观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_a

我有一个二元分类问题,由于数据不平衡,我试图计算宏观/微观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宏观可以如下计算(如果我理解正确):

可以找到宏微观计算的参考

那么,在给定上述函数(计算)的情况下,是否有方法分别计算每个类的这些度量(TP/TN/FP/FN&精度和召回率)?
感谢您的帮助。

您确实可以使用scikit学习程序。如果要对二进制问题使用指定的平均值,请设置
pos\u label=None
。然而,这些措施并不是特别有用。二元或多类问题的微平均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