推荐系统评价指标 HR MRR NDCG

HR(hit rate)
      命中率。用户想要的东西,推荐系统有没有推荐出来,强调预测的"准确性"


N:表示用户的访问总量,就是用户真实点击的个数。
hit(i) :如果推荐系统推荐商品i,hit(i)就为1,否则为0。

 

MRR(平均倒数排名)
      关心找到的这些项目,是否放在用户显眼的位置里,即强调顺序性。

 

N:表示用户的访问总量,就是用户真实点击的个数。
pi:表示itemi在推荐结果中出现的位置,如果没有出现,则pi就为+∞。

NDCG(Normalized Discounted Cumulative Gain)
      关心找到的这些项目,是否放在用户显眼的位置里,即强调顺序性。

 

N:表示用户的访问总量,就是用户真实点击的个数。
pi:表示itemi在推荐结果中出现的位置,如果没有出现,则pi就为+∞。
实例:

 代码实现

import math

# 推荐列表
R = [[3, 10, 15, 12, 17], [20, 15, 18, 14, 30], [2, 5, 7, 8, 15], [56, 14, 25, 12, 19], [21,24,36,54,45]]
# 用户访问列表
T=[[12],[3],[5],[14],[20]]


def indicators_5(rankedList, testList):
    Hits_i = 0
    Len_R = 0
    Len_T = len(testList)
    MRR_i = 0
    HR_i = 0
    NDCG_i = 0
    for i in range(len(rankedList)):
        for j in range(len(rankedList[i])):
            if testList[i][0]==rankedList[i][j]:
                Hits_i+=1
                HR_i+=1
                # 注意j的取值从0开始
                MRR_i+=1/(j+1)   
                NDCG_i+=1/(math.log2(1+j+1))
                break
    HR_i/=Len_T
    MRR_i/=Len_T
    NDCG_i/=Len_T
    print(Hits_i)
    print(f'HR@5={HR_i}')
    print(f'MRR@5={MRR_i}')
    print(f'NDCG@5={NDCG_i}')



if __name__ == '__main__':
    indicators_5(R, T)

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值