Collaborative Filtering for Implicit Feedback Datasets[1]公式推导
精确反馈的模型
min x ∗ , y ∗ ∑ r u , i is known ( r u , i − x u T y i ) 2 + λ ( ∥ x u ∥ 2 + ∥ y i ∥ 2 ) (1) \min\limits_{x^*,y^*}\sum\limits_{r_{u,i} \text{ is known}}(r_{u,i}-x_u^Ty_i)^2+\lambda(\Vert x_u\Vert ^2+\Vert y_i\Vert^2)\tag{1} x∗,y∗minru,i is known∑(ru,i−xuTyi)2+λ(∥xu∥2+∥yi∥2)(1)
隐式反馈模型
用户 u u u对商品 i i i的交互量用 r u i r_{ui} rui来表示,利用 p u i p_{ui} pui表示用户 u u u对商品 i i i的偏好,通过二元化 r u , i r_{u,i} ru,i来获得。
p u i = { 1 r u i > 0 0 r u i = 0 p_{ui}=\begin{cases}1&r_{ui}>0\\0&r_{ui}=0\end{cases} pui={10rui>0rui=0
如果用户
u
u
u与商品
i
i
i进行了交互,则可以有一定的概率认为用户
u
u
u喜欢商品
i
i
i。
但是用户没有对某个商品产生正反馈,不一定是不喜欢这个商品。他可能根本就没看到这个商品或者因为价格或者其他限制原因使得他没有点开的意愿或者条件。
此外,用户的正反馈可能也不是因为喜欢,例如,用户可能仅仅因为停留在之前看过的节目的频道就看电视节目。
当 r u i r_{ui} rui增长的时候,我们有更坚定的理由去相信用户喜欢这个商品。在此我们引入变量 c u i c_{ui} cui来表示用户 u u u对商品 i i i产生的喜好 p u i p_{ui} pui的置信程度。
c u i = 1 + α r u i c_{ui}=1+\alpha r_{ui} cui=1+αrui
α \alpha α的初始值设置为40
模型的目标是为每个用户 u u u找到可以代表它的向量 x u ∈ R f x_u\in \R^f xu∈Rf,以及每个商品的代表向量 y i ∈ R f y_i\in \R ^f yi∈Rf,它们可以通过内积即 p u i = x u T y i p_{ui}=x_u^Ty_i pui=xuTyi用来表达用户的喜好。可以称这些向量为用户因子和商品因子,这些向量将用户和商品拉入了一个可以直接比较的隐向量空间。
与传统的精确反馈的区别在于
- 需要计算不同的置信程度
- 优化的时候需要考虑所有的 u , i u,i u,i对
我们需要进行最小化的损失函数为
min
x
∗
,
y
∗
∑
u
,
i
c
u
i
(
p
u
i
−
x
u
T
y
i
)
2
+
λ
(
∥
x
u
∥
2
+
∥
y
i
∥
2
)
(2)
\min\limits_{x^*,y^*}\sum\limits_{u,i} c_{ui}(p_{ui}-x_u^Ty_i)^2+\lambda(\Vert x_u\Vert ^2+\Vert y_i\Vert^2)\tag{2}
x∗,y∗minu,i∑cui(pui−xuTyi)2+λ(∥xu∥2+∥yi∥2)(2)
由于考虑到矩阵中的所有元素,
m
×
n
m\times n
m×n很容易达到几十亿的级别,这样传统的梯度下降就不合适了。因此使用交替最小二乘法。
我们令 L ( x u , y i ) = ∑ u i c u i ( p u i − x u T y i ) 2 + λ ( ∥ x u ∥ 2 + ∥ y i ∥ 2 ) L(x_u,y_i)=\sum\limits_{ui} c_{ui}(p_{ui}-x_u^Ty_i)^2+\lambda(\Vert x_u\Vert ^2+\Vert y_i\Vert^2) L(xu,yi)=ui∑cui(pui−xuTyi)2+λ(∥xu∥2+∥yi∥2)
假设商品矩阵 Y Y Y是确定的,对 x u x_u xu求偏导
∂ L ∂ x u = [ ∂ L ∂ x u 1 ∂ L ∂ x u 2 ⋮ ∂ L ∂ x u f ] = [ ∑ i = 1 n 2 c u i ( p u , i − x u T y i ) ( − y i 1 ) ∑ i = 1 n 2 c u i ( p u , i − x u T y i ) ( − y i 2 ) ⋮ ∑ i = 1 n 2 c u i ( p u , i − x u T y i ) ( − y i f ) ] + [ 2 λ x u 1 2 λ x u 2 ⋮ 2 λ x u f ] \frac{\partial L}{\partial x_u}=\begin{bmatrix}\frac{\partial L}{\partial x_{u1}}\\\frac{\partial L}{\partial x_{u2}}\\\vdots\\\frac{\partial L}{\partial x_{uf}}\end{bmatrix}=\begin{bmatrix}\sum\limits_{i=1}^n2c_{ui}(p_{u,i}-x_u^Ty_i)(-y_{i1})\\\sum\limits_{i=1}^n2c_{ui}(p_{u,i}-x_u^Ty_i)(-y_{i2})\\\vdots\\\sum\limits_{i=1}^n2c_{ui}(p_{u,i}-x_u^Ty_i)(-y_{if})\end{bmatrix}+\begin{bmatrix}2\lambda x_{u1}\\2\lambda x_{u2}\\\vdots\\2\lambda x_{uf}\end{bmatrix} ∂xu∂L=⎣⎢⎢⎢⎢⎡∂xu1∂L∂xu2∂L⋮∂xuf∂L⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡i=1∑n2cui(pu,i−xuTyi)(−yi1)i=1∑n2cui(pu,i−xuTyi)(−yi2)⋮i=1∑n2cui(pu,i−xuTyi)(−yif)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤+⎣⎢⎢⎢⎡2λxu12λxu2⋮2λxuf⎦⎥⎥⎥⎤
让偏导向量为0向量,也就是最后两个向量之和为0,那么可以将2消除。
[ ∑ i = 1 n c u i ( p u i − x u T y i ) ( y i 1 ) ∑ i = 1 n c u i ( p u i − x u T y i ) ( y i 2 ) ⋮ ∑ i = 1 n c u i ( p u i − x u T y i ) ( y i f ) ] = [ λ x u 1 λ x u 2 ⋮ λ x u f ] \begin{bmatrix}\sum\limits_{i=1}^nc_{ui}(p_{ui}-x_u^Ty_i)(y_{i1})\\\sum\limits_{i=1}^nc_{ui}(p_{ui}-x_u^Ty_i)(y_{i2})\\\vdots\\\sum\limits_{i=1}^nc_{ui}(p_{ui}-x_u^Ty_i)(y_{if})\end{bmatrix}=\begin{bmatrix}\lambda x_{u1}\\\lambda x_{u2}\\\vdots\\\lambda x_{uf}\end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡i=1∑ncui(pui−xuTyi)(yi1)i=1∑ncui(pui−xuTyi)(yi2)⋮i=1∑ncui(pui−xuTyi)(yif)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎡λxu1λxu2⋮λxuf⎦⎥⎥⎥⎤
我们来观察左边向量的形式:
设:
V
=
[
∑
i
=
1
n
c
u
i
(
p
u
i
−
x
u
T
y
i
)
(
y
i
1
)
∑
i
=
1
n
c
u
i
(
p
u
i
−
x
u
T
y
i
)
(
y
i
2
)
⋮
∑
i
=
1
n
c
u
i
(
p
u
i
−
x
u
T
y
i
)
(
y
i
f
)
]
V=\begin{bmatrix}\sum\limits_{i=1}^nc_{ui}(p_{ui}-x_u^Ty_i)(y_{i1})\\\sum\limits_{i=1}^nc_{ui}(p_{ui}-x_u^Ty_i)(y_{i2})\\\vdots\\\sum\limits_{i=1}^nc_{ui}(p_{ui}-x_u^Ty_i)(y_{if})\end{bmatrix}
V=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡i=1∑ncui(pui−xuTyi)(yi1)i=1∑ncui(pui−xuTyi)(yi2)⋮i=1∑ncui(pui−xuTyi)(yif)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
设矩阵
Y
n
×
f
Y_{n\times f}
Yn×f,每一行代表着商品的特征向量,
f
f
f为向量空间的维度。也就是说
Y
=
[
y
1
T
y
2
T
⋮
y
n
T
]
Y=\begin{bmatrix}y_1^T\\y_2^T\\\vdots\\y_n^T\end{bmatrix}
Y=⎣⎢⎢⎢⎡y1Ty2T⋮ynT⎦⎥⎥⎥⎤
论文中,也提出了
C
u
C_u
Cu为一个包含置信度的对角矩阵
C
u
=
[
c
u
1
c
u
2
⋱
c
u
n
]
C_u=\begin{bmatrix}c_{u1}\\&c_{u2}\\&&\ddots\\&&&c_{un}\end{bmatrix}
Cu=⎣⎢⎢⎡cu1cu2⋱cun⎦⎥⎥⎤
这里用大写字母表示矩阵,小写字母表示向量,请不要混淆。
∑ i = 1 n c u i ( p u i − x u T y i ) ( y i 1 ) = [ c u 1 ( p u 1 − x u T y 1 ) c u 2 ( p u 2 − x u T y 2 ) ⋮ c u n ( p u n − x u T y n ) ] T × [ y 11 y 21 ⋮ y n 1 ] = ( C u × ( p ( u ) − Y x u ) ) T × Y ∗ , 1 = Y ∗ , 1 T × ( C u × ( p ( u ) − Y x u ) ) \sum\limits_{i=1}^nc_{ui}(p_{ui}-x_u^Ty_i)(y_{i1})=\begin{bmatrix}c_{u1}(p_{u1}-x_u^Ty_1)\\c_{u2}(p_{u2}-x_u^Ty_2)\\\vdots\\c_{un}(p_{un}-x_u^Ty_n)\end{bmatrix}^T\times \begin{bmatrix}y_{11}\\y_{21}\\\vdots\\y_{n1}\end{bmatrix}\\=(C_u\times(p(u)-Yx_u))^T\times Y_{*,1}\\=Y_{*,1}^T\times (C_u\times(p(u)-Yx_u)) i=1∑ncui(pui−xuTyi)(yi1)=⎣⎢⎢⎢⎡cu1(pu1−xuTy1)cu2(pu2−xuTy2)⋮cun(pun−xuTyn)⎦⎥⎥⎥⎤T×⎣⎢⎢⎢⎡y11y21⋮yn1⎦⎥⎥⎥⎤=(Cu×(p(u)−Yxu))T×Y∗,1=Y∗,1T×(Cu×(p(u)−Yxu))
V = [ Y ∗ , 1 T × ( C u × ( p ( u ) − Y x u ) ) Y ∗ , 2 T × ( C u × ( p ( u ) − Y x u ) ) ⋮ Y ∗ , n T × ( C u × ( p ( u ) − Y x u ) ) ] = [ Y ∗ , 1 T Y ∗ , 2 T ⋮ Y ∗ , n T ] × ( C u × ( p ( u ) − Y x u ) ) = Y T × ( C u × ( p ( u ) − Y x u ) ) = λ x u V=\begin{bmatrix}Y_{*,1}^T\times (C_u\times(p(u)-Yx_u))\\Y_{*,2}^T\times (C_u\times(p(u)-Yx_u))\\\vdots\\Y_{*,n}^T\times (C_u\times(p(u)-Yx_u))\end{bmatrix}=\begin{bmatrix}Y_{*,1}^T\\Y_{*,2}^T\\\vdots\\Y_{*,n}^T\end{bmatrix}\times (C_u\times(p(u)-Yx_u))\\=Y^T\times (C_u\times(p(u)-Yx_u))=\lambda x_u V=⎣⎢⎢⎢⎡Y∗,1T×(Cu×(p(u)−Yxu))Y∗,2T×(Cu×(p(u)−Yxu))⋮Y∗,nT×(Cu×(p(u)−Yxu))⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡Y∗,1TY∗,2T⋮Y∗,nT⎦⎥⎥⎥⎤×(Cu×(p(u)−Yxu))=YT×(Cu×(p(u)−Yxu))=λxu
可得:
Y T C u p ( u ) = ( λ I + Y T C u Y ) x u ⟺ x u = ( λ I + Y T C u Y ) − 1 Y T C u p ( u ) Y^TC_up(u)=(\lambda I+Y^TC_uY)x_u\iff x_u=(\lambda I+Y^TC_uY)^{-1}Y^TC_up(u) YTCup(u)=(λI+YTCuY)xu⟺xu=(λI+YTCuY)−1YTCup(u)
[1] Hu Y, Koren Y, Volinsky C. Collaborative filtering for implicit feedback datasets[C]//2008 Eighth IEEE international conference on data mining. Ieee, 2008: 263-272.