推荐系统实战第一部分 协同过滤

1.协同过滤

1.1基于用户的协同过滤算法

包含两个步骤:
a. 计算用户之间的相似度:找到和目标用户兴趣相似的用户集合。
b. 根据用户相似度及用户对物品的评价为物品打分:找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

Step1: 计算用户相似度
根据协同过滤算法的定义,这里主要是利用用户行为的相似度来计算兴趣的相似度。给定用户u和用户v,令N(u)和N(v)分别表示用户u和用户v曾经有过正反馈的物品集合,则有如下三种方式计算相似度:

Jaccard公式

余弦相似度(UserCF算法)

改进的余弦相似度(UserIIF算法)

在UserIIF算法中,N(i) N(i)N(i)是物品i的热度,可见其对热门物品进行了惩罚,因为两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。

这里要强调一个工程实现上的Trick。在计算用户行为之间的相似度时,如果按照定义实现的话,需要对两两用户的行为集合进行统计,这样的时间复杂度为O(∣U∣∗∣U∣) ,但用户行为往往是十分稀疏的,很多用户之间的行为并没有交集,导致时间浪费在这些不必要的计算上。这时就可以建立Item-User的倒排表,这样在同一个Item下面的User两两之间一定是在这个Item上有交集的,所以只需要遍历所有的Item,对其下所有的User两两进行统计即可,这样可以极大降低时间复杂度。

Step2:为物品打分

在统计完用户之间的相似度之后,就可以利用这种用户相似度以及用户对物品的评价为物品打分。其公式如下:

在实现的时候,往往会取一个较小的K值,先召回一批物品,然后为这些物品中没出现在目标用户中的物品利用上述公式进行打分。

1.2 基于物品的协同过滤算法

与基于用户的协同过滤算法一样,基于物品的协同过滤算法也是基于邻域的一种做法。它也可以分为两步:

a. 计算物品之间的相似度。
b. 根据物品的相似度和用户的历史行为为用户生成推荐列表。

Step1: 计算物品相似度
计算物品相似度主要还是利用用户的行为数据,即比较对两个物品有过正反馈的用户集合的相似性。令N(i)为喜欢物品i的用户集合,则有如下几种相似度计算方法:

购买了该商品的用户也经常购买的其他商品
 

 余弦相似度(ItemCF算法)

上面的公式在计算的时候会导致物品与热门物品的相似度都很高,因此可以加上物品j的热度惩罚项,变成了如下的余弦相似度的形式:

 改进的余弦相似度(ItemIUF算法) 

与UserIIF算法类似,这里也对热门用户进行了惩罚,即活跃用户对物品相似度的贡献应该小于不活跃的用户。

Step2:为物品打分 

在统计完物品之间的相似度之后,就可以利用这种物品相似度以及用户对历史物品的评价为物品打分。其公式如下:

 

1.3 基于图的模型 

用户的行为(User, Item)是可以表示为二分图的,比如下图:

那么任务就变成了在二分图上为用户进行个性化推荐,即给用户u推荐物品的任务可以转化为度量用户顶点vu和与vu没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。

正常来说,相关性高的一对节点之间一般具有如下特征:

1.两个顶点之间有很多路径相连;
2.连接两个顶点之间的路径长度都比较短;
3.连接两个顶点之间的路径不会经过出度比较大的顶点。


基于上面这三个主要因素,可以用PersonalRank算法进行图上的随机游走推荐,其原理为:要给用户u进行个性化推荐,可以从用户u对应的节点vu开始在用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概率α决定是继续游走,还是停止这次游走并从vu 节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。

表述为递推公式如下:

1.4 UserCF和ItemCF的综合比较 

1.UserCF比较古老,而ItemCF则相对较新。
2.UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,而ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。从这个算法的原理可以看到,UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。
3.UserCF比较适合用于新闻推荐等热门程度和实时性较强的场景。比如一个人看新闻不可能每天只看和之前看的相关的那些,更多的是看今天有哪些新的热门的。从原理上讲,UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻,这样在抓住热点和时效性的同时,保证了一定程度的个性化。从技术角度讲,UserCF主要是维护用户相似度表,在这种场景下,物品的更新速度远超用户,所以维护物品相似度表难度和成本都较高。
4.ItemCF则适用于图书、电商、电影等场景。首先这些场景中用户的兴趣是比较固定和长久的,而且一般物品更新的速度不会特别快。

猜你喜欢

转载自blog.csdn.net/qq_32146369/article/details/106723862
今日推荐