推荐系统常用的评价指标:HR、NDCG、MRR

您所在的位置:网站首页 检索结果评价指标是什么 推荐系统常用的评价指标:HR、NDCG、MRR

推荐系统常用的评价指标:HR、NDCG、MRR

#推荐系统常用的评价指标:HR、NDCG、MRR| 来源: 网络整理| 查看: 265

推荐系统常用的评价指标 应用背景介绍评价指标的知识来源命中率HR(Hits Ratio)归一化折损累计增益(Normalized Discounted Cumulative Gain,NDCG)平均倒数排名(Mean Reciprocal Rank,MRR)实例参考

应用背景介绍

我们用一张表格展示推荐系统向用户推荐的列表与用户真实的访问项目,如下:

用户真实值推荐列表A123,10,15,12,17B320,15,18,14,30C52,5,7,8,15D1456,14,25,12,19E2021,24,36,54,45 评价指标的知识来源

评价指标的来源是根据TKDE-2019中的一篇论文使用的方法: 在这里插入图片描述

命中率HR(Hits Ratio)

意义:关心用户想要的,我有没有推荐到,强调预测的“准确性” H R = 1 N ∑ i = 1 N h i t s ( i ) HR=\frac{1}{N}\sum_{i=1}^{N}{hits(i)} HR=N1​i=1∑N​hits(i) 参数说明: N:用户的总数量 hits(i):第i个用户访问的值是否在推荐列表中,是则为1,否则为0

归一化折损累计增益(Normalized Discounted Cumulative Gain,NDCG)

意义:关心找到的这些项目,是否放在用户更显眼的位置里,即强调“顺序性“ N D C G = 1 N ∑ i = 1 N 1 l o g 2 ( p i + 1 ) NDCG=\frac{1}{N}\sum_{i=1}^{N}\frac{1}{log_{2}{(p_{i}+1)}} NDCG=N1​i=1∑N​log2​(pi​+1)1​ 参数说明: N:用户的总数量 p i : 第 i 个 用 户 的 真 实 访 问 值 在 推 荐 列 表 的 位 置 , 若 推 荐 列 表 不 存 在 该 值 , 则 p i → ∞ p_{i}:第i个用户的真实访问值在推荐列表的位置,若推荐列表不存在该值,则p_{i}\to\infty pi​:第i个用户的真实访问值在推荐列表的位置,若推荐列表不存在该值,则pi​→∞

平均倒数排名(Mean Reciprocal Rank,MRR)

意义:关心找到的这些项目,是否放在用户更显眼的位置里,即强调“顺序性“ M R R = 1 N ∑ i = 1 N 1 p i MRR=\frac{1}{N}\sum_{i=1}^{N}\frac{1}{{p_{i}}} MRR=N1​i=1∑N​pi​1​ 参数说明: N:用户的总数量 p i : 第 i 个 用 户 的 真 实 访 问 值 在 推 荐 列 表 的 位 置 , 若 推 荐 列 表 不 存 在 该 值 , 则 p i → ∞ p_{i}:第i个用户的真实访问值在推荐列表的位置,若推荐列表不存在该值,则p_{i}\to\infty pi​:第i个用户的真实访问值在推荐列表的位置,若推荐列表不存在该值,则pi​→∞

实例 用户真实值推荐列表A123,10,15,12,17B320,15,18,14,30C52,5,7,8,15D1456,14,25,12,19E2021,24,36,54,45

代码如下:

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)

如果对你有用,请点个赞,谢谢!

参考

1.https://blog.csdn.net/qq_34862636/article/details/105010511 2.https://blog.csdn.net/Allenalex/article/details/78161915



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3