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

  • Post category:Python

该错误信息是由 scikit-learn 抛出的,通常出现在使用 classification_report 函数时。这个错误信息的含义是,预测目标是多分类的,但是 average='binary' 参数错误地被设置在了 classification_report 函数中。

《scikit-learn 用户指南》中的文档描述如下:

在多类分类情况下不可以使用平均参数(例如,average=’binary’)。需要选用 micro、macro、weighted 或 None。

解决这个问题的办法就是将 classification_report 函数中的 average= 参数改为合适的值。具体而言,如果您想要报告每个类别的分数,请使用 average=None;如果您想按每个样本分配权重进行平均,请使用 average='weighted';如果您想计算宏平均分数,请使用 average='macro';如果您想计算微平均分数,请使用 average='micro'

例如,您可以按如下方式在 classification_report 函数中使用 average='macro' 参数:

from sklearn.metrics import classification_report

# y_true 是真实的目标变量,y_pred 是模型预测出的目标变量
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names, average='macro'))

这样做会在终端中得到准确的评估报告,且不会再出现之前的错误信息。