基于矩阵分解的推荐系统 机器学习
实验
You can click here to get the English version.
实验目的
探索推荐系统的搭建过程
理解矩阵分解的原理
熟练对梯度下降的运用
在简单小规模数据集上实现推荐系统,培养工程能力
数据集描述
采用MovieLens-100k 数据集
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包:sklearn ,numpy ,jupyter ,matplotlib 。
建议直接安装anaconda3 ,其已经内置了以上python包。
实验时间及地点 2018年11月24日 上午8:50-12:15 B7-138(谭明奎老师) B7-238(吴庆耀老师)
提交截止时间 2018年12月29日 中午12:00
实验形式 团队协作完成
实验步骤 本次实验代码及画图均在jupyter上完成。
利用交替最小二乘法优化
读取数据,并划分数据集(或直接用u1.base/u1.test到u5.base/u5.test)。根据原始数据填充原始评分矩阵 ,对于空值可以填充为零。
初始化用户因子矩阵 和物品(电影)因子矩阵 ,其中 为潜在特征数。
确定损失函数和确定超参数惩罚系数 。
利用交替最小二乘法分解稀疏的用户评分矩阵,得到用户因子矩阵和物品(电影)因子矩阵:
4.1 固定物品因子矩阵求损失函数对用户因子矩阵的每一行(列)求偏导数,令偏导数为零更新用户因子矩阵。
注: = ( - E ,其中, 为 中满足 的j行向量拼成的矩阵, 为 的第i行中满足 的值拼成的向量,E为单位矩阵(类似于线性回归中的闭式解)
4.2 固定用户因子矩阵求损失函数对物品因子矩阵的每一行(列)求偏导数,令偏导数为零更新物品因子矩阵。
4.3 计算在验证集上的 ,可与上一次迭代的 比较判断是否收敛。
重复步骤4. 若干次,得到满意的用户因子矩阵 和物品因子矩阵 ,画出 随迭代次数变化的曲线图 。
将用户因子矩阵 与物品因子矩阵 的转置相乘即可得到最终的评分预测矩阵 。
利用随机梯度下降方法优化(也可以使用全样本梯度下降的方法)
读取数据,并划分数据集(或直接用u1.base/u1.test到u5.base/u5.test)。根据原始数据填充原始评分矩阵 ,对于空值可以填充为零。
初始化用户因子矩阵 和物品(电影)因子矩阵 ,其中 为潜在特征数。
确定损失函数和确定超参数学习率 和惩罚系数 。
利用随机梯度下降法分解稀疏的用户评分矩阵,得到用户因子矩阵和物品(电影)因子矩阵:
4.1 随机选择用户评分矩阵中的一个sample;
4.2 计算该sample的损失函数值对用户因子矩阵某一行(列)和物品因子矩阵某一行(列)的梯度;
4.3 梯度下降更新 一行(列)与 一行(列);
4.4 计算在验证集上的 ,可与上一次迭代的 比较判断是否收敛。
重复步骤4. 若干次,得到满意的用户因子矩阵 和物品因子矩阵 ,画出 随迭代次数变化的曲线图 。
将用户因子矩阵 与物品因子矩阵 的转置相乘即可得到最终的评分预测矩阵 。
本次实验选择一种方法(如本次指导中提到的SGD和ALS,或者你在网上看到的其他方法,使用其他方法的需要注明来源)完成即可。
感兴趣的同学自行探索推荐系统的其它任务和功能。
整理实验结果并完成实验报告(实验报告模板将包含在示例仓库 中)。
评分标准
评分项
占比
说明
出勤
40%
特殊情况可向学院请假
代码有效
20%
代码可以编译通过,没有任何编译错误
实验报告
30%
是否按照实验模板填写
代码规范
10%
主要考核代码变量命名是否规范
提交方式
提交流程
访问222.201.187.50:7001
点击对应的提交入口
填写自己的姓名、学号,上传pdf格式的报告和zip格式的代码压缩包
注意事项
实验报告和代码可以多次上传,多次上传会覆盖之前提交的文件。
上传之后可以刷新页面,在下面的文件列表里面检查是否上传成功。
助教会在实验截止时间保存所有上传的结果,截止时间之后上传的文件无效。
如果用Word编写实验报告,需导出成pdf格式。
代码文件打包格式必须为zip,请不要提交rar格式的压缩文件。
提交网址只能校园网访问。
代码用python语言写,实验报告评分标准英文好于中文,latex好于word。
有任何的意见或者建议都可以直接在qq群中向助教反映。
参考资料
Matrix Factorization: A Simple Tutorial and Implementation in Python
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.
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.