首页 > 编程知识 正文

协同过滤算法实现,基于用户的协同过滤算法

时间:2023-05-04 11:14:17 阅读:20227 作者:859

目录

一、协同过滤算法

二、基于邻域的算法: UserCF、ItemCF

三.改进UserCF、ItemCF

另一方面,协同过滤推荐算法协同过滤算法是一种基于用户行为数据设计的推荐算法,主要包括:

1 .基于邻域的算法:基于用户的协同过滤算法(UserCF )、基于ItemCF (物品的协同过滤算法)。

2 .隐含语义模型: LFM

3 .基于图的随机游走算法:个人秩

本文主要描述基于邻域的推荐算法UserCF、ItemCF

二、基于邻域的算法: UserCF、ItemCF 1.UserCF的核心思想是:给用户推荐和他兴趣相似的其他用户喜欢的物品,算法主要包括两个步骤:

1.找到和目标用户兴趣相似的用户集合;

要找到与目标用户兴趣相似的用户,“哪些用户兴趣相似? ”。 如何测量两个用户兴趣的相似度?

我知道,在生活中,如果两个人都买了一本叫《推荐系统实战》的书,他们都对推荐系统感兴趣,如果两个人的书一模一样,他们对书的兴趣就特别相似。 UserCF利用这种用户行为的相似性来计算兴趣的相似度。

用Jaccard公式计算b .余弦相似度

上述两个公式是用于计算用户相似度的一般方法,Wuv :用户u和用户v的相似度; n(u ) :用户u采取行动的(喜欢的)物品的集合; |n(u ) :用户u采取行动的项目数量

例如,如果用户U1购买了a、b和c,用户U2购买了a、b、c、e、f、用户U3购买了a和e,则(U1,U2 )、(U1,U3 ) )的相似度分别如下

如果有用户相似度的计算方法,则能够计算各用户和目标用户u之间的相似度,对它们的相似度进行排序,得到与用户u兴趣相似的k个用户的集合s[u,k]

2.找到用户集合中其他用户喜欢的且目标用户没有听说过的物品推荐给目标用户

要向用户推荐与该兴趣爱好相似的k个用户喜欢的项目,首先找到k个用户喜欢而用户从未接触过的项目,前后计算用户对该项目的兴趣程度,根据兴趣程度对项目进行排序,然后用户在UserCF中,使用以下公式测量用户对某个项目的兴趣程度:

这里,p(u,I )表示用户u对项目I喜欢程度; n(I )表示喜欢项目I的用户的集合。 r ) v,I )指示用户v是否对物品I进行过行为(可以向评分系统指示v对I进行的评分)。

以上面的用户U1、U2、U3为例,k取2,U1没有对物品e、f做过行为:

s (u1,2 )={U2,U3}; n(f )={U2}; n(e )={U2,U3}

如果只建议用户U1一个项目,则由于p(U1,e ) p(U1,f ),因此建议项目e。

指标与参数k无关,对k也不特别敏感,只要k选定在一定范围内就能得到良好的精度。 k越大,用户cf推荐结果越受欢迎(流行度越大),覆盖率越低

2.ItemCF的核心思想是:给用户推荐和其过去感兴趣的物品相似的物品,算法主要包括两个步骤:

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

每个用户的兴趣仅限于几个方面,如果两个项目属于一个用户的兴趣列表,则两个项目可能属于有限的几个领域;如果两个项目属于同一多个用户的兴趣列表,则他们属于同一领域因此,ItemUser使用以下公式计算物品间的相似度:

在此,w(I,j )表示物品I、j间类似度; n(I )表示喜欢项目I的用户的集合,|n ) I ) |表示喜欢项目I的用户的数量

/p>

还是以上面  用户U1购买了a,b,c,用户U2购买了a,b,c,e,f,,用户U3购买了a,e 举例说明:
a:U1,U2 ,U3   b:U1,U2   c:U1,U2   e:U2,U3   f:U2

                           

                    

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

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

以上面例子说明,给用户U1推荐物品,K取3,用户U1没有对e,f产生过行为:
S(e,3) = {a,f,b(c)},   S(f,3) = {e,b,c}

                      

                                                        

                                            

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

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

 

3.UserCF和ItemCF的比较

从五个方面对UserCF,ItemCF进行比较
<1>个性化程度:
   UserCF推荐结果着重于和用户兴趣相似的小群体的热点,推荐更加社会化,反映了用户所在兴趣群体中物品的热门程度
   ItemCF着重于维护用户的历史兴趣,推荐更加个性化,反映了用户自己的兴趣传承,可以用于长尾物品丰富的领域
<2>可解释性:ItemCF可以利用用户的历史行为给推荐结果提供推荐解释,UserCF很难对推荐结果作出解释
<3>相似度矩阵:UserCF要计算用户相似度矩阵,适用于用户个数远少于物品个数的场景,ItemCF要计算物品相似度矩阵,适用于物品个数远少于用户个数的场景;互联网中物品的相似度相对于用户的兴趣一般比较稳定,UserCF中用户相似度矩阵相比ItemCF中物品相似度矩阵更新更频繁
<4>物品冷启动:UserCF对物品冷启动不敏感, 对于新加入系统的物品,一旦有用户对该新物品产生行为,UserCF可以将该新物品推荐给和该用户相似的人群,而ItemCF无法很好地推荐新加入的物品
<5>用户冷启动:ItemCF对用户冷启动不敏感,对于新加入的用户,一旦新用户对某物品产生行为,ItemCF可以给该新用户推荐和该物品相似的物品,而UserCF无法很好地给新加入的用户产生推荐

实际在互联网中使用ItemCF比较多。UserCF多用于新闻推荐,热门程度和时效性是新闻推荐的两个中点,UserCF可以给用户推荐和有相似爱好的一群其他用户都在看的新闻,这样抓住热点和时效性的同时,又保证了一定的个性化。

三、UserCF、ItemCF的改进

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

<1>User-IIF

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

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

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

<2>Item-IUF

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

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

2.考虑时间因素

上面的算法都没有考虑时间因素,时间因素对推荐系统的准确率有一定的影响

<1>时间上下文相关的UserCF算法:

前面的UserCF算法认为用户对相同的物品产生过行为,则他们兴趣比较相似,显然如果两个用户同时对同一物品产生行为,则我们认为他们有更大的相似性。例如用户U1在18年1月购买了《推荐系统实战》,用户U2在18年2月购买了《推荐系统实战》,用户U3在15年1月购买了《推荐系统实战》,则我们认为U1和U2的兴趣相似度大于U1和U3。

在计算用户相似度的时候加上时间因素,使用下面公式:

其中Tui表示用户u对物品i产生行为的时间,可用任意随|Tui-Tvi|递减的且大于0的函数代替

找到和当前用户u兴趣相似的用户后,这组用户最近的兴趣相比之前的兴趣更加接近用户u当前的兴趣,可使用以下公式计算P(u,i)

   ,其中T0表示当前时间

<2>时间上下文相关的ItemCF算法:

通常用户在很短时间内喜欢的物品更有相似性,在计算物品相似度时加上时间因素,使用下面公式:

用户近期行为相比之前行为更能体现用户当前的兴趣,可使用以下公式计算P(u,i)

 

参考书籍:《推荐系统实战》、《Python机器学习算法》          

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。