gpt4 book ai didi

python - 计算点击数据的精确度和召回率

转载 作者:行者123 更新时间:2023-11-30 08:55:19 24 4
gpt4 key购买 nike

我正在尝试使用点击数据构建精确度和召回率图表。我有两个数据源。

  1. 第一个数据源包含基于给定 query_id 的所有用户点击的 item_ids。
  2. 第二个数据源包含给定 query_id 的所有相关 item_id。

我使用python并将两个数据源中的这些放入字典中,如下所示:

>>> print clicked_data
{101: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 103: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]}

>>> print all_relevant_data
{101: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], 103: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]}

我正在阅读 scikit-learn 网站 ( http://scikit-learn.org/stable/auto_examples/plot_precision_recall.html ) 中的文章,并尝试遵循该公式,但在设置假阳性和假阴性时感到非常困惑。

遵循 scikit-learn 中的方程:根据上面项目 101 的示例预设

P = T_positive/ (T_positive + F_positive)

>>> float(len(clicked_data[101]))/float(len(all_relevant_data[101]))
0.5555555555555556

但是当我试图找出召回率时,我在获取点击数据的假阴性项时遇到了麻烦。理论上,假阴性意味着错误标记。我所拥有的只是给定 id 的用户点击数据以及与该 id 相关的所有项目。

R = T_positive / (T_positive + F_negative)

如何正确计算精度和召回率,以便构建图表。

换句话来说,如果这不是评估结果的良好指标,考虑到我只有上述数据,那么什么是好的指标?

最佳答案

您可以根据您的数据集计算 precision@k、recall@k。但您需要对文档进行排序才能计算它们。

数据集

一个众所周知的数据集是 AOL Search Query Logs您可以使用它来构建基于检索的系统(您只需要一个数据集和一个检索函数)来计算精度、召回率、平均精度和平均精度。我简单解释一下上面提到的术语。

文档排序/检索功能

Okapi BM25(BM 代表最佳匹配)是搜索引擎用来根据匹配文档与给定搜索查询的相关性对匹配文档进行排名的排名函数。它基于概率检索框架。 BM25 是 bag-of-words检索函数,根据每个文档中出现的查询术语对一组文档进行排名,而不管文档中查询术语之间的相互关系(例如,它们的相对接近度)。请参阅Wikipedia页面了解更多详细信息。

准确率和召回率

精确测量“我们检索到的所有相关文档中,有多少是实际相关的?”。

Precision = No. of relevant documents retrieved / No. of total documents retrieved

召回措施“在所有实际相关文档中,我们检索到了多少相关文档?”。

Recall = No. of relevant documents retrieved / No. of total relevant documents

假设,当查询“q”被提交到具有 100 个相关文档的信息检索系统(例如搜索引擎)时。查询“q”,系统从总共 600 个文档中检索到 68 个文档。在 68 个检索到的文档中,有 40 个相关文档。所以,在这种情况下:

准确率 = 40/68 = 58.8%召回率 = 40/100 = 40%

F-Score/F-measure 是精度和召回率的加权调和平均值。传统的 F-measure 或平衡 F-score 是:

F-Score = 2 * Precision * Recall / Precision + Recall

平均精度

您可以这样想:您在 Google 中输入一些内容,它会显示 10 个结果。如果所有这些都是相关的,那可能是最好的。如果只有一些相关,比如五个,那么首先显示相关的会更好。如果前五名无关紧要,好成绩只能从第六名开始,那就糟糕了,不是吗? AP 分数反射(reflect)了这一点。

举个例子:

enter image description here

AvgPrec of the two rankings:

排名#1:(1.0 + 0.67 + 0.75 + 0.8 + 0.83 + 0.6)/6 = 0.78

排名#2:(0.5 + 0.4 + 0.5 + 0.57 + 0.56 + 0.6)/6 = 0.52

平均精度 (MAP)

MAP 是多个查询/排名的平均精度的平均值。举个例子来说明。

enter image description here

Mean average precision for the two queries:

对于查询 1,AvgPrec:(1.0+0.67+0.5+0.44+0.5)/5 = 0.62

对于查询 2,AvgPrec:(0.5+0.4+0.43)/3 = 0.44

因此,MAP = (0.62 + 0.44)/2 = 0.53

有时,人们使用 precision@krecall@k作为检索系统的性能衡量标准。您应该为此类测试构建一个检索系统。如果你想用Java编写程序,你应该考虑Apache Lucene建立您的索引。

关于python - 计算点击数据的精确度和召回率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28154321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com