基于物品的协同过滤
基于物品的协同过滤算法的核心思想就是:给用户推荐那些和他们之前喜欢的物品相似的物品。
ItemCF算法并不是直接根据物品本身的属性来计算相似度,而是通过分析用户的行为来计算物品之间的相似度。
对于推荐阶段,可分为以下几步:
- 寻找与被推荐用户喜爱物品集最相似的N个物品
- 计算用户对这N个物品的感兴趣程度列表并逆序排列
考虑以下情形:
用户 | 购买商品 |
---|---|
A | {a,b,d} |
B | {c,d,e} |
C | {a,b,c} |
D | {b,e} |
如何计算商品之间的相似度?
我们想知道当购买商品a时,如果有很多用户购买了商品b,那是不是可以就此认为商品a与b是相似的呢?(比如说甲新购买了手机,乙买了手机还买了手机壳,我们是否可以推荐手机壳给用户甲呢?)
先写出每个用户的共现矩阵C
如 用户A:
C[i][j]代表的含义是同时喜欢物品i和物品j的用户数量。
易知这是一个对称矩阵
我们将每个用户的共现矩阵叠加,能够得到全部用户的完整的共现矩阵。
相似度的计算
同现相似度
ω
i
,
j
=
∣
N
(
i
)
∩
N
(
j
)
∣
∣
N
(
i
)
∣
\omega_{i,j}= \frac{|N(i)\cap N(j)|}{|N(i)|}
ωi,j=∣N(i)∣∣N(i)∩N(j)∣
其中,
∣
N
(
i
)
∣
|N(i)|
∣N(i)∣指喜欢物品
i
i
i的用户数量,分子表示同时喜欢物品
i
i
i和
j
j
j的用户数量。因此,上述公式可以理解为喜欢物品
i
i
i的用户中有多少比例的用户也喜欢物品
j
j
j。
但是,如果物品j很热门,那么
ω
i
,
j
\omega_{i,j}
ωi,j就会很大,接近与1,任何物品与物品j都有很大的相似度,所以我们有了下面的公式:
ω
i
,
j
=
∣
N
(
i
)
∩
N
(
j
)
∣
∣
N
(
i
)
∣
∣
N
(
j
)
∣
\omega_{i,j}= \frac{|N(i)\cap N(j)|}{\sqrt{ |N(i)||N(j)|}}
ωi,j=∣N(i)∣∣N(j)∣∣N(i)∩N(j)∣
这个公式惩罚了物品
j
j
j 的权重,因此减轻了热门物品会和很多物品相似的可能性。
另外为减小活跃用户对结果的影响,考虑IUF(nverse User Frequence) ,即用户活跃度对数的倒数的参数,认为活跃用户对物品相似度的贡献应该小于不活跃的用户.
ω
i
,
j
=
∑
u
∈
∣
N
(
i
)
∩
N
(
j
)
∣
1
l
o
g
(
1
+
∣
N
(
u
)
∣
)
∣
N
(
i
)
∣
∣
N
(
j
)
∣
\omega_{i,j}= \frac{ {\textstyle \sum_{u\in |N(i)\cap N(j)|}^{}}\frac{1}{log(1+|N(u)|)} }{\sqrt{ |N(i)||N(j)|}}
ωi,j=∣N(i)∣∣N(j)∣∑u∈∣N(i)∩N(j)∣log(1+∣N(u)∣)1
为了便于计算,还需将相似度矩阵归一化。