scikit加权F1分数的计算和使用

我有一个关于weighted平均值在sklearn.metrics.f1_score中的问题

sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average='weighted', sample_weight=None)Calculate metrics for each label, and find their average, weighted by support (the number of true instances for each label). This alters ‘macro’ to account for label imbalance; it can result in an F-score that is not between precision and recall.

首先,如果有任何参考资料证明使用加权F1的合理性,我只是好奇在哪些情况下我应该使用加权F1。

其次,我听说加权F1已被废弃,这是真的吗?

第三,加权F1实际上是如何计算的,例如

{    "0": {        "TP": 2,        "FP": 1,        "FN": 0,        "F1": 0.8    },    "1": {        "TP": 0,        "FP": 2,        "FN": 2,        "F1": -1    },    "2": {        "TP": 1,        "FP": 1,        "FN": 2,        "F1": 0.4    }}

如何计算上述示例的加权F1。我以为应该是类似于(0.8*2/3 + 0.4*1/3)/3的计算方式,但显然我错了。


回答:

首先,如果有任何参考资料证明使用加权F1的合理性,我只是好奇在哪些情况下我应该使用加权F1。

我没有任何参考资料,但如果你对多标签分类感兴趣,并且关心所有类别的精确度/召回率,那么加权F1分数是合适的。如果你进行的是二元分类,并且只关心正样本,那么它可能不合适。

其次,我听说加权F1已被废弃,这是真的吗?

不,加权F1本身并没有被废弃。只是函数接口的某些方面在v0.16版本中被废弃,仅是为了在之前模糊的情况下使其更加明确。(历史讨论可以在github上找到,或者查看源代码并搜索页面中的”deprecated”以获取详细信息。)

第三,加权F1实际上是如何计算的?

根据f1_score的文档说明:

``'weighted'``:  Calculate metrics for each label, and find their average, weighted  by support (the number of true instances for each label). This  alters 'macro' to account for label imbalance; it can result in an  F-score that is not between precision and recall.

所以平均值是根据支持度加权的,支持度是指具有给定标签的样本数量。因为你上面提供的示例数据不包括支持度,所以无法从你列出的信息中计算加权F1分数。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注