当预测值是多类时,实施F-measure度量

时间:2017-08-17 11:15:44

标签: python scikit-learn metrics

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

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

示例:

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

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

在这种情况下,如何计算F-measure?以及如何实施它?

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

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?

非常感谢,

1 个答案:

答案 0 :(得分:1)

为什么不使用已经实施的f1-score?如果您希望获得与scikit-learn兼容的指标,则可能需要使用make_scorer - 函数。另外,请查看文档中的model-evaluation部分。