平均精度与精度

机器算法验证 机器学习
2022-03-13 21:11:21

在 Python 中使用 sklearn.metrics,我在测试模型指标时计算了平均精度(使用 average_precision_score)和精度(使用 classification_report)。但是,我得到了不同的答案(分别为 0.89 和 0.93)。我阅读了两者的文档并且知道方程式是不同的,但我希望能够直观地解释两者之间的差异以及何时使用一个而不是另一个。

2个回答

精度是指特定决策阈值处的精度。例如,如果您将任何模型输出小于 0.5 计为负数,大于 0.5 计为正数。但有时(特别是如果您的类不平衡,或者如果您希望精确而不是召回,反之亦然),您可能需要改变这个阈值。平均精度为您提供所有此类可能阈值的平均精度,这也类似于精度召回曲线下的区域。在不考虑任何特定决策阈值的情况下,比较模型对预测排序的好坏是一个有用的指标。

参考:https ://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html

精度是 Pr = TP/(TP+FP),其中 TP 和 FP 分别是真阳性和假阳性。因此,我们使用该指标来评估分类器等系统,以了解我们发现阳性的准确程度。如果你的分类器将一个条目标记为 True,即使它实际上是 False,它也会增加 FP,从而降低 Pr。所以你的系统不精确。所以,在分类器的情况下,我们不需要知道哪个条目最有可能属于一个类或类似的东西。

假设您构建了一个搜索音乐视频的应用程序。所以,如果对一首歌进行查询(假设我想挣脱),如果从查询中检索到的前 5 个条目与歌曲或乐队“女王”完全无关,并且从 6 到 10 的条目是相关的对他们来说,那么您的应用程序完全是浪费。因此,在这些顺序很重要的情况下,我们计算精度和召回率(Re = TP/(TP+FN)),曲线下面积为 MAP(平均精度)

这个想法背后的直觉如下,因为真实条目的数量是固定的,移动到下一个条目要么增加召回(当你遇到真阳性时),要么保持不变(当你遇到误报时)随着精度降低(如果遇到 FP)并保持不变或增加(如果遇到 TP),因此,如果您在开始时得到不相关的结果,则精度几乎保持为 0,这使您的 MAP 为 0,就好像您找到了所有开始时的准确结果(基本上意味着零 FP),因此精度接近 1,导致 MAP 接近 1。这证明您的系统是最好的

本文通过示例进行了详细说明

分解平均精度 (mAP)