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 的值,但你也可以根据你的需求选择其他值。