簡體   English   中英

在點擊數據中計算精度和召回

[英]Calculating Precision and Recall in Click Data

我正在嘗試使用點擊數據構建精度和調用圖。 我有兩個數據源。

  1. 第一個數據源具有基於給定query_id的所有用戶單擊的item_id。
  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

但是當我試圖弄清Recall時,我在獲取點擊數據的假負項目方面遇到了麻煩。 理論上,假陰性意味着錯誤標記。 我所擁有的只是給定ID的用戶點擊數據以及與該ID相關的所有項目。

R = T_positive / (T_positive + F_negative)

如何正確計算精度和回憶,以便我可以構建圖形。

另一方面,如果這不是一個評估結果的好指標,考慮到我只有上面提到的數據這個好的指標是什么?

您可以根據數據集計算精度@ k,調用@k。 但是您需要對文檔進行排名才能計算出來。

數據集

眾所周知的數據集是AOL搜索查詢日志 ,您可以使用它來構建基於檢索的系統(您只需要數據集和檢索功能)來計算精度,召回率,平均精度和平均精度。 我簡要解釋了上面提到的術語。

文檔排名/檢索功能

Okapi BM25 (BM代表最佳匹配)是搜索引擎根據其與給定搜索查詢的相關性對匹配文檔進行排名的排名函數。 它基於概率檢索框架。 BM25是一種詞袋檢索功能,其基於出現在每個文檔中的查詢詞來對一組文檔進行排序,而不管文檔內的查詢詞之間的相互關系(例如,它們的相對接近度)。 有關詳細信息,請參閱Wikipedia頁面。

精確和召回

精確度量“我們檢索的所有文件中的相關數量是多少相關的?”。

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

召回措施“在所有實際相關文件中,我們檢索了多少相關的文件?”。

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

假設當查詢“q”被提交給具有查詢“q”的100個相關文檔的信息檢索系統(例如,搜索引擎)時,系統從600個文檔的總集合中檢索68個文檔。 在檢索到的68份文件中,有40份文件是相關的。 所以,在這種情況下:

Precision = 40 / 68 = 58.8%Recall = 40 / 100 = 40% Precision = 40 / 68 = 58.8% Recall = 40 / 100 = 40%

F-Score / F-measure是精度和召回的加權調和平均值。 傳統的F-measure或平衡F-score是:

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

平均精度

您可以這樣想:您在Google並向您顯示10個結果。 如果所有這些都相關,那可能是最好的。 如果只有一些是相關的,比如五個,那么如果首先顯示相關的那些則更好。 如果前五個不相關而且好的只從第六個開始就不好了,不是嗎? AP得分反映了這一點。

舉個例子如下:

在此輸入圖像描述

AvgPrec的兩個排名:

排名#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是多個查詢/排名的平均精度的平均值。 舉例說明。

在此輸入圖像描述

兩個查詢的平均平均精度:

對於查詢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來構建索引。

只需單擊(TP)和相關數據(TP + FN),您就可以計算召回 - 但不是精確度。 您沒有可以告訴您FP值的數據集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM