基于矩阵分解的推荐系统 机器学习
实验
实验目的
探索推荐系统的搭建过程
理解矩阵分解的原理
熟练运用梯度下降
在简单小规模数据集上实现推荐系统,培养工程能力
数据集描述
采用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 ,matplotlib 。
建议直接安装anaconda3 ,其已经内置了以上python包。
实验步骤 利用交替最小二乘法优化
读取数据,并划分数据集(或直接用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,或者你在网上看到的其他方法,使用其他方法的需要注明来源)完成即可。
整理实验结果并完成实验报告。
感兴趣的同学自行探索推荐系统的其它任务和功能。
整理实验结果并完成实验报告(实验报告模板将包含在示例仓库 中)。
实验代码及报告提交
提交内容
代码及实验报告
实验报告需要按照模板编写,并导出成pdf文件(模板未必与本次实验内容完全契合,可适当修改模板章节)
代码及报告需要打包,命名格式为“班级_姓名_学号.zip”。例如:“1班_张三_201700000000.zip”
提交代码时不要在压缩包中包含数据集
提交时间
2019年12月6日晚上24:00截止,请统一交到各班的学委(或其他班干);学委于12月7日下午17:00前发到助教的QQ邮箱,或者联系助教用U盘拷给助教。
评分标准
评分项
占比
说明
出勤
40%
特殊情况可向学院请假,请假条交给助教
代码有效
30%
代码是否正确
实验报告
30%
是否认真按照实验模板填写
注意事项
实验报告需按时提交,非特殊情况逾期补交无效
代码强烈推荐用python语言写,但使用其它编程语言也是允许的
实验报告使用中英文均可;LaTex、Word均可(如果用Word编写实验报告,需导出成pdf格式)
有任何的意见或者建议都可以直接向助教反映。
参考资料
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.