惶惶不可终日,怏怏何须|

お兄ちゃん~

园龄:3年9个月粉丝:0关注:3

推荐系统 TOP K 评价指标

符号说明

top_k: 当前用户预测分最高的k个items,预测分由高到低排序

pos: 当前用户实际点击过的items

N: 测试用户数量

示例数据

N = 4

len(top_k & pos) len(pos)
1 2
2 3
3 4
0 3

一、Hit Rate

网上有2种定义方式,不知道哪个更为正确的,有知道的人能不能麻烦告诉我一下?
第一种
对所有用户:我们真正喜欢的物品中,你给我们推荐了多少

hit = 0
total = 0
for i in users:
  top_k = 获取top_k的代码
  hit += len(top_k & pos)
  total += len(pos)

hit_rate = hit / total

hit_rate=1+2+3+02+3+4+5

第二种

被推荐到喜欢物品的用户占总用户的比例

hit = 0
for i in users:
  top_k = 获取top_k的代码
  if top_k中有预测到pos中的item:
    hit += 1
hit_rate = hit / N

hit_rate=1+1+1+04

二、Recall

对某个用户:我真正喜欢的物品中,你给我推荐了多少

recall = 0
for i in users:
  top_k = xxx(i)
  recall += len(top_k & pos) / len(pos)  # 用户i的recall
recall = mean(recall)

recall=(12+23+34+03) / 4

三、NDCG

对某个用户:实际的折扣累计收益 DCG (Discounted Cumulative Gain) / 理想的DCG
DCG:考虑位置因素,希望用户喜欢的物品在top_k中排得越前越好
iDCG:归一化,解决【不同用户的DCG求和项数不同,不能进行比较】的问题

NDCG = 0
for i in users:
  DCG = 0
  iDCG = 0
  top_k = xxx(i)
  for rank in range(k):
    if top_k[rank] in pos:
      DCG += 1 / log2(rank + 2)
  for i in range(min(k, len(pos))):
    iDCG += 1 / log2(i + 2)
  NDCG_u = DCG / iDCG
  NDCG += NDCG_u
NDCG = mean(NDCG)


参考链接-两种不同的hit rate定义方式 [https://www.cnblogs.com/leimu/p/13564214.html]() [https://blog.csdn.net/yanguang1470/article/details/123036806]()

本文作者:お兄ちゃん~

本文链接:https://www.cnblogs.com/ihml/p/16183301.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   お兄ちゃん~  阅读(577)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起