基于用户的协同过滤算法详解

0. 前言

  基于领域的推荐算法是推荐系统中最基本的算法,此类算法不仅在学术界得到了深入研究,而且在工业界也得到了广泛地应用。基于领域的推荐算法主要分为两大类:一类是基于用户的协同过滤算法(User Based Collaborative Filtering,UserCF);一类是基于物品的协同过滤算法(Item Based Collaborative Filtering ItemCF)。而本文就着重介绍基于用户的协同过滤算法。

  基于用户的协同过滤算法是推荐系统中最古老的算法,甚至可以这样说:UserCF的出现,标志着推荐系统的诞生。UserCF算法于1992年被提出,首次应用于邮件过滤系统。在此之后直到2000年该算法都是推荐系统领域中最著名的算法。

1. UserCF基本原理

  用最简单的一句话总结UserCF的基本原理,那就是:在一个在线推荐系统中,当用户A需要个性化推荐时,可以先找到和他有相似兴趣的其它用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A,这种方法称为基于用户的协同过滤算法。

  基于以上解释,我们知道UserCF主要包含两步:1)找到和目标用户相似的用户集合,即计算两个用户的兴趣相似度;2)找到这个集合中的用户喜欢的但是目标用户没见过的物品,把这样的物品集合推荐给用户。

1.1 相似性计算

  从上述介绍可知,UserCF主要包含两步。本节主要讲述第一步:如何找到并计算和目标用户相似的用户。本文假设以在线商品购买为例进行讲解。
  
  那么这里我们如何进行计算两个相似用户的相似度呢?很显然,我们需要利用用户购买行为来进行计算。这时候,我们如何计算两个用户u和v之间的相似性呢?
  
  于是我们有:对于用户u和v,令 N(u) 表示用户u购买过的商品, N(v) 表示用户v购买过的商品。那么我们通过如下的 Jaccard 公式计算出u和v之间的商品偏好相似度:

wuv=|N(u)N(v)||N(u)N(v)|Jaccard

  
wuv=|N(u)N(v)||N(u)||N(v)|

如下图所示,该图表示:

用户A购买过物品 {a,b,d}

用户B购买过物品 {a,c}

用户C购买过物品 {b,c}

用户D购买过物品 {c,d,e}


这里写图片描述

图1 用户行为记录

利用余弦相似度计算可得:

wAB=|{a,b,d}{a,c}||{a,b,c}||{a,c}|=16

wAC=|{a,b,d}{b,e}||{a,b,c}||{b,e}|=16

wAD=|{a,b,d}{c,d,e}||{a,b,d}||{c,d,e}|=16

  但是,需要注意的是,这种方法的时间复杂度是O(U^2),因为我们需要计算每一对用户之间的相似度,事实上,很多用户相互之间并没有对同样的物品产生过行为,所以很多时候当分子为0的时候没有必要再去计算分母,所以这里可以优化:即首先计算出|N(u) 并 N(v)| != 0 的用户对(u,v),然后对这种情况计算分母以得到两个用户的相似度。

针对此优化,需要2步:

  1. 建立物品到用户的倒查表T,表示该物品被哪些用户产生过行为;

  2. 根据倒查表T,建立用户相似度矩阵W:在T中,对于每一个物品i,设其对应的用户为j,k,在W中,更新相应的元素值,w[j][k]=w[j][k]+1,w[k][j]=w[k][j]+1,以此类推,扫描完倒查表T中的所有物品后,就可以得到最终的用户相似度矩阵W,这里的W是余弦相似度中的分子部分,然后将W除以分母可以得到最终的用户兴趣相似度。

这里写图片描述

图2 商品用户倒排表

2. UserCF算法实战

未完待续……




对机器学习和人工智能感兴趣,请扫码关注微信公众号!

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u013709270/article/details/78679732