scikit-learn报”ValueError: Target is multiclass but average=’binary’. Please choose another average setting, one of [None, ‘micro’, ‘macro’, ‘weighted’]. “的原因以及解决办法

问题原因

该错误是由于在使用多分类问题的评估指标时,指定了average='binary'的参数,但是目标变量不是二元分类问题,因此会出现该错误。

解决方法

更改average参数

根据错误提示中的信息,我们可以更改average参数的值,改为'micro', 'macro', 'weighted'或者None等其他可用的参数值,具体的含义如下:

  • micro:计算全局的指标
  • macro:对每个类别独立计算指标并求平均
  • weighted:对每个类别独立计算指标并按照它们的实例数量加权求平均
  • None:返回每个类别的指标,不进行平均

假如我们使用的指标是精确度(precision),可以这样更改:

from sklearn.metrics import precision_score

# 原始代码
precision_score(y_true, y_pred, average='binary')

# 更改后的代码
precision_score(y_true, y_pred, average='micro')  # 或者average='macro'、'weighted'、None

更改目标变量

另外,如果目标变量确实只有两个类别,可以将它们转换成0和1的二元分类问题。比如,可以使用LabelEncoder将多分类问题的目标类别转换成二元分类问题:

from sklearn import preprocessing

# 原始的目标变量y
y = ['class1', 'class2', 'class1', 'class3', 'class2', 'class1']

# 将多类别变量转换为二元分类变量
le = preprocessing.LabelEncoder()
y_binary = le.fit_transform(y)

# 二元分类问题
y_binary
array([0, 1, 0, 2, 1, 0])

将 y 变成二元问题后,再调用之前的分数计算函数并指定average='binary'即可消除该错误。

from sklearn.metrics import precision_score

# 原始代码
precision_score(y_true, y_pred, average='binary')

# 更改后的代码
y_binary = le.fit_transform(y_true)  # 将多类别变量转换为二元分类变量
precision_score(y_binary, y_pred, average='binary')  # average='binary'

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:scikit-learn报”ValueError: Target is multiclass but average=’binary’. Please choose another average setting, one of [None, ‘micro’, ‘macro’, ‘weighted’]. “的原因以及解决办法 - Python技术站

(0)
上一篇 2023年3月19日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部