1

我正在使用 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函数以报告与少数感兴趣类别相关的指标?任何见解将不胜感激 - 感谢您的阅读。

4

2 回答 2

3

您可以设置average=None为获得每个班级的平均精度分数(文档)。但请记住,平均精度分数考虑了所有可能的阈值,而分类报告仅显示一个阈值,这可能偏向于多数类。

于 2014-11-07T16:33:00.913 回答
1

经过一番折腾,想出了一个解决办法。我一直在使用预处理工具LabelEncoder()来自动编码训练和测试集的标签。我正在执行二进制分类,因此标签只需要0or的编码1。但是,执行此操作时,该函数会自动将多数类编码为1,将少数类编码为0。对于我有兴趣预测少数类(通常是)的情况,无论我是否有兴趣预测这一点,这都会使函数的报告偏向于多数类average precision

这导致我在这里提出另一个问题,关于“翻转”我的标签分配给的数组中的01值,你瞧,它正在工作。因此,最重要的是更加有意识地确保我有兴趣预测的类总是被编码为1,并确保另一个类被编码为0

于 2014-11-12T18:12:17.473 回答