当前位置: 首页 > 工具软件 > cf > 使用案例 >

推荐系统学习(二)--UserCF与ItemCF推荐算法

訾渝
2023-12-01

基于近邻的推荐算法

基于近邻的推荐算法是比较基础的算法,应用较为广泛,这里的近邻算法指的是协同过滤算法。包含基于用户的协同过滤算法(UserCF)基于物品的协同过滤算法(ItemCF)

协同过滤的核心思想就是基于相似性度量。

UserCF算法原理

核心思想:先找到相似用户,再找到他们喜欢的物品。
给用户推荐 “和他兴趣相投的用户” 喜欢的物品。

1. 构建用户物品评分表

这里以用户A、B、C、D对五个物品a、b、c、d、e的评分情况建立一张表:

用户物品a物品b物品c物品d物品e
A3.04.003.50
B4.004.503.5
C03.5003
D0403.53

2. 相似度度量

采用余弦相似度衡量用户之间的相似度,计算公式如下:

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)
上述公式中,u、v分别代表两个用户,N(u)表示用户u有过评分的物品集合。
下面计算用户C与其他用户的相似度:
W C A = ∣ { b , e } ∩ { a , b , d } ∣ ∣ { b , e } ∣ ∗ ∣ { a , b , d } = 1 6 W_{CA}=\frac{|\{b,e\}\cap \{a,b,d\}|}{\sqrt{|\{b,e\}|*|\{a,b,d\}}}=\frac{1}{\sqrt{6}} WCA={b,e}{a,b,d} {b,e}{a,b,d}=6 1
W C B = ∣ { b , e } ∩ { a , c , e } ∣ ∣ { b , e } ∣ ∗ ∣ { a , c , e } = 1 6 W_{CB}=\frac{|\{b,e\}\cap \{a,c,e\}|}{\sqrt{|\{b,e\}|*|\{a,c,e\}}}=\frac{1}{\sqrt{6}} WCB={b,e}{a,c,e} {b,e}{a,c,e}=6 1
W C D = ∣ { b , e } ∩ { b , d , e } ∣ ∣ { b , e } ∣ ∗ ∣ { b , d , e } = 2 6 W_{CD}=\frac{|\{b,e\}\cap \{b,d,e\}|}{\sqrt{|\{b,e\}|*|\{b,d,e\}}}=\frac{2}{\sqrt{6}} WCD={b,e}{b,d,e} {b,e}{b,d,e}=6 2
所以我们得出D用户与C用户的相似度最大

3. 计算推荐结果

用户C进行评分的物品是b和c。那么接下来计算用户C对物品a、c、d的偏好程度:
P ( C , a ) = w C A ∗ 3.0 + W C B ∗ 4.0 + W C D ∗ 0 = 2.858 P(C,a)=w_{CA}*3.0+W_{CB}*4.0+W_{CD}*0=2.858 P(C,a)=wCA3.0+WCB4.0+WCD0=2.858
P ( C , c ) = w C A ∗ 0 + W C B ∗ 4.5 + W C D ∗ 0 = 1.837 P(C,c)=w_{CA}*0+W_{CB}*4.5+W_{CD}*0=1.837 P(C,c)=wCA0+WCB4.5+WCD0=1.837
P ( C , d ) = w C A ∗ 3.5 + W C B ∗ 0 + W C D ∗ 3.5 = 4.287 P(C,d)=w_{CA}*3.5+W_{CB}*0+W_{CD}*3.5=4.287 P(C,d)=wCA3.5+WCB0+WCD3.5=4.287
根据偏好程度给用户C推荐物品的顺序依次为d>a>c。

4. 惩罚热门物品

对于热门物品比如《高等数学》,并不能说明两个用户的喜好相似,所以要对热门物品进行一定的惩罚。可以用如下的公式进行计算:
W u v = ∑ i ∈ N ( u ) ∩ N ( v ) 1 l g ( 1 + N ( i ) ) ∣ N ( u ) ∣ ∗ ∣ N ( v ) ∣ W_{uv}=\frac{\sum_{i\in N(u)\cap N(v)} \frac{1}{lg(1+N(i))}} {\sqrt{|N(u)|*|N(v)|}} Wuv=N(u)N(v) iN(u)N(v)lg(1+N(i))1
其中,N(i)是对物品i有过评分行为的用户集合。

ItemCF算法原理

核心思想:先找到用户喜欢的物品,再找到这些物品的相似物品。
给用户推荐他之前喜欢物品的相似物品。

1. 计算物品之间的相似度

1. 建立用户物品倒排表

仍采用上例中的数据,首先建立用户物品倒排表
A-a-b-d
B-a-c-e
C-b-e
D-b-d-e

2. 构建同现矩阵

同现矩阵表示同时喜欢两个物品的用户数,根据用户物品倒排表计算得到:

abcde
a01111
b10022
c10001
d12001
e12110

采用如下公式计算item之间的相似度:
w i j = ∣ N ( i ) ∩ N ( j ) ∣ N ( i ) w_{ij}=\frac{|N(i)\cap N(j)|}{N(i)} wij=N(i)N(i)N(j)
分母中N(i)是喜欢物品i的用户数,分子表示同时喜欢物品i和j的用户数。
根据上述公式可以计算得到物品之间的相似度矩阵,这里略去。

3. 构建评分矩阵

用户C的评分矩阵:

物品评分
a0
b3.5
c0
d0
e3

2. 计算推荐结果

构建相似度矩阵之后,ItemCF通过如下公式计算用户u对物品i的兴趣:
P ( u , i ) = ∑ j ∈ S ( i , K ) ∩ N ( u ) w i j r u j P_{(u,i)}=\sum_{j \in S(i,K)\cap N(u)}w_{ij}r_{uj} P(u,i)=jS(i,K)N(u)wijruj
N(u)是用户u喜欢的物品集合。
S(i,K)是和物品i最相似的K个物品集合。
w i j w_{ij} wij是物品i和j的相似度。$
r_{uj}$使用户u对物品j的兴趣,若用户u对物品j有过行为,则令其为1。

推荐结果为相似度矩阵和评分矩阵的乘积:

物品推荐评分
a3.25
b2.0
c3.0
d5.0
e2.33

那么除去b和e之外,为用户C推荐顺序为d>a>c。

UserCF与ItemCF的对比分析

  • 适用场景上当用户数量远远超过物品数量时,可以考虑ItemCF算法,例如购物网站和博客网站,其物品和博客数量一般相对稳定。当物品数量远超过用户数量时,可以采用UserCF算法,更适合新闻类和短视频类快消素材网站,因为其内容一般更新较快。
  • 推荐系统多样性上,从单用户多样性上考虑,ItemCF算法不如UserCF算法丰富,因为ItemCF推荐的是相似物品,覆盖面较小;而从系统多样性上考虑,ItemCF算法更能覆盖所有的物品。
  • 用户特点上,UserCF要求用户能够找到兴趣相同的邻居;而ItemCF则需要用户喜好的自相似度较大,即他自身的喜好是相似的。
 类似资料: