我使用scikit-learn来执行二进制分类,但标签并非在整个数据集中均匀分布。对于我对预测少数群体类感兴趣的情况,我对metrics.average_precision_score
提供的平均精度度量有一些担忧。当我运行实验并打印分类报告时,我发现整体精度方面表现良好,但这显然来自模型在预测大多数类时表现良好,如下所示:
precision recall f1-score support
label of interest 0.24 0.67 0.35 30
non-label 0.97 0.81 0.88 300
然后average precision
报告为0.9752
左右。对于大多数班级来说,这个平均精确分数显然是在报告的,这对我来说并不是真正有兴趣识别的班级。是否有某种方法可以修改metrics.average_precision_score
函数来报告与少数感兴趣类相关的指标?非常感谢任何见解 - 感谢阅读。
答案 0 :(得分:3)
您可以设置average=None
以获得每个班级的平均精确度分数(docs)。但请记住,平均精度分数会考虑所有可能的阈值,而分类报告只显示一个阈值,这可能偏向大多数类别。
答案 1 :(得分:1)
经过多次修补后找出解决方案。我一直在使用预处理工具LabelEncoder()
自动编码训练和测试集的标签。我执行二进制分类,因此标签只需要0
或1
的编码。但是,执行此操作时,该函数会自动将多数类编码为1
,将少数类编码为0
。对于我有兴趣预测少数类(通常是这样)的情况,这会使average precision
函数的报告偏向于支持大多数类,无论我是&# 39;有兴趣预测这一点。
这导致我提出另一个问题here关于"翻转"我的标签所分配到的数组中的0
和1
值,并且看,它正在工作。因此,最重要的是要更加有意识地确保我对预测感兴趣的类总是编码为1
,并确保其他类被编码为0
。