Scikit Learn: Skewed Average Precision Report



我正在使用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()自动编码训练集和测试集的标签。我正在执行二进制分类,因此标签只需要01的编码。但是,执行此操作时,该函数会自动将多数类编码为 1 并将少数类编码为 0 。对于我对预测少数阶级感兴趣(通常是这样(的情况,无论我是否有兴趣预测这一点,这都会使average precision函数的报告偏向于多数阶级

这让我在这里问了另一个关于"翻转"01值的问题,我的标签被分配到的数组中,你瞧,它正在工作。因此,底线是更加有意地确保我感兴趣的预测类始终编码为1,并确保另一个类编码为0

相关内容

  • 没有找到相关文章

最新更新