网站建设文翻译工作,菲律宾,百度 网站质量,南昌seo如何优化首先对Probabilistic Matrix Factorization这篇论文的核心公式进行讲解和推导#xff1b;然后用Python代码在Movielens数据集上进行测试实验。一、 背景知识文中作者提到#xff0c;传统的协同过滤算法有两个不足#xff1a;1).不能很好地处理规模非常大的数据#xff1b;2… 首先对Probabilistic Matrix Factorization这篇论文的核心公式进行讲解和推导然后用Python代码在Movielens数据集上进行测试实验。一、 背景知识文中作者提到传统的协同过滤算法有两个不足1).不能很好地处理规模非常大的数据2). 不能很好地处理那些只给出极少评分的用户。概率矩阵分解则能很好的解决上述提到的这两个问题。二、算法推导2.1 定义和描述 假设有 个用户 个商品形成一个 维的评分矩阵 矩阵 中的元素 表示用户 对商品 的评分。假设潜在特征个数为 那么 维的矩阵 表示用户的潜在特征矩阵 用户 的潜在特征向量 维的矩阵 表示商品的潜在特征矩阵 商品 的潜在特征向量。概率模型图如下图所示图1 PMF的概率模型图假设关于已知评分数据的条件分布满足高斯分布 (1)其中 为指示函数如果用户 已经对商品 进行了评分则为1否者为0。再假设用户潜在特征向量和商品潜在特征向量都服从均值为0的高斯先验分布即 (2)注意公式(2)中的 不是指示函数表示一个对角阵。然后计算 和 的后验概率等式两边取对数 后得到 (3)2.2 关键处推导此处插入取对数收到得到公式(3)的详细推导过程对其中 这一项进行推导 满足高斯分布所以可以得到其中 其中 为对角阵对上述式子取对数 得2.3 最优化目标函数求等式3的最大值等价于最小化目标函数 (4)其中 。等式 分别对 和 进行求导得然后用随机梯度下降法SGD更新 和 其中 为步长或者称之为学习率。注意下降的步长大小非常重要因为如果太小则找到函数最小值的速度就很慢如果太大则又可能会出现震荡。令 上述式子简化为 (5) (6)直到满足收敛条件或迭代至最大的迭代次数。2.4 改进和优化论文中还提到用 函数 代替原来的线性高斯模型因为线性高斯模型做预测时会产出评分的有效范围。 故将等式(1)修改为如下 (7)原始评分 则通过函数 映射到 然后再参与运算。 为最大评分值。三、程序实现3.1 代码及实现伪代码如下所示Input: the number of latent factor K, the learning rata eta,
regularization parameters lambda_1,lambda_2, the max iteration Step,
and the rating matrix RInitialization: Initialize a random matrix for user matrix U and item matrix Vfor t 1, 2,...Step dofor (u,i,r) in Rmake prediction prUi^T*Vjerror er-prupdate Ui and Vj by (5) and (6)the algorithm suffers a loss (Ui, Vj, r)end for
end for下面用python在 MovieLens 100K 这个数据集上实现PMF算法。核心代码如下所示def update(p, q, r, learning_rate0.001, lamda_regularizer0.1):error r - np.dot(p, q.T) p p learning_rate*(error*q - lamda_regularizer*p)q q learning_rate*(error*p - lamda_regularizer*q)loss 0.5 * (error**2 lamda_regularizer*(np.square(p).sum() np.square(q).sum()))return p,q,loss3.2 实验结果当训练集测试集8:2时可得到最终的RMSE为0.92左右实验曲线如下所示图2 迭代过程中的loss值图3 迭代过程中的RMSE值完整项目下载地址https://github.com/XiuzeZhou/Recommender-Systemsgithub.com更多 矩阵分解内容和程序请看我的最新博文周秀泽推荐系统系列之二矩阵分解家族zhuanlan.zhihu.com参考资料[1] 小木推荐系统之概率矩阵分解的详细推导过程Probabilistic Matrix FactorizationPMF[2] 追溯星霜PMF:概率矩阵分解