一、协同过滤推荐算法
协同过滤算法是指基于用户行为数据设计的推荐算法,主要包括:
1.基于邻域的算法:UserCF(基于用户的协同过滤算法)、ItemCF(基于物品的协同过滤算法)
2.隐语义模型:LFM
3.基于图的随机游走算法:PersonalRank
本文主要介绍隐语义模型LFM
二、隐语义模型:LFM
可以通过对用户的兴趣和物品进行分类实现推荐。在给用户推荐物品时,首先得到用户的兴趣分类,接着找出属于这些类别的物品推荐给用户。这种基于兴趣分类的的推荐方法需要解决以下3个问题:
1.如何给物品分类
2.如何确定用户对那些类别感兴趣,以及感兴趣的程度
3.对于一个给定的类别,选择那些属于这个类别的物品推荐给用户,以及如何确定这些物品在一个类中的权重
对于第一个问题的简单解决方法是人工的给物品进行分类,然而,人工给物品分类存在以下缺点:
1.分类人员的意见不能代表各种用户的意见
2.分类人员很难控制分类的粒度:例如对于《推荐系统实践》在粗粒度上属于计算机技术,但在细粒度上属于人工智能推荐系统,对不同的用户可能需要不同的粒度。
3.分类人员很难给一个物品多个分类
4.分类人员很难给出多维度的分类:分类是有很多维度的,例如书籍可以根据作者、出版社、内容等进行分类,不同人选择书籍的原因可能不同,有些人根据作者选择书,有些人根据书的内容选择书。
5.分类人员很难决定一个物品在某一类别中的权重
为了解决上面问题,LFM从数据出发,采用基于用户行为统计的自动聚类,自动的找到那些类,然后进行个性化推荐。LFM的核心是通过隐含特征联系用户兴趣和物品。
在这里插入图片描述LFM将用户物品矩阵
R
m
×
n
R_{m \times n}
Rm×n分解为用户兴趣矩阵
P
m
×
k
P_{m \times k }
Pm×k和物品类别矩阵
Q
k
×
n
Q_{ k\times n}
Qk×n的乘积:
R
m
×
n
≈
P
m
×
k
Q
k
×
n
=
R
^
m
×
n
R_{m\times n} \approx P_{m \times k} Q_{k \times n}=\hat{R}_{m\times n}
Rm×n≈Pm×kQk×n=R^m×n
通过下面公式计算用户 u 对物品 i 的兴趣:
P
r
e
f
e
r
e
n
c
e
(
u
,
i
)
=
R
^
u
,
i
=
P
u
Q
i
=
∑
f
=
1
k
P
u
,
f
Q
f
,
i
Preference(u,i)=\hat{R}_{u,i}=P_{u} Q_{i}=\sum_{f=1}^{k}{P_{u,f} Q_{f,i}}
Preference(u,i)=R^u,i=PuQi=∑f=1kPu,fQf,i
其中,
P
u
,
f
表
示
用
户
u
的
兴
趣
和
第
f
个
隐
类
之
间
的
关
系
,
Q
f
,
i
表
示
第
f
个
隐
类
和
物
品
i
之
间
的
关
系
P_{u,f}表示用户u的兴趣和第f个隐类之间的关系,Q_{f,i}表示第f个隐类和物品i之间的关系
Pu,f表示用户u的兴趣和第f个隐类之间的关系,Qf,i表示第f个隐类和物品i之间的关系
计算出用户
u
u
u对所有未产生行为的物品的感兴趣程度进行排序,就可以实现对用户u的推荐
举例如下:
P
r
e
f
e
r
e
n
c
e
(
2
,
1
)
=
P
2
Q
1
=
[
P
2
,
1
,
P
2
,
2
,
P
2
,
3
]
[
Q
1
,
1
,
Q
2
,
1
,
Q
3
,
1
]
T
=
P
2
,
1
Q
1
,
1
+
P
2
,
2
Q
2
,
1
+
P
2
,
3
Q
3
,
1
Preference(2,1)=P_{2}Q_{1}=[P_{2,1},P_{2,2},P_{2,3}][Q_{1,1},Q_{2,1},Q_{3,1}]^{T}=P_{2,1}Q_{1,1}+P_{2,2}Q_{2,1}+P_{2,3}Q_{3,1}
Preference(2,1)=P2Q1=[P2,1,P2,2,P2,3][Q1,1,Q2,1,Q3,1]T=P2,1Q1,1+P2,2Q2,1+P2,3Q3,1
LFM的分类来自于对用户行为的统计,代表了用户的看法,每个物品可以属于多个类别,并且可以计算出物品属于每个类别的权重。隐类个数 k k k控制了分类的粒度,k越大,类别个数越多,分类的粒度越细。
三、LFM模型求解
数据集构建:
对于隐性反馈数据集,只有正样本,需要利用用户没有过行为的物品生成负样本,负样本的采样应遵循以下原则:
1.对每个用户,要保证正负样本的平衡(数目相似)
2.对每个用户采样负样本时,选取很热门但用户却没有行为的物品,因为很热门但是用户却没有行为更加说明用户对该物品不感兴趣
经过负样本采样,得到用户物品集合
U
I
=
{
(
u
,
i
)
}
UI=\{(u,i)\}
UI={(u,i)},若
(
u
,
i
)
(u,i)
(u,i)是正样本,则
R
u
,
i
=
1
R_{u,i}=1
Ru,i=1,否则
R
u
,
i
=
0
R_{u,i}=0
Ru,i=0
求解:
损失函数:
L
=
∑
(
u
,
i
)
∈
U
I
(
R
u
,
i
−
R
^
u
,
i
)
2
=
∑
(
u
,
i
)
∈
U
I
(
R
u
,
i
−
∑
f
=
1
k
P
u
,
f
Q
f
,
i
)
2
+
λ
∣
∣
P
u
∣
∣
2
+
λ
∣
∣
Q
i
∣
∣
2
L=\sum\limits_{(u,i)\in UI}{(R_{u,i}-\hat R_{u,i})^2}=\sum\limits_{(u,i)\in UI}{(R_{u,i}-\sum\limits_{f=1}^{k}P_{u,f}Q_{f,i})^2}+\lambda \left|{\left|{P_{u}}\right|}\right|^2+\lambda \left|{\left|{Q_{i}}\right|}\right|^2
L=(u,i)∈UI∑(Ru,i−R^u,i)2=(u,i)∈UI∑(Ru,i−f=1∑kPu,fQf,i)2+λ∣∣Pu∣∣2+λ∣∣Qi∣∣2
其中
λ
∣
∣
P
u
∣
∣
2
+
λ
∣
∣
Q
i
∣
∣
2
\lambda \left|{\left|{P_{u}}\right|}\right|^2+\lambda \left|{\left|{Q_{i}}\right|}\right|^2
λ∣∣Pu∣∣2+λ∣∣Qi∣∣2为正则项,用来防止过拟合,
λ
\lambda
λ的值可以根据实验获得
使用随机梯度下降法求解:
∂
L
∂
P
u
,
f
=
−
2
(
R
u
,
i
−
∑
f
=
1
k
P
u
,
f
Q
f
,
i
)
Q
f
,
i
+
2
λ
P
u
,
f
\frac{\partial L}{\partial P_{u,f}}=-2(R_{u,i}-\sum\limits_{f=1}^{k}P_{u,f}Q_{f,i})Q_{f,i}+2\lambda P_{u,f}
∂Pu,f∂L=−2(Ru,i−f=1∑kPu,fQf,i)Qf,i+2λPu,f
∂
L
∂
Q
f
,
i
=
−
2
(
R
u
.
i
−
∑
f
=
1
k
P
u
,
f
Q
f
,
i
)
P
u
,
f
+
2
λ
Q
f
,
i
\frac{\partial L}{\partial Q_{f,i}}=-2(R_{u.i}-\sum\limits_{f=1}^{k}P_{u,f}Q_{f,i})P_{u,f}+2\lambda Q_{f,i}
∂Qf,i∂L=−2(Ru.i−f=1∑kPu,fQf,i)Pu,f+2λQf,i
沿着负梯度方向更新变量,步长取值
α
\alpha
α
P
u
,
f
=
P
u
,
f
+
α
(
(
R
u
,
i
−
∑
f
=
1
k
P
u
,
f
Q
f
,
i
)
Q
f
,
i
−
λ
P
u
,
f
)
P_{u,f}=P_{u,f}+\alpha((R_{u,i}-\sum\limits_{f=1}^{k}P_{u,f}Q_{f,i})Q_{f,i}-\lambda P_{u,f})
Pu,f=Pu,f+α((Ru,i−f=1∑kPu,fQf,i)Qf,i−λPu,f)
Q
f
,
i
=
Q
f
,
i
+
α
(
(
R
u
,
i
−
∑
f
=
1
k
P
u
,
f
Q
f
,
i
)
P
u
,
f
−
λ
Q
f
,
i
)
Q_{f,i}=Q_{f,i}+\alpha((R_{u,i}-\sum\limits_{f=1}^{k}{P_{u,f}Q_{f,i}})P_{u,f}-\lambda Q_{f,i})
Qf,i=Qf,i+α((Ru,i−f=1∑kPu,fQf,i)Pu,f−λQf,i)
参考书籍:《推荐系统实战》