日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

搜索推荐评价指标Precision@k、Recall@k、F1@k、NDCG@k

發布時間:2023/12/16 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索推荐评价指标Precision@k、Recall@k、F1@k、NDCG@k 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設對于一個查詢,真實相關的結果是{A,C,E, Q},搜索模型得到5個結果{A, B, C, D, E},則其中只有A,C,E是相關的,標記為{1, 0, 1, 0, 1},1表示相關,0表示不相關。

Precision@k

即預測正確的相關結果占返回的所有結果的比例:
Precision@k=TP@kTP@k+FP@kPrecision@k = \frac{TP@k}{TP@k+FP@k} Precision@k=TP@k+FP@kTP@k?
取值范圍[0,1],越大越好。

例子:
Precision@3 = 2/3 = 0.67
Precision@4 = 2/4 = 0.50
Precision@5 = 3/5 = 0.60

Recall@k

即預測正確的相關結果占所有相關結果的比例:
Recall@k=TP@kTP@k+FN@kRecall@k = \frac{TP@k}{TP@k+FN@k} Recall@k=TP@k+FN@kTP@k?
取值范圍[0,1],越大越好。

例子:
Recall@3 = 2/4 = 0.50
Recall@4 = 2/4 = 0.50
Recall@5 = 3/4 = 0.75

F1@k

即Precision@k和Recall@k的調和平均數:
F1@k=2×Precision@k×Recall@kPrecision@k+Recall@kF1@k = \frac{2 \times Precision@k \times Recall@k}{Precision@k+Recall@k} F1@k=Precision@k+Recall@k2×Precision@k×Recall@k?
取值范圍[0,1],越大越好。

例子:
F1@3 = (2 * 0.67 * 0.50)/(0.67 + 0.50) = 0.57
F1@4 = (2 * 0.50 * 0.50)/(0.50 + 0.50) = 0.50
F1@5 = (2 * 0.60 * 0.75)/(0.60 + 0.75) = 0.67

注意:Precision@k、Recall@k、F1@k評價指標都是與返回順序無關的。

NDCG@k

歸一化折損累計增益(Normalized Discounted Cumulative Gain,NDCG),是一種考慮了返回順序的評價指標。取值范圍[0,1],越大效果越好。

NDCG@k=DCG@kIDCG@kNDCG@k = \frac{DCG@k}{IDCG@k} NDCG@k=IDCG@kDCG@k?
其中,
DCG@k=∑i=1krelilog2(i+1)DCG@k=\sum_{i=1}^{k}\frac{rel_{i}}{log_{2}(i+1) } DCG@k=i=1k?log2?(i+1)reli??
relirel_ireli?指第iii個結果的真實相關性分數。
IDCG@k=∑i=1∣REL∣relilog2(i+1)IDCG@k=\sum_{i=1}^{|REL|}\frac{rel_{i}}{log_{2}(i+1) } IDCG@k=i=1REL?log2?(i+1)reli??
IDCG也就是理想的DCG(Ideal DCG)。|REL| 表示,結果按照真實相關性從大到小排序,取前k個結果組成的集合的個數。

舉個例子:

假設對于一個查詢,搜索模型得到8個結果{A, B, C, D, E, F, G, H},分數是{0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5},其真實相關性分數是{3, 2, 3, 0, 1, 2, 3, 0},求NDCG@6。

首先求DCG@6:

Itemrelirel_ireli?relilog2(i+1)\frac{rel_{i}}{log_{2}(i+1)}log2?(i+1)reli??
A33
B21.26185950
C31.5
D00
E10.38685280
F20.71241437

NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667

再求IDCG@6:

對真實相關性分數排序,得到{3, 3, 3, 2, 2, 1, 0, 0}

relirel_ireli?relilog2(i+1)\frac{rel_{i}}{log_{2}(i+1)}log2?(i+1)reli??
33
31.89278926
31.5
20.86135311
20.77370561
10.35620718

IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516

最終,NDCG@6=6.86112667/8.38405516=0.81835419NDCG@6=6.86112667/8.38405516=0.81835419NDCG@6=6.86112667/8.38405516=0.81835419,約82%。

注意點:
1、分母log2(i+1)log_2{(i+1)}log2?(i+1)相當于對返回位置進行了懲罰,越往后懲罰越大。分母IDCG@kIDCG@kIDCG@k是為了將分數歸一化到[0,1]之間。
2、模型分數{0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5}的大小不會影響最終NDCG的值,比如改為{100, 90, 80, 70, 60, 50, 40, 30},最終NDCG分數是一樣的,只要保證是從大到小排序就行,因為在實際中,一般也是按照模型分數從大到小的順序返回結果。

代碼:

import numpy as np from sklearn import metrics# NDCG true_relevance = np.array([[3, 2, 3, 0, 1, 2, 3, 0]]) scores = np.array([[0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5]])print(metrics.ndcg_score(true_relevance, scores, k=6)) # 0.8183541904922857

參考文章:
[1] 搜索評價指標——NDCG
[2] 信息檢索中的度量指標全解析

總結

以上是生活随笔為你收集整理的搜索推荐评价指标Precision@k、Recall@k、F1@k、NDCG@k的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。