数据集:https://www.upf.edu/web/mtg/lastfm360k

1. userCF算法主要包括两个部分:

https://blog.csdn.net/bbbeoy/article/details/78646537 
①:找到和目标用户相似的用户集合 
②:找到这个集合中用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。 
首先计算两两用户相似度。协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定两个用户u,v,令N(u)表示用户u曾经做出的有过正反馈的物品集合,N(v)表示用户v曾经做出的有过正反馈的物品集合。 
可通过余弦相似度计算: 
音乐推荐 
上面用户兴趣相似度计算过于粗略,比如两个用户同样买过热门物品并不代表他们兴趣相似,换句话说只有买过相同的冷门物品才能表示两个用户兴趣相似。故有改进版本的计算相似度: 
音乐推荐 
其中N(u)表示与用户u产生过行为的物品列表;N(i)表示与物品i产生过行为的用户列表。 
可用看出该公式通过 
音乐推荐 
惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响。 
那在实际计算时应该如何计算相似度呢? 
首先建立物品到用户的倒排表,一个物品可能有多个用户与其产生过行为,对于每个物品都保存对该物品产生行为用户的列表。假设用户u和用户v同时属于倒排表中K个物品对应的用户列表,那么C[u][v]=k,从而可用扫描倒排表中每个物品对应的用户列表,依次算出C[u][v],最终得到所有用户之间不为0的C[u][v]。

得到用户之间兴趣相似度以后,userCF算法会给用户推荐和他兴趣最相似的k个用户喜欢的物品,如下公式计算用户u对物品i的感兴趣程度: 
音乐推荐 
其中S(u,K)表示和用户u最为相似的k个用户,N(i)表示和物品i产生行为的用户列表。Wuv表示用户u和用户v的相似度。rvi表示用户v对物品i的兴趣,因为使用的是单一行为的隐反馈,故所有rvi=1.

如果要给用户U1只推荐一个物品,由于P(U1,e)>P(u1,f),推荐物品e。

精度指标不和参数k成线性关系,对k也不是特别敏感,K只要选定在一定范围内,就可以获得不错的精度。k越大则UserCF推荐结果就越热门(流行度越大),覆盖率越低

2.ItemCF的核心思想是:

https://blog.csdn.net/hhjhh76/article/details/81781707

给用户推荐和其过去感兴趣的物品相似的物品,算法主要包括两个步骤:

<1>.计算物品之间的相似度

每个用户的兴趣都局限在某几个方面,如果两个物品属于一个用户的兴趣列表,那么两个物品可能就属于有限的几个领域,而如果两个物品同属于很多用户的兴趣列表,那么他们就可能属于同一个领域,因而有很大的相似度。因此ItemUser利用下面公式计算物品之间的相似度:

音乐推荐

其中,W(i,j)表示物品i,j之间的相似度;N(i)表示喜欢物品i的用户集合,|N(i)|表示喜欢物品i的用户的个数

<2>计算用户U对一个物品的兴趣

音乐推荐

其中P(u,j)表示用户u对物品j的兴趣,S(j,k)表示和物品j最相似的k个物品,N(u)表示用户产生过行为的物品集合,r(u,i)表示用户u对物品i是否产生过行为(对于评分系统,可以表示u对i的评分)。

如果要给用户U1只推荐一个物品,由于P(U1,e)<P(U1,f),推荐物品f。

精度不和k成线性关系,选择合适的k比较重要

三、UserCF、ItemCF的改进

https://blog.csdn.net/hhjhh76/article/details/81781707

1.考虑物品的热门程度和用户的活跃度

<1>User-IIF

User-IIF认为两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似,使用以下公式计算用户的相似度

音乐推荐

   ,其中|N(i)|表示对物品i产生过行为的用户的数量

惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响

<2>Item-IUF

Item-IUF认为活跃用户对物品相似度的贡献应小于不活跃用户,使用以下公式计算物品的相似度

音乐推荐

   ,其中|N(u)|表示用户u产生过行为的物品的个数
2.考虑时间因素

四、隐语义模型LFM

协同过滤是基于统计学,这种模型可以很好地解释,但隐语义模型中包含两个隐含因子,类似于神经网络的隐藏层,根本不好解释隐含因子与最终结果有什么直观联系,但这并不妨碍我们去做这个模型。我们只需要根据现有的数据去训练出合适的隐含因子,使得目标函数最优化,那么模型就是可用的。
    LFM在各项指标性能上均优于UserCF和ItemCF。但当数据集非常稀疏时,LFM的性能明显下降。甚至不如UserCF和ItemCF。

假设已经有n个人对m个商品进行评价,其评价矩阵AmxnAmxn反应了每个人对每个商品的喜好程度(行为商品,列为用户)。

我们可以将矩阵A分解成为“商品—商品属性”的评价矩阵UmxkUmxk与“商品属性—客户喜好”矩阵VkxnVkxn的乘积,及:

音乐推荐

R矩阵是user-item矩阵,矩阵值Rij表示的是user i 对item j的兴趣度,这正是我们要求的值。对于一个user来说,当计算出他对所有item的兴趣度后,就可以进行排序并作出推荐。LFM算法从数据集中抽取出若干主题,作为user和item之间连接的桥梁,将R矩阵表示为P矩阵和Q矩阵相乘。其中P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度;Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能作为该类的代表。所以LFM根据如下公式来计算用户U对物品I的兴趣度 。其中,p为用户u兴趣和第k个隐类的关系,q为第k个隐类和物品i的关系,F为隐类的数量,r便是用户对物品的兴趣度。

目标函数

 

音乐推荐
有了目标函数,对目标函数求偏导,就完成了
音乐推荐
参数选择:

I. 特征个数F不要太大,类似神经网络中的神经元个数
II. 学习率不好太大
III. 正则项参数不要太大
IV. 负样本/正样本比例确定好,根据准确率、召回率、覆盖率确定。

评价:

1、F值得分

  推荐系统的目的是为客户提供可能喜欢(购买)的产品,但从本质上来说是一个聚类的过程(对客户聚类或者对商品聚类)。对于一个离线的推荐系统来说,为某个客户推荐出的产品我们可以通过某种方式知道是否为该客户喜欢的,也就是说我们可以从该客户处得到标准值。正因为如此,我们就可以借鉴检验分类模型的F值得分来做检验一个推荐系统的效能。
  我们可以通过将单个用户的准确率(或召回率)做累加,即可得到整个推荐系统的准确率(或召回率),如下:

              音乐推荐音乐推荐

其中R(u)是为用户u做出的推荐列表,而T(u)是用户在测试集上的真正的行为列表。precision可以理解为推荐的商品真正为用户有过行为的商品占推荐的总商品的比例,recall可以理解为推荐的商品真正为用户有过行为的商品数目占用户实际有过行为的商品的比例,通过如下公式可以计算出整个推荐系统的效能:  

              音乐推荐

  F得分取值范围为[0,1]之间,即权衡了准确率又兼顾了召回率,有了F得分就可以评价推荐系统的效能,尤其在多个推荐系统之间做比较时就能评判出推荐系统的优劣

2、覆盖率

  覆盖率是指推荐系统对所有的用户推荐的所有产品列表中,出现的产品与数据库中在销售的所有产品的占比(不考虑每个商品被推荐的次数)。在一个在线购物网站,我们希望推荐系统推荐的商品列表尽可能多地包含数据库中的在售商品,如果一个推荐系统的所有推荐商品列表都未出现某种商品,那么这种商品的销量将会越来越少,这是在线购物网站不愿意看到的。因此,我们希望提高覆盖率,覆盖率的计算公式如下:

              音乐推荐

其中I表示在售商品的总数(其中I表示所有商品的集合,反映了推荐的商品占所有商品的比例,一定程度上反映了系统挖掘长尾的能力。)
  在考虑每个商品推荐次数的情况下,我们可以通过计算每个商品出现的频率,用信息论中的熵或者基尼系数来度量一个推荐系统的覆盖率:

             音乐推荐

             音乐推荐

3、多样性与惊喜度

  多样性指一个推荐系统根据用户购买行为为用户推荐的商品的种类情况,如果一个用户购买了某种商品(青岛啤酒),推荐系统老是为该用户推荐其他厂商的啤酒,那么我们说这个推荐系统推荐的产品不具有多样性(不是一个好的推荐系统),一个好的推荐系统可能会想到为用户推荐购买产品相近且不同类别的产品,如可以推荐一个开瓶器等。  
 与多样性相对应的另外一个指标是惊喜度,惊喜度来自于和客户喜欢的物品不相似,但是客户却觉得满意(会购买)的推荐,比如上面说的为买啤酒的客户推荐一个尿布等。  
上面几个指标是作为推荐系统效能的离线指标,一般指标值都达到最好时该推荐系统效果最好,但是一般情况下不可能都达到最好,因此在评价多个推荐系统效能时得综合考虑这几个指标,选择较好的部署。

相关文章:

  • 2021-09-17
  • 2021-10-16
  • 2021-07-23
  • 2021-12-12
  • 2021-12-06
  • 2021-11-23
  • 2022-01-11
猜你喜欢
  • 2021-07-10
  • 2018-04-16
  • 2021-06-17
  • 2021-11-05
  • 2021-12-23
  • 2021-11-05
相关资源
相似解决方案