推荐系统–矩阵分解(1)
推荐系统–矩阵分解(2)
推荐系统–矩阵分解(3)
推荐系统–矩阵分解(4)
推荐系统–矩阵分解(5)
推荐系统–矩阵分解(6)
1 引入
一个矩阵可以分解为两个小矩阵的乘积,以音乐为例,利用潜在特征向量来给用户和音乐打上标签:
以电影为例,利用潜在特征向量来给用户和电影打上标签:
推荐系统的评分矩阵是稀疏的,这里的潜在特征不可解释,要模型自己去学,KKK代表潜在特征的维度,其大小决定决定了潜在特征的表达能力,KKK越大,信息表达就越强,即用户的兴趣和物品的分类划分得就越具体。
2 SVD
评分矩阵Rm×nR_{m \times n}Rm×n可以分解为两个小矩阵Um×kU_{m \times k}Um×k,Vn×kV_{n\times k}Vn×k;此处k≪m&k≪nk \ll m \& k \ll nk≪m&k≪n。
UUU矩阵的一行表示用户uuu的特征向量pup_upu,VVV矩阵的一列表示物品tit_iti的特征向量qiq_iqi,利用这两个向量可以预测用户uuu对物品tit_iti的偏好:
Preference(u,i)=rui^=puTqi=∑k=1Kpu,kqk,i(1)\operatorname{Preference}(u, i)=\hat{r_{u i}}=p_{u}^{T} q_{i}=\sum_{k=1}^{K} p_{u, k} q_{k, i} \tag1Preference(u,i)=rui^=puTqi=k=1∑Kpu,kqk,i(1)
其优化目标函数为:
arg minθL(θ)=12argmin⏟pu,qi∑u,iIui[(rui−puTqi)2]+λ(∥pu∥F2+∥qi∥F2)(2)\argmin_{\theta} L(\theta)=\frac{1}{2}\underbrace{\arg \min }_{p_{u}, q_{i}} \sum_{u, i} I_{ui}\left[\left(r_{u i}-p_{u}^T q_{i}\right)^{2}\right] +\lambda(\|p_u\|_{F}^{2}+\|q_i\|_{F}^{2}) \tag2θargminL(θ)=21pu,qiargminu,i∑Iui[(rui−puTqi)2]+λ(∥pu∥F2+∥qi∥F2)(2)
符号说明:
为了后面求梯度的时候好看一点,在函数前面加上了12\frac{1}{2}21;
eui=rui−puTqie_{ui} = r_{u i}-p_{u}^T q_{i}eui=rui−puTqi;
θ\thetaθ:矩阵分解的参数,即pu,qip_u, q_ipu,qi;
pup_upu:用户uuu对应的向量,表示用户对电影某些题材的偏好程度,以潜在因子的方式表示;
qiq_iqi:项目iii对电影某些题材的符合程度,以潜在因子的方式表示;
λ\lambdaλ:正则项的系数。
对公式(2)第一项求偏导,得到如下公式:
∂L1∂pu,k=12∂∂pu,k(eui2)=eui∂∂pu,keui=eui∂∂pu,k(rui−∑k=1Kpu,kqk,i)=−euiqk,i∂L1∂qk,i=12∂∂pk,i(eui2)=eui∂∂pk,ieui=eui∂∂pk,i(rui−∑k−1Kpu,kqk,i)=−euipu,k\begin{aligned} \frac{\partial L_1}{\partial p_{u, k}} =\frac{1}{2}\frac{\partial}{\partial p_{u, k}}\left(e_{u i}^{2}\right)= e_{u i} \frac{\partial}{\partial p_{u, k}} e_{u i}=e_{u i} \frac{\partial}{\partial p_{u, k}}\left(r_{u i}-\sum_{k=1}^{K} p_{u, k} q_{k, i}\right)=-e_{u i} q_{k, i} \\ \frac{\partial L_1}{\partial q_{k, i}} =\frac{1}{2}\frac{\partial}{\partial p_{k, i}}\left(e_{u i}^{2}\right)= e_{u i} \frac{\partial}{\partial p_{k, i}} e_{u i}=e_{u i} \frac{\partial}{\partial p_{k, i}}\left(r_{u i}-\sum_{k-1}^{K} p_{u, k} q_{k, i}\right)=-e_{u i} p_{u, k} \end{aligned} ∂pu,k∂L1=21∂pu,k∂(eui2)=eui∂pu,k∂eui=eui∂pu,k∂(rui−k=1∑Kpu,kqk,i)=−euiqk,i∂qk,i∂L1=21∂pk,i∂(eui2)=eui∂pk,i∂eui=eui∂pk,i∂(rui−k−1∑Kpu,kqk,i)=−euipu,k
对公式(2)第二项求偏导,得到如下公式:
∂L2∂pu,k=λpu,k∂L2∂qk,i=λqk,i\begin{aligned} \frac{\partial L_2}{\partial p_{u, k}} = \lambda p_{u, k} \\ \frac{\partial L_2}{\partial q_{k, i}} = \lambda q_{k, i} \end{aligned} ∂pu,k∂L2=λpu,k∂qk,i∂L2=λqk,i
整理后可得到迭代公式为:
pu,k=pu,k+η(euiqk,i−λpu,k)qk,i=qk,i+η(euipu,k−λqi,k)(3)\begin{aligned} p_{u, k} &=p_{u, k}+\eta\left(e_{u i} q_{k, i}-\lambda p_{u, k}\right) \\ q_{k, i} &=q_{k, i}+\eta\left(e_{u i} p_{u, k}-\lambda q_{i, k}\right) \end{aligned} \tag3 pu,kqk,i=pu,k+η(euiqk,i−λpu,k)=qk,i+η(euipu,k−λqi,k)(3)
符号说明:
η\etaη: 更新步长,一般取0.005。