- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用点击数据构建精确度和召回率图表。我有两个数据源。
我使用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)了这一点。
举个例子:
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 是多个查询/排名的平均精度的平均值。举个例子来说明。
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@k
、recall@k
作为检索系统的性能衡量标准。您应该为此类测试构建一个检索系统。如果你想用Java编写程序,你应该考虑Apache Lucene建立您的索引。
关于python - 计算点击数据的精确度和召回率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28154321/
我正在使用 widgetkit 插件 (Joomla CMS),用于灯箱。由于 widgetkit 使用 fancybox 来显示灯箱,我在这里发布一个问题。 当我不使用 AJAX 技术来更新 Joo
我使用 CNN 对不平衡数据集进行图像分类。我对 tensorflow 后端完全陌生。这是多类问题(不是多标签),我有 16 个类。类是一种热编码。 我想计算每个时期的宏观指标:F1、准确率和召回率。
当我点击我的rate_btn 启动此交易功能时。 它工作正常,但在此过程中它再次重新运行我的类 Activity (每次使用事务时我的类 Activity 都会重新运行)因此重置所有内容,如我的 ms
我是一名优秀的程序员,十分优秀!