协同过滤推荐算法

1.协同过滤简介及算法描述


      什么是协同过滤?

       协同过滤(Collaborative Filtering, 简称CF)是利用集体智慧的一个典型方法,首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。

       协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。当然其中有一个核心的问题:
     
如何确定一个用户是不是和你有相似的品位?

      如何将邻居们的喜好组织成一个排序的目录?

    

    算法描述
 

       协同过滤推荐算法是诞生最早,并且较为著名的推荐算法。主要的功能是预测和推荐。算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的商品。协同过滤推荐算法分为两类,基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborative filtering)。简单的说就是:人以类聚,物以群分。

      要实现协同过滤,需要三个步骤:
           1. 收集用户偏好
           2. 找到相似的用户或物品
           3. 计算推荐


   收集用户偏好
    

      如何收集用户的偏好信息是系统推荐效果最基础的决定因素。
     
      用户有很多方式向系统提供自己的偏好信息,不同的应用可能大不相同,比如:评分,投票,转发,保存书签,购买,点击流,页面停留时间等等。
收集好用户的行为数据后通过处理,得到了一张二维表,其中一维是用户列表,另一维是商品列表,值是用户对商品的喜好。以电影推荐为例,如下表
                    

     找到相似的用户或物品
     
     对用户行为进行分析得到用户喜好后,我们可以根据用户喜好计算相似用户和物品。
常用的相似度计算方法:
      (1)欧几里得距离
                           

                 
        欧几里得距离非常直观,相当于求距离。两用户越相邻距离越小,我们希望得到的是用户越相邻,相似度越大,因此对结果加1再求倒数,加1是为了避免两点重合距离为0的情况

       (2)皮尔逊相关系数
               系数用来说明两个用户间联系的紧密程度
                     
       (3)余弦相似度
                        
2、基于用户的CF
        
        基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分。根据不同用户对相同商品或内容的态度和偏好程度计算用户之间的关系。在有相同喜好的用户间进行商品推荐。
       简单的说,就是如果A,B两个用户都购买了x,y,z三本图书,并且给出了5星的好评。那么A和B就属于同一类用户。可以将A看过的图书w也推荐给用户B

      基于用户的协同过滤算法主要包括两个步骤:
    (1)找到和目标用户兴趣相似的用户集合。
    (2)找到这个集合中用户喜欢的,且目标用户没有对其有过行为的物品推荐给目标用户。

    实例
                         
       5个用户分别对两件商品进行了评分。这里的分值可能表示真实的购买,也可以是用户对商品不同行为的量化指标。例如,浏览商品的次数,向朋友推荐商品,收藏,分享,或评论等等
       (1)用欧几里得距离公式计算,可得,用户A&C,用户A&D和用户C&D距离较近。同时用户B&E的距离也较为接近  
                           
 
       (2)皮尔逊相关度评价比欧几里德距离评价的计算要复杂一些,但对于评分数据不规范时,皮尔逊相关度评价能够给出更好的结果。
比如,A用户每次给出的分都比B用户高,即A给的分普遍较高,若用欧几里得距离计算,会判定A与B相似度较低,但皮尔逊相关系数可以修正这一点
      所以我们通过皮尔逊相关度评价对用户进行分组,并推荐商品
                   
      
       计算可得
                     
      用户A&B,C&D,C&E和D&E之间相似度较高。下一步,我们可以依照相似度对用户进行商品推荐
     
      为相似的用户提供推荐物品
     
      当对用户C推荐商品时,检查之前的相似度列表,发现用户C和用户D和E的相似度较高。换句话说这三个用户拥有相同的偏好。因此,我们可以对用户C推荐D和E的商品。

      但我们不能直接推荐前面商品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),在一些需要用户给予评分的推荐系统中,则要代入用户评分

       

       假设我们要给 A 推荐物品,选取 K = 3 个相似用户,相似用户则是:B、C、D,那么他们喜欢过并且 A 没有喜欢过的物品有:c、e,那么分别计算 p(A, c) 和 p(A, e):
       
                           
        用户 A 对 c 和 e 的喜欢程度可能是一样的,在真实的推荐系统中,只要按得分排序,取前几个物品就可以了

3、基于物品的CF

       基于物品的协同过滤算法,将商品和用户互换,通过计算不同用户对不同物品的评分(物品对用户的适应度)获得物品间的关系。基于物品间的关系对用户进行相似物品的推荐。
     
       简单来说就是如果用户A同时购买了商品1和商品2,那么说明商品1和商品2的相关度较高。当用户B也购买了商品1时,可以推断他也有购买商品2的需求
     
       基于物品的协同过滤算法主要分为两步:
   (1)计算物品之间的相似度
   (2)根据物品的相似度和用户的历史行为给用户生成推荐列表

      实例
                 
         
         在这个表格中,将用户和商品的位置进行了互换,通过两个用户的评分来获得5件商品之间的相似度情况
   
        (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的兴趣

         

         假设某个用户喜欢物品a,b和c,对其兴趣度分别为1,2,2. 那么物品d和e的预测兴趣度分别为

                           

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 总是倾向于推荐热门的


     实例      

     首先,假设每个用户兴趣爱好都是广泛的,喜欢好几个领域的东西,有一个主要的领域,对这个领域会比其他领域更加关心。 给定一个用户,假设他喜欢3 个领域A、B、C,A 是他喜欢的主要领域
   
     如果用User CF, 它会将A,B,C 三个领域中比较热门的东西推荐给用户;而用ItemCF,它会基本上只推荐A 领域的东西给用户,对这个用户而言,显然多样性不足。但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的覆盖率会比较好
    
     因此,可以看出两种推荐都有其合理性,但都不是最好的选择。其实对这类系统的最好选择是结合User CF 和Item CF,如果系统给这个用户推荐30 个物品,既不是每个领域挑选10 个最热门的给他,也不推荐30 个A 领域的给他,而是比如推荐15 个A 领域的给他,剩下的15 个从B,C 中选择。
    
     结合的基本原则就是当采用Item CF 导致系统对个人推荐的多样性不足时,我们通过加入User CF 增加个人推荐的多样性,从而提高精度,而当采用User CF使系统整体多CF样性不足时,我们可以通过加入Item CF 增加整体的多样性,同样可以提高推荐的精度


 


              

(注:参考蓝鲸的网站分析笔记:协同过滤推荐算法的原理及实现;samjustin:基于用户的协同过滤推荐算法原理和实现 ;

moverzp:基于物品的协同过滤算法:理论说明,代码实现及应用)                   

              

       





  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值