【问题标题】:Implementing F-measure metric when predicted values are multi-class当预测值是多类时实施 F-measure 度量
【发布时间】:2026-01-25 12:10:01
【问题描述】:

我想在 python 中实现 F-measure 度量,以便处理预测值的多类。

实际上,预测值 y_pred 是多类的,校正值是一类。

例子:

y_pred = [[11,12], 12, 12, [11,12],...]

y_true = [11, 12, 11, 12,...]

在这种情况下,我如何计算 F 度量?以及如何实现?

我用两个文件file1.csv(包括所有预测类,每行可以包含多个类)和file2.csv(包括所有校正值,每行包含一个)测试了以下代码(创建于https://stats.stackexchange.com/questions/21551/how-to-compute-precision-recall-for-multiclass-multilabel-classification)唯一的类):

import pandas as pd

def precision(y_true, y_pred):
    i = set(y_true).intersection(y_pred)    
    len1 = len(y_pred)    
    if len1 == 0:
        return 0
    else:
        return len(i) / len1


def recall(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    return len(i) / len(y_true)


def f1(y_true, y_pred):
    p = precision(y_true, y_pred)
    r = recall(y_true, y_pred)
    if p + r == 0:
        return 0
    else:
        return 2 * (p * r) / (p + r)


if __name__ == '__main__':
    y_pred_df = pd.read_csv('file1.csv', skipinitialspace=True, sep='\t', header=None)
    y_pred = y_pred_df.values

    y_true_df = pd.read_csv('file2.csv', header=None)
    y_true = y_true_df.values


    print(f1(y_true[:,0], y_pred[:,0]))

上面的代码不起作用。

在我的情况下如何实施 F-measure?

非常感谢,

【问题讨论】:

  • 从我的评论中得到答案
  • 你能说一下,具体是什么不起作用?有错误信息吗?结果有错吗?你的数据集是什么样的?

标签: python scikit-learn metrics


【解决方案1】:

为什么不使用已经实现的f1-score?如果你想要一个与 scikit-learn 配合得很好的指标,你可能想要使用make_scorer-function。此外,请查看文档中的 model-evaluation 部分。

【讨论】: