经典推荐算法-协同过滤

协同过滤算法

    • 1.传统推荐模型的演化关系图
    • 2. 协同过滤
      • 2.1 什么是协同过滤
      • 2.2 计算用户相似度
      • 2.3 最终结果排序
      • 2.4 存在缺点
      • 2.5 ItemCF
      • 2.6 各自的应用场景

1.传统推荐模型的演化关系图

经典推荐算法-协同过滤_第1张图片
传统推荐模型发展脉络由以下几部分组成:

  • 协同过滤算法族
  • 逻辑回归模型族
  • 因子分解机模型族
  • 组合模型

2. 协同过滤

2.1 什么是协同过滤

协同过滤算法,是一种完全依赖用户和物品之间行为关系的推荐算法。从它的名字“协同过滤”中,也可以窥探到它背后的原理,就是 “协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。
经典推荐算法-协同过滤_第2张图片
电商网站的商品库里一共有 4 件商品:一个游戏机、一本小说、一本杂志,以及一台电视机。假设,现在有一名用户 X 访问了这个电商网站,电商网站的推荐系统需要决定是否推荐电视机给用户 X。

为了进行这项预测,推荐系统可以利用的数据有用户 X 对其他商品的历史评价数据,以及其他用户对这些商品的历史评价数据。

将有向图转换成矩阵的形式。这个矩阵表示了物品共同出现的情况,因此被称为“共现矩阵”。其中,用户作为矩阵行坐标,物品作为列坐标,我们再把“点赞”和“踩”的用户行为数据转换为矩阵中相应的元素值。

生成共现矩阵之后,推荐问题就转换成了预测矩阵中问号元素(图 1(d) 所示)的值的问题。由于在“协同”过滤算法中,推荐的原理是让用户考虑与自己兴趣相似用户的意见。因此,我们预测的第一步就是找到与用户 X 兴趣最相似的 n(Top n 用户,这里的 n 是一个超参数)个用户,然后综合相似用户对“电视机”的评价,得出用户 X 对“电视机”评价的预测。

2.2 计算用户相似度

在共现矩阵中,每个用户对应的行向量就可以当作一个用户的 Embedding 向量。

常见相似度计算方法:

  • 欧氏距离
    d ( x , y ) = ( x i − y i ) 2 d(x,y)=\sqrt{(x_i-y_i)^2} d(x,y)=(xiyi)2
    s i m ( x , y ) = 1 1 + d ( x , y ) sim(x,y)= {1 \over {1+d(x,y)}} sim(x,y)=1+d(x,y)1

  • 余弦相似度
    s i m ( i , j ) = c o s ( i , j ) = i ⋅ j ∣ ∣ i ∣ ∣ ⋅ ∣ ∣ j ∣ ∣ sim(i,j)=cos(i,j)={i \cdot j\over ||i|| \cdot ||j|| } sim(i,j)=cos(i,j)=ijij

  • 皮尔逊相似系数
    皮尔逊相关系数通过使用用户平均分对各独立评分进行修正,减小了用户评分偏置的影响。
    s i m ( i , j ) = ∑ p ∈ P ( R i , p − R ‾ i ) ( R j , p − R ‾ j ) ∑ p ∈ P ( R i , p − R ‾ i ) 2 ∑ p ∈ P ( R j , p − R ‾ j ) 2 sim(i,j)={\sum_{p \in P}(R_{i,p}-\overline R_i)(R_{j,p}-\overline R_j) \over \sqrt {\sum_{p \in P}(R_{i,p}-\overline R_i)^2}\sqrt {\sum_{p \in P}(R_{j,p}-\overline R_j)^2}} sim(i,j)=pP(Ri,pRi)2 pP(Rj,pRj)2 pP(Ri,pRi)(Rj,pRj)

  • 改进皮尔逊相关系数
    引入物品平均分的方式,减少物品评分偏置对结果的影响。
    s i m ( i , j ) = ∑ p ∈ P ( R i , p − R ‾ p ) ( R j , p − R ‾ p ) ∑ p ∈ P ( R i , p − R ‾ p ) 2 ∑ p ∈ P ( R j , p − R ‾ p ) 2 sim(i,j)={\sum_{p \in P}(R_{i,p}-\overline R_p)(R_{j,p}-\overline R_p) \over \sqrt {\sum_{p \in P}(R_{i,p}-\overline R_p)^2}\sqrt {\sum_{p \in P}(R_{j,p}-\overline R_p)^2}} sim(i,j)=pP(Ri,pRp)2 pP(Rj,pRp)2 pP(Ri,pRp)(Rj,pRp)

  • Jaccard相似度
    J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ = ∣ A ∩ B ∣ ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ J(A,B)= {|A \cap B| \over |A \cup B|}= {|A \cap B| \over |A| + |B|-|A \cap B|} J(A,B)=ABAB=A+BABAB
    适用于布尔值向量。

2.3 最终结果排序

在获得 Top n 个相似用户之后,利用 Top n 用户生成最终的用户 u 对物品 p 的评分。假设“目标用户与其相似用户的喜好是相似的”,根据这个假设,可以利用相似用户的已有评价对目标用户的偏好进行预测。最常用的方式是,利用用户相似度和相似用户评价的加权平均值,来获得目标用户的评价预测,公式如下所示。
R u , p = ∑ s ∈ S ( w u , s ⋅ R s , p ) ∑ s ∈ S w u , s R_{u,p} = {\sum_{s\in S}(w_{u,s} \cdot R_{s,p}) \over \sum_{s\in S}w_{u,s}} Ru,p=sSwu,ssS(wu,sRs,p)

2.4 存在缺点

  • 互联网场景下,用户数往往大于物品数,UserCF需要维护用户相似度矩阵以便快速找到Top n相似用户。使得空间复杂度迅速增长,使得在线存储系统难以承受扩展速度。
  • 用户历史数据往往很稀疏,找到相似用户的准确度非常低。

2.5 ItemCF

基于物品相似度进行推荐的协同过滤算法。通过计算共现矩阵中物品列向量的相似度得到物品之间的相似矩阵,再找到用户的历史正反馈物品的相似物品进行进一步排序和推荐。
具体推荐步骤:

  • 基于历史数据构建m*n的共现矩阵
  • 计算共现矩阵两两列向量间的相似度,构建n*n的物品相似度矩阵。
  • 获得用户历史行为数据中的正反馈物品列表
  • 利用物品相似度矩阵,针对目标用户历史行为中的正反馈物品,找到相似的Top K个物品,组成相似物品集合。
  • 对相似物品集合中的物品,利用相似度分值进行排序,生成最终的推荐列表。

2.6 各自的应用场景

  • UserCF适用于发现热点,以及跟踪热点的趋势
  • ItemCF更适用于兴趣变化较为稳定的应用。

你可能感兴趣的:(#,推荐算法,协同过滤算法,推荐算法)