【推荐算法】从零开始做推荐(二)——TopK推荐的评价指标,计算原理与样例

这篇博客详细介绍了推荐系统中的TopK推荐评价指标,包括Precision、Recall、F1值、命中率(HR)、平均到数排名(MRR)、平均精度均值(MAP)和归一化折损累计增益(NDCG)。文章通过公式解析和样例计算,帮助读者理解这些指标的计算原理和应用场景。
摘要由CSDN通过智能技术生成

前言

  推荐系统的评价指标在不同类型的推荐场景下,选用的不同。有些推荐的评价指标并非完全出自推荐系统,而是从搜索算法,信息检索,机器学习等相关领域沿用过来,因此网上有些对评价指标的解释并非完全以推荐系统的角度进行,这让我会在学习的时候产生困惑,特此做出一些整理,力求完全用推荐系统的角度解释,并给出计算的具体流程。

  如果你对本系列(未写完,持续更新中)感兴趣,可接以下传送门:
  【推荐算法】从零开始做推荐(一)——认识数据
  【推荐算法】从零开始做推荐(二)——推荐系统的评价指标,计算原理与实现样例
  【推荐算法】从零开始做推荐(三)——传统矩阵分解的TopK推荐实战
  【推荐算法】从零开始做推荐(四)——python Keras框架 利用Embedding实现矩阵分解TopK推荐
  【推荐算法】从零开始做推荐(五)——贝叶斯个性化排序矩阵分解 (BPRMF) 推荐实战
  【推荐算法】从零开始做推荐(六)——贝叶斯性化排序矩阵分解 (BPRMF) 的Tensorflow版

TopK 推荐评价指标

TopK推荐

  定义:TopK推荐顾名思义,首先推荐给用户的项目数是K个,其次,这些推荐依据用户对项目的“评分”进行从高到低排序展示给用户。
  举例:打开淘宝后给你推荐的TopK个商品;
  特点:将推荐视为分类问题,如给定一个用户,其将要访问的项目作为其分类的标签,而对该用户的TopK推荐即为模型对该用户的多分类结果。
  因此TopK推荐的评价指标也大多为分类问题指标沿用演化而来。

Precision 精确度,Recall 召回率

  我最初了解它们,是出自机器学习分类问题里经典的混淆矩阵。网上有部分解释也是沿用混淆矩阵,但这会让我对于 T o p K TopK TopK推荐直观理解会造成困难,因此直接以推荐算法角度给出计算公式:
P r e c i s i o n @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ R ( i ) ∣ … . … ( 1 ) R e c a l l @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ T ( i ) ∣ … . … ( 2 ) \begin {aligned} Precision@K = \frac { \sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|R(i)|} ….…(1)\\ Recall@K = \frac {\sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|T(i)|}….…(2) \end{aligned} Precision@K=i=1NR(i)i=1NR(i)T(i).(1)Recall@K=i=1NT(i)i=1NR(i)T(i).(2)

  下面对公式(1)(2)中的变量进行解释.
   i i i:第 i i i次推荐。
   R ( i ) R(i) R(i):第 i i i次推荐中,推荐的项目列表。
   T ( i ) T(i) T(i):第 i i i次推荐中,用户真实访问的项目列表。
   K K K T o p K TopK TopK推荐中推荐列表的长度。
   N N N:总推荐次数。
  大多数场景下,对每一个用户进行一次 T o p K TopK TopK推荐,因此 n n n常为测试集中的用户, N N N常为测试集中的用户数量。
  实际上, P r e c i s i o n @ K Precision@K Precision@K R e c a l l @ K Recall@K Recall@K的分子都是单次推荐时命中数量的累加,区别在分母, R e c a l l @ K Recall@K Recall@K的分母要按实际情况进行累加,但 P r e c i s i o n @ K Precision@K Precision@K的分母是推荐列表长度的累加,可以很轻松的得出: ∑ i = 1 N ∣ R ( i ) ∣ = N × K \sum_{i=1}^N|R(i)|=N×K i=1NR(i)=N×K
  注意 P r e c i s i o n @ K Precision@K Precision@K R e c a l l @ K Recall@K Recall@K的计算都是先累加再相除,不能写成先相除再累加。
  思考 P r e c i s i o n @ K Precision@K Precision@K R e c a l l @ K Recall@K Recall@K的值域在每次推荐都命中的情况下一定为1吗?这受 R ( i ) R(i) R(i) T ( i ) T(i) T(i)的长度影响。对每次推荐而言, ∣ R ( i ) ∣ = K |R(i)|=K R(i)=K是定长的,而 ∣ T ( i ) ∣ |T(i)| T(i)是变长的。
  当任意的 ∣ T ( i ) ∣ |T(i)| T(i)都小于 ∣ R ( i ) ∣ = K |R(i)|=K R(i)=K时,有 m a x ( ∣ R ( i ) ∩ T ( i ) ∣ ) = ∣ T ( i ) ∣ , ∑ i = 1 N ∣ T ( i ) ∣ < ∑ i = 1 N ∣ R ( i ) ∣ max(|R(i)∩T(i)|)=|T(i)|, \sum_{i=1}^N|T(i)|<\sum_{i=1}^N|R(i)| max(R(i)T(i))=T(i)i=1NT(i)<i=1NR(i),在每次都命中的前提下,:
P r e c i s i o n @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ R ( i ) ∣ = ∑ i = 1 N ∣ T ( i ) ∣ ∑ i = 1 N ∣ R ( i ) ∣ < 1 R e c a l l @ K = ∑ i = 1 N ∣ R ( i ) ∩ T ( i ) ∣ ∑ i = 1 N ∣ T ( i ) ∣ = ∑ i = 1 N ∣ T ( i ) ∣ ∑ i = 1 N ∣ T ( i ) ∣ = 1 Precision@K = \frac { \sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|R(i)|}= \frac { \sum_{i=1}^N|T(i)|}{\sum_{i=1}^N|R(i)|}<1\\Recall@K = \frac {\sum_{i=1}^N|R(i)∩T(i)|}{\sum_{i=1}^N|T(i)|}=\frac { \sum_{i=1}^N|T(i)|}{\sum_{i=1}^N|T(i)|}=1 Precision@K=i=1NR(i)i=1NR(i)T(i)=i=1NR(i)i=1NT(i)<1Recall@K=i=1NT(i)i=1NR(i)T(i)=

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lechuan_dafo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值