解决sklearn.metrics.classification_report中类别数量不匹配问题
解决sklearn.metrics.classification_report中类别数量不匹配问题
在使用sklearn.metrics.classification_report函数生成分类报告时,可能会遇到以下错误:
report = classification_report(labels, preds, target_names=classes, output_dict=True, zero_division=1)
Traceback (most recent call last):
File "\/mnt\/disk1\/lh\/code\/InternImage\/classification\/main.py", line 735, in <module>
main(config)
File "\/mnt\/disk1\/lh\/code\/InternImage\/classification\/main.py", line 285, in main
acc1, acc5, loss = validate(config, data_loader_val, model, dataset_val=dataset_val)
File "\/home\/lh\/anaconda3\/envs\/internimage\/lib\/python3.9\/site-packages\/torch\/autograd\/grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "\/mnt\/disk1\/lh\/code\/InternImage\/classification\/main.py", line 605, in validate
report = classification_report(labels, preds, target_names=classes, output_dict=True, zero_division=1)
File "\/home\/lh\/anaconda3\/envs\/internimage\/lib\/python3.9\/site-packages\/sklearn\/metrics\/_classification.py", line 2332, in classification_report
raise ValueError(
ValueError: Number of classes, 70, does not match size of target_names, 170. Try specifying the labels parameter
该错误提示目标类别数为70个,但是目标名称列表的长度为170个,导致报错。这是因为您提供的目标名称列表与实际的类别数量不匹配。
要解决这个问题,您可以通过指定`labels`参数来生成报告。`labels`参数应该是一个包含所有样本的真实类别的列表。您可以将真实类别列表传递给`classification_report`函数,而不是目标名称列表。
以下是一个示例:
from sklearn.metrics import classification_report
假设真实类别列表为true_labels
report = classification_report(true_labels, preds, target_names=classes, output_dict=True, zero_division=1)
请将上述示例中的`true_labels`替换为包含所有样本的真实类别的列表。这样,您就可以生成报告了。
原文地址: https://www.cveoy.top/t/topic/p3YZ 著作权归作者所有。请勿转载和采集!