我正在使用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
函数以报告有关感兴趣的少数类别的指标?任何见解将不胜感激 - 感谢您的阅读。
您可以设置average=None
以获取每个类的平均精度分数(文档(。但请记住,平均精度分数考虑了所有可能的阈值,而分类报告仅显示一个阈值,该阈值可能偏向于多数类。
经过多次修补,想出了一个解决方案。我一直在使用预处理工具LabelEncoder()
自动编码训练集和测试集的标签。我正在执行二进制分类,因此标签只需要0
或1
的编码。但是,执行此操作时,该函数会自动将多数类编码为 1
并将少数类编码为 0
。对于我对预测少数阶级感兴趣(通常是这样(的情况,无论我是否有兴趣预测这一点,这都会使average precision
函数的报告偏向于多数阶级
这让我在这里问了另一个关于"翻转"0
和1
值的问题,我的标签被分配到的数组中,你瞧,它正在工作。因此,底线是更加有意地确保我感兴趣的预测类始终编码为1
,并确保另一个类编码为0
。