余弦相似度
sim
(
i
,
j
)
=
cos
(
i
,
j
)
=
i
⋅
j
∥
i
∥
⋅
∥
j
∥
\operatorname { sim } ( \boldsymbol { i } , \boldsymbol { j } ) = \cos ( \boldsymbol { i } , \boldsymbol { j } ) = \frac { \boldsymbol { i } \cdot \boldsymbol { j } } { \| \boldsymbol { i } \| \cdot \| \boldsymbol { j } \| }
sim(i,j)=cos(i,j)=∥i∥⋅∥j∥i⋅j
相关系数
sim
(
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
\operatorname { sim } ( i , j ) = \frac { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { i } , \mathrm { p } } - \bar { R } _ { \mathrm { i } } \right) \left( R _ { \mathrm { j } , \mathrm { p } } - \bar { R } _ { \mathrm { j } } \right) } { \sqrt { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { i } , \mathrm { p } } - \bar { R } _ { \mathrm { i } } \right) ^ { 2 } } \sqrt { \sum _ { \mathrm { p } \epsilon P } \left( R _ { \mathrm { j } , \mathrm { p } } - \bar { R } _ { \mathrm { j } } \right) ^ { 2 } } }
sim(i,j)=∑pϵP(Ri,p−Rˉi)2∑pϵP(Rj,p−Rˉj)2∑pϵP(Ri,p−Rˉi)(Rj,p−Rˉj)
R
i
,
p
R _ { \mathrm { i } , \mathrm { p } }
Ri,p代表用户i对物品p的评分。
R
ˉ
i
\bar { R } _ { \mathrm { i } }
Rˉi代表用户i对所有物品的平均评分,P代表所有物品的集合。
UserCF
根据共现矩阵获得Top n相似用户,根据下式计算每个商品的相似度:
R
u
,
p
=
∑
s
∈
S
(
w
u
,
s
⋅
R
s
,
p
)
∑
s
ϵ
S
w
u
,
s
R _ { \mathrm { u } , \mathrm { p } } = \frac { \sum _ { \mathrm { s } \in S } \left( w _ { \mathrm { u } , \mathrm { s } } \cdot R _ { \mathrm { s } , \mathrm { p } } \right) } { \sum _ { \mathrm { s } \epsilon S } w _ { \mathrm { u } , \mathrm { s } } }
Ru,p=∑sϵSwu,s∑s∈S(wu,s⋅Rs,p) 其中,权重
w
u
,
s
w _ { \mathrm { u } , \mathrm { s } }
wu,s是用户U和用户S的相似度,
R
s
,
p
R _ { \mathrm { s } , \mathrm { p } }
Rs,p是用户S对物品P的评分。
缺点 1、用户数往往远大于物品数,而 UserCF 需要维护用户相似度矩阵以便快速找出 Top n相似用户。用户数的增长会导致用户相似度矩阵的空间复杂度以
n
2
n^2
n2的速度快速增长。 2、用户的历史数据向量往往非常稀疏,对于只有几次购买或者点击行为的用户来说,找到相似用户的准确度是非常低的,这导致 UserCF 不适用于那些正反馈获取较困难的应用场景( 如酒店预定、大件商品购买等低频应用)。
ItemCF
根据共现矩阵获得Top n相似物品,根据下式计算当前商品和用户历史正反馈商品的相似度:
R
u
,
p
=
∑
h
∈
H
(
w
p
,
h
⋅
R
u
,
h
)
R _ { \mathrm { u } , \mathrm { p } } = \sum _ { \mathrm { h } \in H } \left( w _ { \mathrm { p } , \mathrm { h } } \cdot R _ { \mathrm { u } , \mathrm { h } } \right)
Ru,p=h∈H∑(wp,h⋅Ru,h)
隐向量的维度k决定了隐向量的表达能力。k越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k越大,隐向量的表达能力越强,泛化程度越低。同时,k的取值还与矩阵分解的求解复杂度直接相关。 基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分如下式:
r
^
u
i
=
q
i
T
p
u
\hat { \boldsymbol { r } } _ { \mathrm { ui } } = \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } }
r^ui=qiTpu 其中,
p
u
\boldsymbol { p } _ { \mathrm { u } }
pu是U的对应行向量,
q
i
T
\boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } }
qiT是V的对应列向量。
矩阵分解的求解过程
对矩阵分解的主要方法有三种:特征值分解、奇异值分解和梯度下降。 特征值分解只能作用于仿真,不适用。 奇异值分解可参考 知乎: 奇异值的物理意义 。但其存在两点缺陷:奇异值分解要求原始共现矩阵是稠密的;传统奇异值分解的计算复杂度达到了
O
(
m
n
2
)
O(mn^2)
O(mn2)的级别。 因此,梯度下降成为了矩阵分解的主要方法。损失函数如下:
min
q
∗
,
p
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
q
i
T
p
u
)
2
\min _ { \boldsymbol { q } ^ { * } , \boldsymbol { p } ^ { * } } \sum _ { ( u , \mathrm { i } ) \in K } \left( \boldsymbol { r } _ { \mathrm { ui } } - \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } } \right) ^ { 2 }
q∗,p∗min(u,i)∈K∑(rui−qiTpu)2
消除用户和物品打分的偏差
由于不同用户的打分体系不同,物品的衡量标准也有所区别,为了消除用户和物品打分的偏差,常用的做法是在矩阵分解时加入用户和物品的偏差向量:
r
u
i
=
μ
+
b
i
+
b
u
+
q
i
T
p
u
\boldsymbol { r } _ { \mathrm { ui } } = \mu + b _ { \mathrm { i } } + b _ { \mathrm { u } } + \boldsymbol { q } _ { \mathrm { i } } ^ { \mathrm { T } } \boldsymbol { p } _ { \mathrm { u } }
rui=μ+bi+bu+qiTpu 其中
μ
\mu
μ是全局偏差常数,
b
i
b_i
bi是物品偏差系数,可使用物品i收到的所有评分的均值,
b
u
b_u
bu是用户偏差系数,可使用用户u给出的所有评分的均值。 同时,梯度下降的损失函数加入正则化后更改成如下:
min
q
∗
,
p
∗
,
b
∗
∑
(
u
,
i
)
∈
K
(
r
u
i
−
μ
−
b
u
−
b
i
−
p
u
T
q
i
)
2
+
λ
(
∥
p
u
∥
2
+
∥
q
i
∥
2
+
b
u
2
+
b
i
2
)
\min _ { \boldsymbol { q } ^ { * } , \boldsymbol { p } ^ { * } , \boldsymbol { b } ^ { * } } \sum _ { ( \mathrm { u } , \mathrm { i } ) \in K } \left( \boldsymbol { r } _ { \mathrm { ui } } - \mu - b _ { \mathrm { u } } - b _ { \mathrm { i } } - \boldsymbol { p } _ { \mathrm { u } } ^ { \mathrm { T } } \boldsymbol { q } _ { \mathrm { i } } \right) ^ { 2 } + \lambda \left( \left\| \boldsymbol { p } _ { \mathrm { u } } \right\| ^ { 2 } + \left\| \boldsymbol { q } _ { \mathrm { i } } \right\| ^ { 2 } + b _ { \mathrm { u } } ^ { 2 } + b _ { \mathrm { i } } ^ { 2 } \right)
q∗,p∗,b∗min(u,i)∈K∑(rui−μ−bu−bi−puTqi)2+λ(∥pu∥2+∥qi∥2+bu2+bi2)
矩阵分解的优缺点
优点: 1、泛化能力强 2、空间复杂度低:空间复杂度由
n
2
n^2
n2降低到
(
n
+
m
)
∗
k
(n+m)*k
(n+m)∗k。 3、更好的扩展性和灵活性:和深度学习中的Embedding相似,便于与其他特征进行组合拼接,便于对接深度学习网络。
又被称为MLR(Mixed Logistic Regression)模型。 在逻辑回归的基础上加人聚类的思想,其灵感来自对广告推荐领域样本特点的观察。举例来说,如果 CTR 模型要预估的是女性受众点击女装广告的 CTR。那么显然,我们不希望把男性用户点击数码类产品的样本数据也考虑进来,因为这样的样本不仅与女性购买女装的广告场景毫无相关性,甚至会在模型训练过程中扰乱相关特征的权重。为了让 CTR 模型对不同用户群体、不同使用场景更有针对性,其采用的方法是先对全量样本进行聚类,再对每个分类施以逻辑回归模型进行 CTR 预估。公式如下:
f
(
x
)
=
∑
i
=
1
m
π
i
(
x
)
⋅
η
i
(
x
)
=
∑
i
=
1
m
e
μ
i
⋅
x
∑
j
=
1
m
e
μ
j
⋅
x
⋅
1
1
+
e
−
w
i
⋅
x
f ( x ) = \sum _ { i = 1 } ^ { m } \pi _ { i } ( x ) \cdot \eta _ { i } ( x ) = \sum _ { i = 1 } ^ { m } \frac { \mathrm { e } ^ { \mu _ { i } \cdot x } } { \sum _ { j = 1 } ^ { m } \mathrm { e } ^ { \mu _ { j } \cdot x } } \cdot \frac { 1 } { 1 + \mathrm { e } ^ { - w _ { i } \cdot x } }
f(x)=i=1∑mπi(x)⋅ηi(x)=i=1∑m∑j=1meμj⋅xeμi⋅x⋅1+e−wi⋅x1 首先用聚类函数
π
\pi
π对样本进行分类( 这 里 的 采 用 了 softmax 函数对样本进行多分类),再用 LR 模型计算样本在分片中具体的 CTR 然后将二者相乘后求和。