【问题标题】:Macro averaged in scikit-learnscikit-learn 中的平均宏
【发布时间】:2016-02-03 21:07:33
【问题描述】:

我正在执行二进制分类并手动计算宏平均,例如:

macro_averaged= (FPR+FNR)*float(0.5)

其中 FPR 和 FNR 的计算方式如下:

FPR= FP/float(FP+TN)
FNR= FN/float(FN+TP)

我得到 (0.184484722594 ) 但是,当我使用 scikit-learn 函数时,我得到了不同的结果 .. (0.885836909871):

print f1_score(y_test, y_pred, average='binary')

在我的情况下它们不应该相同吗?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    使用以下公式计算每个类的准确率和召回率:

    Precison = tp / (fp + tp)
    Recall = tp / (tp + fn)
    

    然后将它们的宏观平均值设为:

    AveragePrecision = (Precison_classA + Precission_classB)/ 2
    AverageRecall = (Recall_classA + Recall_classB)/ 2
    

    那么最后用F1的公式为:

    F1 = 2 * (AveragePrecision * AverageRecall) / (AveragePrecision + AverageRecall)
    

    【讨论】:

      【解决方案2】:

      F1 分数的formula

      F1 = 2 * (pr * re) / (pr + re)
      

      精确pr = tp / (fp + tp) 和召回re = tp / (tp + fn)

      您计算为 macro_averaged 的内容完全不同。

      【讨论】:

      • 我要计算的是宏平均它是否具有与您在答案中提供的 F1 相同的公式?因为名字很混乱!
      • 术语“宏观平均值”描述了如何组合来自多个测量的真阳性、假阳性等。在宏观平均中,您首先计算分数并将它们平均。在微观平均值中,您将所有 TP、FP 等结合起来,并从组合中计算出度量。两者都与您似乎在做什么无关。
      【解决方案3】:

      F1分数的定义(使用类型1,类型2错误)是

      在计算时

      (请注意,TN 甚至没有出现在 f1 分数的等式中)

      【讨论】:

      • 你能告诉我第二个公式计算什么吗?
      • @user2739381 啊,这只是插入 FPR 和 FNR 的 macro_averaged= (FPR+FNR)*float(0.5) 的公式 ;-) 我认为 Riyaz 给出的答案就是你要找的。​​span>
      猜你喜欢
      • 2015-01-04
      • 2017-03-20
      • 1970-01-01
      • 2019-09-11
      • 2013-02-10
      • 1970-01-01
      • 2018-06-05
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多