如何将类预测与 f1_score 的分数值相关联

时间:2021-03-02 13:38:17

标签: python pandas scikit-learn

我有一个多类分类任务,我想估计每个类的预测结果。为此,我使用 f1_score(y_true, y_pred, average = None)。 没关系,我收到了相应的分数。但我无法理解 - 如何将结果与预测的类相关联。例如,我有以下训练和测试数据集:

train = pd.DataFrame({'c1' : [1,2,3,4], 'c2' : [1,2,3,4], 'y_true' : ['a','b','c','d]})

test  = pd.DataFrame({'c1' : [11,21,31,41], 'c2' : [11,21,31,41]})

在预测管道之后,我有以下结果:

y_pred = ['a', 'd', 'a', 'c']

和 f1_score(y_true, y_pred, average = None) 类似这样:

scores = array([0.8, 0.3, 0.99])

问题是我如何将分数中的值与类标签 ['a','b','c','d] 相关联?

2 个答案:

答案 0 :(得分:0)

您可以将两个列表压缩在一起,然后在 for 循环中像这样访问它们。

for cls, f1 in zip(y_pred, scores):
    print(f"Class: {cls}, F1: {f1}")

如果你想以字典的形式访问它们,你可以用这样的 dict() 构造函数包装 zip


score_dict = dict(zip(y_pred, scores))

答案 1 :(得分:0)

您可以使用标签参数。这将用作您希望 F1 分数输出的顺序。如果您不提供此信息,f1_score 将按照在您的 y_predy_true

中遇到它们的顺序返回标签

f1_score(y_true, y_pred, average=None, labels=['a', 'b', 'c', 'd'])

<块引用>

average != 'binary' 时要包含的标签集,以及如果average 为None 时的顺序。可以排除数据中存在的标签,例如计算忽略多数负类的多类平均值,而数据中不存在的标签将导致宏观平均值中的 0 个分量。对于多标签目标,标签是列索引。默认情况下,y_true 和 y_pred 中的所有标签都按排序顺序使用。 sklearn docs