ValueError: Target is multiclass but average=‘binary‘. ‘micro‘、‘macro‘、‘weighted‘ 或 None选择哪一个?完美回答如下

ValueError: Target is multiclass but average=‘binary‘. ‘micro‘、‘macro‘、‘weighted‘ 或 None选择哪一个?完美回答如下_第1张图片

1.原始代码

print("准确度accuracy是: %0.4f" % accuracy_score(Y_test, y_pred2))
print("精确度precision是: %0.4f" % precision_score(Y_test, y_pred2))
print("recall是: %0.4f" % recall_score(Y_test, y_pred2))
print("f1_score是: %0.4f" % f1_score(Y_test, y_pred2))

2. 报错

ValueError: Target is multiclass but average=‘binary’. Please choose another average setting, one of [None, ‘micro’, ‘macro’, ‘weighted’].

3.错误分析

这个错误的意思是,我正在尝试计算多分类的指标(准确率、精确率、召回率和 F1 分数),但是我的 average 参数被设置为 'binary',这是为二分类问题设计的。对于多分类问题,你需要选择 'micro'、'macro'、'weighted' 或 None 这四个设置之一。

scikit-learn 中,precision_score、recall_score 和 f1_score 函数都有 average 参数,这个参数决定了如何计算多分类的指标。

'micro':全局计算,包括每个样本的 True Positives,False Positives 和 False Negatives。
'macro':对每个标签分别计算,然后取平均(不除以标签数)。
'weighted':对每个标签分别计算,然后取加权的平均值(除以每个标签的样本数)。
如果你不设置 average 参数,或者设置为 None,那么这些函数将返回一个字典,其中键是标签名,值是对应标签的指标。

4. 修改后的代码如下:

print("准确度accuracy是: %0.4f" % accuracy_score(Y_test, y_pred2))  
print("精确度precision是: %0.4f" % precision_score(Y_test, y_pred2, average='macro'))  # 可以根据你的需要选择 'micro', 'weighted' 等  
print("recall是: %0.4f" % recall_score(Y_test, y_pred2, average='macro'))  # 可以根据你的需要选择 'micro', 'weighted' 等  
print("f1_score是: %0.4f" % f1_score(Y_test, y_pred2, average='macro'))  # 可以根据你的需要选择 'micro', 'weighted' 等

注意,我选择了 ‘macro’ 作为 average 的值,但你也可以根据你的需求选择其他值。

你可能感兴趣的:(机器学习算法,Python程序代码,Python常见bug,pycharm,python,人工智能)