(二)利用用户行为数据 -- 2 基于邻域的算法 (1)

2. 基于邻域的算法

基于邻域的算法分为两大类,一是基于用户的协同过滤算法,二是基于物品的协同过滤算法。


2.1 基于用户的协同过滤算法

2.1.1 基础算法

  • 基于用户的协同过滤算法
    当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。

主要包括两个步骤:
(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
其中,步骤(1)的关键就是计算两个用户的兴趣相似度。
这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。


兴趣相似度

给定用户 u u u和用户 v v v,令 N ( u ) N(u) N(u)表示用户 u u u曾经有过正反馈的物品集合,令 N ( v ) N(v) N(v)为用户 v v v曾经有过正反馈的物品集合。那么, 计算 u u u v v v的兴趣相似度,

可以通过的 J a c c a r d Jaccard Jaccard公式:

W u v = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( u ) ∪ N ( v ) ∣ W_{uv}=\frac {|N(u) \cap N(v)|}{|N(u) \cup N(v)|} Wuv=N(u)N(v)N(u)N(v)

或者通过余弦相似度:

W u v = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ W_{uv}=\frac {|N(u) \cap N(v)|}{\sqrt{|N(u)| |N(v)|}} Wuv=N(u)N(v) N(u)N(v)


以下图中的用户行为记录为例,UserCF计算用户兴趣相似度,展示如下:

在该例中,用户A对物品 a , b , d {a,b,d} abd有过行为,用户B对物品 a , c {a,c} ac有过行为,利用余弦相似度公式计算用户A和用户B的兴趣相似度为:

W a b = { a , b , d } ∩ { a , c } ∣ { a , b , d } ∣ ∣ { a , c } ∣ = 1 6 W_{ab}=\frac {\{a,b,d\} \cap \{a,c\}}{\sqrt {|\{a,b,d\}| |\{a,c\}|}}=\frac {1}{\sqrt{6}} Wab={abd}{ac} {abd}{ac}=6 1


若对两两用户都利用余弦相似度计算相似度,其时间复杂度是 O ( ∣ U ∣ ∗ ∣ U ∣ ) O(|U|*|U|) O(UU),这在用户数很大时非常耗时。
事实上,很多用户相互之间并没有对同样的物品产生过行为,即,很多时候 ∣ N ( u ) ∩ N ( v ) ∣ = 0 |N(u) \cap N(v)|=0 N(u)N(v)=0
因此,可以先计算出 ∣ N ( u ) ∩ N ( v ) ∣ ≠ 0 |N(u) \cap N(v)| \neq 0 N(u)N(v)=0的用户对 ( u , v ) (u, v) (u,v),然后再对这种情况除以分母 ∣ N ( u ) ∣ ∣ N ( v ) ∣ \sqrt{|N(u)| |N(v)|} N(u)N(v)


UserCF算法
  • 思想

可以建立物品到用户的倒查表,对于每个物品都保存对该物品产生过行为的用户列表。

令稀疏矩阵 C [ u ] [ v ] = ∣ N ( u ) ∩ N ( v ) ∣ C[u][v]=|N(u) \cap N(v)| C[u][v]=N(u)N(v),假设用户 u u u和用户 v v v同时属于倒查表中 K K K个物品对
应的用户列表,有 C [ u ] [ v ] = K C[u][v]=K C[u][v]=K

从而,可以扫描倒查表中每个物品对应的用户列表,将用户列表中的两两用户对应的 C [ u ] [ v ] C[u][v] C[u][v]加1,最终就可以得到所有用户之间不为0的 C [ u ] [ v ] C[u][v] C[u][v]


  • 步骤及示例

(1) 建立物品-用户的倒排表(即,对于每个物品都保存对该物品产生过行为的用户列表,如下图所示)。

(2) 建立一个4×4的用户相似度矩阵 W W W
对于物品 a a a,将 W [ A ] [ B ] W[A][B] W[A][B] W [ B ] [ A ] W[B][A] W[B][A]加1,以此类推。
扫描完所有物品后,可以得到最终的 W W W矩阵。此时, W W W是余弦相似度中的分子部分。

(3) 将 W W W除以分母进而得到最终的用户兴趣相似度。

(4) 计算用户 u u u对物品 i i i的感兴趣程度,公式如下:

p ( u , i ) = ∑ v ∈ S ( u , K ) ∩ N ( i ) w u v r v i p(u,i)=\sum_{v \in S(u,K) \cap N(i)}w_{uv}r_{vi} p(ui)=vS(uK)N(i)wuvrvi

其中, S ( u , K ) S(u,K) S(uK)包含和用户 u u u兴趣最接近的 K K K个用户, N ( i ) N(i) N(i)是对物品 i i i有过行为的用户集合, w u v w_{uv} wuv是用户 u u u和用户 v v v的兴趣相似度, r v i r_{vi} rvi代表用户 v v v对物品 i i i的兴趣。因为使用的是单一行为的隐反馈数据,所以所有的 r v i r_{vi} rvi=1。

(5) 给用户推荐和他兴趣最相似的 K K K个用户喜欢的物品。


结合上文中的示例,选取 K K K=3,用户A对物品 c c c e e e没有过行为,因此可以把这两个物品推荐给用户A。

根据UserCF算法, 用户A对物品c的兴趣是:

p ( A , c ) = W A B + W A D = 0.7416 p(A, c) =W_{AB}+W_{AD}=0. 7416 p(A,c)=WAB+WAD=0.7416


  • 参数

参数 K K K是UserCF的一个重要参数,它的调整对推荐算法的各种指标都会产生一定的影响。

(1) 精确率和召回率
推荐系统的精度指标(精确率和召回率)并不和参数 K K K成线性关系。
选择合适的K对于获得高的推荐系统精度比较重要。
推荐结果的精度对K也不是特别敏感,只要选在一定的区域内,就可以获得不错的精度。

(2) 流行度
K K K越大则UserCF推荐结果越热门。

(3) 覆盖率
K K K越大则UserCF推荐结果的覆盖率越低。



2.1.2 用户相似度计算的改进

余弦相似度公式,是计算用户兴趣相似度最简单的公式。本节将讨论如何改进该公式,来提高UserCF的推荐性能。

思想:两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。

根据用户行为计算用户的兴趣相似度,改进公式如下:

W u v = ∑ i ∈   N ( u ) ∩ N ( v ) 1 l o g 1 + ∣ N ( i ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ W_{uv}=\frac {\sum_{i \in \,N(u) \cap N(v)} \frac {1}{log1+|N(i)|}}{\sqrt{|N(u)| |N(v)|}} Wuv=N(u)N(v) iN(u)N(v)log1+N(i)1

由此可见,该公式通过 1 l o g 1 + ∣ N ( i ) ∣ \frac {1}{log1+|N(i)|} log1+N(i)1惩罚了用户 u u u和用户 v v v共同兴趣列表中热门物品对他们相似度的影响。

实验结果表名,在计算用户兴趣相似度时考虑物品的流行度,对提升推荐结果的质量确实有帮助。



参考

《推荐系统实践》—— 2.4.1 基于用户的协同过滤算法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值