如何从sklearn.metrics的classification_report中提取类名存入列表
sklearn分类报告类别名称提取方法
方法1:从已生成的报告文本中提取
适合你仅保存了分类报告文本、没有原始标签数据的场景,直接通过字符串分割提取即可:
# 你的分类报告字符串 report_str = """ precision recall f1-score support B-Origin 0.99 0.98 0.98 787 B-Opinion 0.90 0.85 0.88 41 I-Relationship 0.95 0.80 0.87 153 I-Year 0.93 0.97 0.95 285 I-Origin 0.94 0.90 0.92 570 """ # 按行分割、过滤空行 lines = [line.strip() for line in report_str.split('\n') if line.strip()] # 跳过第一行表头,取剩余每行第一个元素即为类别名 names = [line.split()[0] for line in lines[1:]]
运行后names的结果就是你需要的["B-Origin", "B-Opinion", "I-Relationship", "I-Year", "I-Origin"]。
如果你的完整报告还包含末尾的accuracy、macro avg、weighted avg统计行,调整切片去掉末尾3行即可:
# 完整报告的提取逻辑 names = [line.split()[0] for line in lines[1:-3]]
方法2:生成报告时直接获取(更推荐)
不需要解析文本,准确率更高,直接取生成报告用到的标签列表即可:
from sklearn.metrics import classification_report import numpy as np # 你的真实标签和预测标签 y_true = [....] y_pred = [....] # 直接获取和报告顺序一致的去重类别列表 unique_labels = np.unique(y_true).tolist() # 生成报告时可以指定labels参数固定顺序 report = classification_report(y_true, y_pred, labels=unique_labels) # unique_labels就是你需要的类别列表 names = unique_labels
内容的提问来源于stack exchange,提问作者Mughees Asif
相关产品推荐
相关产品推荐

