你的位置:首页 > 数据库

[数据库]基于物品的协同过滤


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

基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。简单来讲就是:给用户推荐和他之前喜欢的物品相似的物品。

用例说明:

注:基于物品的协同过滤算法,是目前商用最广泛的推荐算法。

刚开始看这个用例,感觉还是基于用户进行的推荐,用户A,B,C都喜欢物品a,并且用户A,B喜欢物品c,然后就将物品c推荐给用户C。

再回过头来看看基于物品的协同过滤的概念:给用户推荐和他之前喜欢的物品相似的物品。按我的理解和其他用户的喜好并没有什么直接关系;比如用户C喜欢帽子a,再给他推荐个类似的商品帽子b就可以了。

比如:物品a为啤酒,物品c为尿布,符合图例,则向用户C推荐的物品为尿布,因为物品a和物品c相似?,所以就向用户C推荐了此商品。显然这里的相似并不是决对的相同种类或类型的物品。

 

那物品的相似是怎么计算出来的哪?

Iterm-based的基本思想是预先根据所有用户的历史偏好数据计算物品之间的相似性,然后把与用户喜欢的物品相类似的物品推荐给用户。

这样解释就可以很好的说明上面的疑问了。

当然也可以直接针对不同物品建立相似性关系。计算出不同物品的相似度。

 

同现矩阵(Co-occurrence Matrix): 反应物品关联度的矩阵

生成同现矩阵

数据:user,item,grade

1,101,5.01,102,3.01,103,2.52,101,2.02,102,2.52,103,5.02,104,2.03,101,2.03,104,4.03,105,4.53,107,5.04,101,5.04,103,3.04,104,4.54,106,4.05,101,4.05,102,3.05,103,2.05,104,4.05,105,3.55,106,4.0

用户1的三个item 101,102,103形成9种组合,相应位置加1.

   [101] [102] [103] [101]  1   1   1   [102]  1   1   1   [103]  1   1   1   

最终结果:
   [101] [102] [103] [104] [105] [106] [107][101]  5   3   4   4   2   2   1[102]  3   3   3   2   1   1   0[103]  4   3   4   3   1   2   0[104]  4   2   3   4   2   2   1[105]  2   1   1   2   2   1   1[106]  2   1   2   2   1   2   0[107]  1   0   0   1   1   0   1

 

下面内容摘自一论坛:

再谈谈Co-occurrence Matrix(同显矩阵)和User Preference Vector(用户评分向量)相乘得到的这个Recommended Vector(推荐向量)的意义


 

第一次听完理论直接上这两个东西相乘实现Item Based Cooperative Filtering(基于物品的协同过滤),一下子真没反应过来,下面就个人的理解通俗的解释一下:
 
ItemBased:基于物品的(区分于基于用户的)体现在同现矩阵,把所有用户对物品打过分的记录都拿过来,形成一个个反应物品关联度的矩阵Co-occurrence Matrix,下面简称C矩阵。
为什么乘以User Preference Vector用户评分向量就是Recommended Vector(推荐向量),这个推荐向量又要怎么用呢?
还是用R的第三项24.5来做一下解释,
 
R3的解释:对于用户U商品103的可推荐度。
这点很重要,理解这点就是要知道我们这一系列算法过程在做什么(What)。

 

我把R3也就是R103的计算用公式表示如下:

R3怎么出来的

 

从上面可以看到C103i*Ui就是Ui代表用户对i的喜爱度,C103i代表i和103同时出现的次数,i物品和103同时出现得越多C103i越大,用户对i的喜爱度值越大Ui越大,自然R103值就越大,越值得推荐103。

R向量里面的R101, R104,R105和R107这三项值很大,但是我们可以忽略它们应用用户已经对它们打过分,也就是已经看过这些电影了,可以不比推荐了,对于用户没有看过的电影的几项里面选出最大(或者TopN)对应的电影推荐就可以了,

 

上面R102,R103,R106里面选一个最大值103,103就是可以推荐的商品了