[关闭]
@liushiya 2018-12-11T06:01:40.000000Z 字数 2859 阅读 3504

基于矩阵分解的推荐系统

机器学习 实验


You can click here to get the English version.

实验目的

  1. 探索推荐系统的搭建过程
  2. 理解矩阵分解的原理
  3. 熟练对梯度下降的运用
  4. 在简单小规模数据集上实现推荐系统,培养工程能力

数据集描述

  1. 采用MovieLens-100k数据集
  2. u.data -- 由943个用户对1682个电影的10000条评分组成。每个用户至少评分20部电影。用户和电影从1号开始连续编号。数据是随机排序的。
user id item id rating timestamp
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596

3. 数据集u1.base / u1.test到u5.base / u5.test都是将u.data数据集按照80% / 20%的比例分割的训练集和测试集。
4. 也可按照自己的评估方法划分训练集和验证集。

实验环境

python3,至少包含下列python包:sklearnnumpyjupytermatplotlib
建议直接安装anaconda3,其已经内置了以上python包。

实验时间及地点

2018年11月24日 上午8:50-12:15 B7-138(谭明奎老师) B7-238(吴庆耀老师)

提交截止时间

2018年12月29日 中午12:00

实验形式

团队协作完成

实验步骤

本次实验代码及画图均在jupyter上完成。

利用交替最小二乘法优化

  1. 读取数据,并划分数据集(或直接用u1.base/u1.test到u5.base/u5.test)。根据原始数据填充原始评分矩阵,对于空值可以填充为零。
  2. 初始化用户因子矩阵和物品(电影)因子矩阵,其中为潜在特征数。
  3. 确定损失函数和确定超参数惩罚系数
  4. 利用交替最小二乘法分解稀疏的用户评分矩阵,得到用户因子矩阵和物品(电影)因子矩阵:
    4.1 固定物品因子矩阵求损失函数对用户因子矩阵的每一行(列)求偏导数,令偏导数为零更新用户因子矩阵。
    注: = (-E ,其中,中满足的j行向量拼成的矩阵,的第i行中满足的值拼成的向量,E为单位矩阵(类似于线性回归中的闭式解)
    4.2 固定用户因子矩阵求损失函数对物品因子矩阵的每一行(列)求偏导数,令偏导数为零更新物品因子矩阵。
    4.3 计算在验证集上的,可与上一次迭代的比较判断是否收敛。
  5. 重复步骤4. 若干次,得到满意的用户因子矩阵和物品因子矩阵画出随迭代次数变化的曲线图
  6. 将用户因子矩阵与物品因子矩阵的转置相乘即可得到最终的评分预测矩阵

利用随机梯度下降方法优化(也可以使用全样本梯度下降的方法)

  1. 读取数据,并划分数据集(或直接用u1.base/u1.test到u5.base/u5.test)。根据原始数据填充原始评分矩阵,对于空值可以填充为零。
  2. 初始化用户因子矩阵和物品(电影)因子矩阵,其中为潜在特征数。
  3. 确定损失函数和确定超参数学习率和惩罚系数
  4. 利用随机梯度下降法分解稀疏的用户评分矩阵,得到用户因子矩阵和物品(电影)因子矩阵:
    4.1 随机选择用户评分矩阵中的一个sample;
    4.2 计算该sample的损失函数值对用户因子矩阵某一行(列)和物品因子矩阵某一行(列)的梯度;
    4.3 梯度下降更新一行(列)与一行(列);
    4.4 计算在验证集上的,可与上一次迭代的比较判断是否收敛。
  5. 重复步骤4. 若干次,得到满意的用户因子矩阵和物品因子矩阵画出随迭代次数变化的曲线图
  6. 将用户因子矩阵与物品因子矩阵的转置相乘即可得到最终的评分预测矩阵

本次实验选择一种方法(如本次指导中提到的SGD和ALS,或者你在网上看到的其他方法,使用其他方法的需要注明来源)完成即可。

感兴趣的同学自行探索推荐系统的其它任务和功能。

整理实验结果并完成实验报告(实验报告模板将包含在示例仓库中)。

评分标准

评分项 占比 说明
出勤 40% 特殊情况可向学院请假
代码有效 20% 代码可以编译通过,没有任何编译错误
实验报告 30% 是否按照实验模板填写
代码规范 10% 主要考核代码变量命名是否规范

提交方式

提交流程

  1. 访问222.201.187.50:7001
  2. 点击对应的提交入口
  3. 填写自己的姓名、学号,上传pdf格式的报告和zip格式的代码压缩包

注意事项


有任何的意见或者建议都可以直接在qq群中向助教反映。

参考资料

  1. Matrix Factorization: A Simple Tutorial and Implementation in Python
  2. Tan, W., Cao, L., & Fong, L. (2016, May). Faster and cheaper: Parallelizing large-scale matrix factorization on gpus. In Proceedings of the 25th ACM International Symposium on High-Performance Parallel and Distributed Computing (pp. 219-230). ACM.
  3. Xie, X., Tan, W., Fong, L. L., & Liang, Y. (2017, June). CuMF_SGD: Parallelized Stochastic Gradient Descent for Matrix Factorization on GPUs. In Proceedings of the 26th International Symposium on High-Performance Parallel and Distributed Computing (pp. 79-92). ACM.
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注