1.协同过滤简介及算法描述
什么是协同过滤?
协同过滤(Collaborative Filtering, 简称CF)是利用集体智慧的一个典型方法,首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。当然其中有一个核心的问题:
如何确定一个用户是不是和你有相似的品位?
如何将邻居们的喜好组织成一个排序的目录?
算法描述
协同过滤推荐算法是诞生最早,并且较为著名的推荐算法。主要的功能是预测和推荐。算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的商品。协同过滤推荐算法分为两类,基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborative filtering)。简单的说就是:人以类聚,物以群分。
要实现协同过滤,需要三个步骤:
1. 收集用户偏好
2. 找到相似的用户或物品
3. 计算推荐
收集用户偏好
系数用来说明两个用户间联系的紧密程度
简单的说,就是如果A,B两个用户都购买了x,y,z三本图书,并且给出了5星的好评。那么A和B就属于同一类用户。可以将A看过的图书w也推荐给用户B
基于用户的协同过滤算法主要包括两个步骤:
(1)找到和目标用户兴趣相似的用户集合。
(2)找到这个集合中用户喜欢的,且目标用户没有对其有过行为的物品推荐给目标用户。
但我们不能直接推荐前面商品1--商品5的商品。因为这些商品用户C已经浏览或者购买过了,不能重复推荐。因此我们要推荐用户C还没有浏览或购买过的商品。
提取用户D和用户E评价过的另外5件商品A—商品F的商品。并对不同商品的评分进行相似度加权
最后标出的数据即为用户C对没有购买或浏览过的商品A--F的预测评分
总计值为所有购买该商品的用户的打分乘以与用户C的相似度的和
按所得结果对5件商品进行排序,然后推荐给用户C,这样用户C就获得了与他偏好相似的用户D和E评价的商品
(3)余弦相似度
假设目前共有4个用户: A、B、C、D;共有5个物品:a、b、c、d、e。用户与物品的关系(用户喜欢物品)如下图所示
为方便计算,通常先建立物品用户的倒查表,如下图
然后对于每个物品,喜欢他的用户,两两之间加1。例如喜欢物品 a 的用户有 A 和 B,那么在矩阵中加1,结果如下图
上面的矩阵仅仅代表的是公式的分子部分,进行进一步计算:
到此就可以很直观的找到与目标用户兴趣较相似的用户
为相似的用户提供推荐物品
从矩阵中找出与目标用户 u 最相似的 K 个用户,找出K个用户喜欢的物品并去除 u 已经喜欢的物品。对于每个候选物品 i ,用户 u 对它感兴趣的程度用如下公式计算:
其中,S(u,k)表示和用户u兴趣最接近的K个用户,N(i)表示对物品i有过行为的用户集合,Wuv表示用户u和用户v的兴趣相似度, rvi 表示用户v对物品i的兴趣(这里简化,所有的rvi都等于1),在一些需要用户给予评分的推荐系统中,则要代入用户评分
(1)计算物品之间的相似度
(2)根据物品的相似度和用户的历史行为给用户生成推荐列表
(1)用欧几里得距离公式计算,可得商品1,3,4在用户A和B中有着近似的评分,说明这三件商品的相似度较高。而商品5和2则在另一个群体中。
(2)使用皮尔逊相关度评价来计算
由公式计算相关系数得下表
可以发现,商品1&2,商品3&4,商品3&5和商品4&5相似度较高
推荐物品
当需要对用户C基于商品3推荐商品时,需要一张新的商品与已有商品间的相似度列表,如下左图。 在前面的相似度计算中,商品3与商品4和商品5相似度较高,因此我们计算并获得了商品4,5与其他商品的相似度列表,如下右图
得出用户C已经购买过的商品4,5与新商品A,B,C直接的相似程度,将用户C对商品4,5的评分作为权重,对商品A,B,C进行加权排序
(3)余弦相似度
有A、B、C、D、E 5个用户, a、b、c、d、e 5样商品
建立相似度矩阵C
所得矩阵C表示同时喜欢两个物品的用户数,代表公式的分子部分
矩阵N代表喜欢某物品的用户数
由余弦公式可计算出物品间的相似度如下表
推荐物品
ItemCF通过如下公式计算用户u对一个物品j的兴趣:
其中,Puj表示用户u对物品j的兴趣,N(u)表示用户喜欢的物品集合(i是该用户喜欢的某一个物品),S(i,k)表示和物品i最相似的K个物品集合(j是这个集合中的某一个物品),Wji表示物品j和物品i的相似度,rui表示用户u对物品i的兴趣
4、User CF 与 Item CF 对比
1)用户对推荐算法的适应
2)用户对推荐算法的适应度
对于User CF,推荐的原则是假设用户会喜欢那些和他有相同喜好的用户喜欢的东西,但如果一个用户没有相同喜好的朋友,那User CF 的算法的效果就会很差,所以一个用户对CF 算法的适应度是和他有多少共同喜好用户成正比的
Item CF算法的基本假设,是用户会喜欢和他以前喜欢的东西相似的东西,如果他喜欢的东西都是比较像的即符合Item CF 方法的基本假设,对Item CF 的适应度就比较好;反之,这个用户的喜好习惯并不满足Item CF 方法的基本假设,那么对于这种用户,Item CF 方法做出好的推荐的可能性非常低
3)推荐的多样性
(1)从单个用户的角度度量,就是说给定一个用户,查看系统给出的推荐列表是否多样,也就是要比较推荐列表中的物品之间两两的相似度,不难想到,对这种度量方法,Item CF 的多样性显然不如User CF 的好,因为Item CF 的推荐就是和以前看的东西最相似
(2)考虑系统的多样性,也被称为覆盖率(Coverage),它是指一个推荐系统是否能够提供给所有用户丰富的选择。在这种指标下,Item CF 的多样性要远远好于User CF, 因为User CF 总是倾向于推荐热门的
实例
(注:参考蓝鲸的网站分析笔记:协同过滤推荐算法的原理及实现;samjustin:基于用户的协同过滤推荐算法原理和实现 ;
moverzp:基于物品的协同过滤算法:理论说明,代码实现及应用)