mf模型 svd++_基于矩阵分解(MF,Matrix Factorization)的推荐算法

LFM

LFM即隐因子模型,我们可以把隐因子理解为主题模型中的主题、HMM中的隐藏变量。比如一个用户喜欢《推荐系统实践》这本书,背后的原因可能是该用户喜欢推荐系统、或者是喜欢数据挖掘、亦或者是喜欢作者项亮本人等等,假如真的是由于这3个原因导致的,那如果项亮出了另外一本数据挖掘方面的书,我们可以推测该用户也会喜欢,这“背后的原因”我们称之为隐因子。所以LFM的其中思路就是先计算用户对各个隐因子的喜好程度$(p_1,p_2,...,p_f)$,再计算物品在各个隐因子上的概率分布$(q_1,q_2,...,q_f)$,两个向量做内积即得到用户对物品的喜好程度,下面就讲这两个向量怎么求。

假设我们已经有了一个评分矩阵$R_{m,n}$,$m$个用户对$n$个物品的评分全在这个矩阵里,当然这是一个高度稀疏的矩阵,我们用$r_{u,i}$表示用户$u$对物品$i$的评分。LFM认为$R_{m,n}=P_{m,F}\cdot{Q_{F,n}}$即R是两个矩阵的乘积(所以LFM又被称为矩阵分解法,MF,matrix factorization model),F是隐因子的个数,P的每一行代表一个用户对各隐因子的喜欢程序,Q的每一列代表一个物品在各个隐因子上的概率分布。

\begin{equation}\hat{r}_{ui}=\sum_{f=1}^{F}{P_{uf}Q_{fi}}\label{lfm}\end{equation}

这种基于矩阵分解的推荐算法又叫SVD(Singular Value Decomposition,奇异值分解),但实际上它只是从SVD借鉴过来的,跟SVD其实根本不是一回事。

SVD:

$$A_{m\times n} \approx U_{m\times k}\Sigma_{k\times k}V^T_{k\times n}$$

把$\Sigma$去掉是不是跟LFM就很像了?

机器学习训练的目标是使得对所有的$\color{red}{r_{ui}\ne0}$,$r_{u,i}$和$\hat{r}_{ui}$尽可能接近,即

\begin{equation}min:\ \ Loss=\sum_{\color{red}{r_{ui}\ne0}}{(r_{u,i}-\hat{r}_{ui})^2}\end{equation}

为防止过拟合,加个正则项,以防止$P_{uf},Q_{fi}$过大或过小。

\begin{equation}min:\ \ Loss=\sum_{\color{red}{r_{ui}\ne0}}{(r_{u,i}-\hat{r}_{ui})^2}+\lambda(\sum{P_{uf}^2}+\sum{Q_{fi}^2})=f(P,Q)\label{target_lfm}\end{equation}

采用梯度下降法求解上面的无约束最优化问题,在第$t+1$轮迭代中$P$和$Q$的值分别应该是

\begin{equation}P^{(t+1)}=P^{(t)}-\alpha\frac{\partial{Loss}}{\partial{P^{(t)}}},Q^{(t+1)}=Q^{(t)}-\alpha\frac{\partial{Loss}}{\partial{Q^{(t)}}}\end{equation}

\begin{equation}\frac{\partial{Loss}}{\partial{P^{(t)}}}=\left[\begin{array}{cc}\frac{\partial{Loss}}{\partial{P_{11}^{(t)}}}\ ...\ \frac{\partial{Loss}}{\partial{P_{1F}^{(t)}}}\\...\ \frac{\partial{Loss}}{\partial{P_{uf}^{(t)}}}\ ...\\\frac{\partial{Loss}}{\partial{P_{m1}^{(t)}}}\ ...\ \frac{\partial{Loss}}{\partial{P_{mF}^{(t)}}}\end{array}\right]\end{equation}

\begin{equation}\frac{\partial{Loss}}{\partial{P_{uf}^{(t)}}}=\sum_{\color{red}{i,r_{ui}\ne0}}{-2(r_{u,i}-\hat{r}_{ui})\frac{\partial{\hat{r}_{ui}}}{\partial{P_{uf}^{(t)}}}}+2\lambda{P_{uf}^{(t)}}=\sum_{\color{red}{i,r_{ui}\ne0}}{-2(r_{u,i}-\hat{r}_{ui})Q_{fi}^{(t)}}+2\lambda{P_{uf}^{(t)}}\end{equation}

\begin{equation}\frac{\partial{Loss}}{\partial{Q_{fi}^{(t)}}}=\sum_{\color{red}{u,r_{ui}\ne0}}{-2(r_{u,i}-\hat{r}_{ui})\frac{\partial{\hat{r}_{ui}}}{\partial{Q_{fi}^{(t)}}}}+2\lambda{Q_{fi}^{(t)}}=\sum_{\color{red}{u,r_{ui}\ne0}}{-2(r_{u,i}-\hat{r}_{ui})P_{uf}^\color{red}{(t)}}+2\lambda{Q_{fi}^{(t)}}\end{equation}

以上就是梯度下降法的所有公式,我们注意到:

求$\frac{\partial{Loss}}{\partial{P_{uf}^{(t)}}}$时用到了用户$u$对物品的所有评分

求$\frac{\partial{Loss}}{\partial{P^{(t)}}}$时用到了整个评分矩阵$R$,时间复杂度为$m\times{F}\times{n'}$,$n'$是平均一个用户对多少个物品有过评分

随机梯度下降法(SGD,Stochastic Gradient Descent)没有严密的理论证明,但是在实践中它通常比传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值