Scikit Learn:倾斜的平均精度报告

时间:2014-11-07 14:22:17

标签: scikit-learn classification metrics average-precision

我使用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函数来报告与少数感兴趣类相关的指标?非常感谢任何见解 - 感谢阅读。

2 个答案:

答案 0 :(得分:3)

您可以设置average=None以获得每个班级的平均精确度分数(docs)。但请记住,平均精度分数会考虑所有可能的阈值,而分类报告只显示一个阈值,这可能偏向大多数类别。

答案 1 :(得分:1)

经过多次修补后找出解决方案。我一直在使用预处理工具LabelEncoder()自动编码训练和测试集的标签。我执行二进制分类,因此标签只需要01的编码。但是,执行此操作时,该函数会自动将多数类编码为1,将少数类编码为0。对于我有兴趣预测少数类(通常是这样)的情况,这会使average precision函数的报告偏向于支持大多数类,无论我是&# 39;有兴趣预测这一点。

这导致我提出另一个问题here关于"翻转"我的标签所分配到的数组中的01值,并且看,它正在工作。因此,最重要的是要更加有意识地确保我对预测感兴趣的类总是编码为1,并确保其他类被编码为0