【发布时间】:2021-05-29 05:07:27
【问题描述】:
我有兴趣通过宏精度计算宏 f1 分数并手动召回。但结果并不相同。代码中f1和f1_new最终公式有什么区别?
from sklearn.metrics import precision_score, recall_score, f1_score
y_true = [0, 1, 0, 1, 0 , 1, 1, 0]
y_pred = [0, 1, 0, 0, 1 , 1, 0, 0]
p = precision_score(y_true, y_pred, average='macro')
r = recall_score(y_true, y_pred, average='macro')
f1_new = (2 * p * r) / (p + r) # 0.6291390728476821
f1 = f1_score(y_true, y_pred, average='macro') # 0.6190476190476191
print(f1_new == f1)
# False
【问题讨论】:
-
以不同的顺序取平均值并聚合会导致不同的结果。这是关于数学关系的;它属于Cross Validated,不在这里。
-
@AryaMcCarthy 我一直投票赞成关闭 ML 理论/方法问题作为题外话,但这里似乎并非如此。这似乎是一个实现问题(即使是关于 sklearn 内部),具有完全可重现的最小示例,所以我认为它确实属于这里。
标签: machine-learning scikit-learn precision-recall