协同过滤
2022-11-08

 

相似度的度量方法

度量的基本要求

相似性的度量方法必须满足拓扑学中的度量空间的基本条件。假设d是度量空间M上的度量,x,yMd(x,y)M,那么d满足:

  1. 非负性

    d(x,y)0,x=y时取等号

  2. 对称性

    d(x,y)=d(y,x)

  3. 三角不等式

    d(x,z)d(x,y)+d(y,z)

皮尔逊相关系数

(1)sim(i,j)=pP(Ri,pR¯i)(Rj,pR¯j)pP(Ri,pR¯i)2pP(Rj,pR¯j)2Ri,pipRj,pjpR¯iiR¯jjP

余弦相似度

(2)cos(i,j)=ijijij

协同过滤

简介

协同过滤(Collaborative Filtering,CF)推荐算法是通过在用户的行为中寻找特定的模式,并通过该模式为用户产生有效推荐的算法。该算法依赖系统中用户的行为数据,通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的物品。

下图为模拟数据,后续将根据该数据进行模拟计算:

data

 

基于物品的协同过滤

根据物品相似度进行计算。例如,当用户购买了一个物品后,向其推荐该物品的相似物品。

如下图示例:

基于物品

因为物品A和物品C都被两个用户(用户A和用户B)购买过,因此这两个物品比较相似。对用户C,因为购买过物品A,此时可以向其推荐物品C。

 

基于用户的协同过滤

根据用户行为(如购买记录、电影评分等),找到行为相似的客户,然后对于当前用户,利用其相似用户的购买行为进行推荐。

如下图示例:

基于用户

用户A购买了{物品A、物品C},用户C购买了{物品A、物品C、物品D},两个用户比较类似。用户A没有购买物品D,因此可以向其推荐。

 

计算过程

相关符号定义如下:

  1. m:用户个数
  2. n:物品个数
  3. Xm×n:用户-物品评分矩阵,如果数值为0,代表没有评分(例如,没有购买过该物品)
  4. Yn×m=Xm×nT:物品-用户”评分”矩阵
  5. In×n:物品相似度矩阵
  6. Um×m:用户相似度矩阵
  7. Pm×n:用户-物品推荐矩阵

以下计算基于余弦相似度进行计算。

 

基于物品的协同过滤

  1. 物品相似度矩阵

    (3)In×n=YYT||Y||2||YT||2||Y||2=np.linalg.norm(Y,ord=2,axis=1).reshape(n,1)#1:||YT||2=np.linalg.norm(YT,ord=2,axis=0).reshape(1,n)#0:

     

  2. 用户物品推荐矩阵P

    对给定的用户i和物品j,通过【物品 相似物品 相似物品对用户的”评分” 物品对用户的评分】计算物品j对用户用户i的”评分”。本质上是参考了所有物品对用户i的”评分”,结合物品相似度(相当于权重),计算出物品j对用户i的评分。计算示例如下:

    物品-用户评分

公式如下:

(4)Pn×m=IY||I||1Pm×n=PT||I||1=np.linalg.norm(I,ord=1,axis=1).reshape(n,1)

 

基于用户的协同过滤

通俗解释:如果想判断阿Q对樱桃键盘的喜爱程度,首先计算未庄所有人对樱桃键盘的喜爱程度,其次计算未庄人与阿Q的相似度,最后,将相似度作为权重,与喜爱程度相乘,得到阿Q对樱桃键盘的喜爱程度。

 

  1. 用户相似度矩阵U

    (5)Um×m=XXT||X||2||XT||2||X||2=np.linalg.norm(X,ord=2,axis=1).reshape(m,1)#1:||XT||2=np.linalg.norm(XT,ord=2,axis=0).reshape(1,m)#0:

     

  2. 用户物品推荐矩阵P

    对给定的用户i和物品j,通过【用户 相似用户 相似用户对物品的评分 用户对物品的评分】计算用户i对物品j的评分。本质上是参考了所有用户对物品j的评分,结合用户相似度(相当于权重),计算出用户i对物品j的评分。计算示例如下:

    用户-物品评分

    公式如下:

    (6)Pm×n=UX||U||1||U||1=np.linalg.norm(U,ord=1,axis=1).reshape(m,1)

     

示例代码

协同过滤示例代码