使用sklearn.metrics时报错:ValueError: Target is multiclass but average=‘binary‘.

在使用sklearn.metrics计算F1分数、召回率和精确率时遇到错误,提示目标是多分类但平均设置为binary。解决方法是在调用函数时指定average参数为macro,适用于多分类任务。F1分数是精确率和召回率的调和平均数,可以根据不同的average选项进行计算,如micro、macro、weighted等,适应不同场景需求。
摘要由CSDN通过智能技术生成

使用sklearn.metrics时报错:ValueError: Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'].

解决:

from sklearn.metrics import f1_score, recall_score, precision_score

# 对于多分类任务
f1 = f1_score(gt_label_list, pd_score_list)
recall = recall_score(gt_label_list, pd_score_list)
precision = precision_score(gt_label_list, pd_score_list)
# 改为
f1 = f1_score(gt_label_list, pd_score_list, average='macro')
recall = recall_score(gt_label_list, pd_score_list, average='macro')
precision = precision_score(gt_label_list, pd_score_list, average='macro')

F1分数可以被解释为精确度Precision和召回率Recall的谐波平均值,其中F1分数在1时达到最佳值,在0时达到最差值。F1分数的计算公式为:

F1 = 2 * (precision * recall) / (precision + recall)

在多类和多标签的情况下,F1 score是每一类F1平均值,其权重取决于average参数(recall、precision均类似)。

average{‘micro’, ‘macro’, ‘samples’, ‘weighted’, ‘binary’} or None, default=’binary’

  • 'binary': 适用于二分类
  • 'micro': 通过计算真阳性、假阴性和假阳性的总数,在全局范围内计算指标;
  • 'macro':计算每个标签的度量,并找到它们的非加权平均值,不考虑标签的不平衡性;
  • 'weighted': 计算每个标签的指标,并找到它们的平均数,按每个标签的真实实例数加权,考虑标签的不平衡;它可能导致F分数不在精确性和召回率之间;
  • 'samples': 计算每个实例的指标,并找出其平均值,与accuracy_score不同,只有在多标签分类中才有意义;
# Example
>>> from sklearn.metrics import f1_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> f1_score(y_true, y_pred, average='macro')
0.26...
>>> f1_score(y_true, y_pred, average='micro')
0.33...
>>> f1_score(y_true, y_pred, average='weighted')
0.26...
>>> f1_score(y_true, y_pred, average=None)
array([0.8, 0. , 0. ])
>>> y_true = [0, 0, 0, 0, 0, 0]
>>> y_pred = [0, 0, 0, 0, 0, 0]
>>> f1_score(y_true, y_pred, zero_division=1)
1.0...
>>> # multilabel classification
>>> y_true = [[0, 0, 0], [1, 1, 1], [0, 1, 1]]
>>> y_pred = [[0, 0, 0], [1, 1, 1], [1, 1, 0]]
>>> f1_score(y_true, y_pred, average=None)
array([0.66666667, 1.        , 0.66666667])

Reference:

sklearn.metrics.f1_score官方文档:sklearn.metrics.f1_score — scikit-learn 1.2.2 documentation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值