推荐系统之Python

推荐系统 小组成员:孙家宜,李彦欣,郝旭 一,实验相关统计信息 用户数量: 19835 物品数量: 624961 打分数量: 5002419 打分平均值: 49

本文包含相关资料包-----> 点击直达获取<-------

推荐系统

小组成员:孙家宜,李彦欣,郝旭

一、实验相关统计信息

用户数量: 19835 物品数量: 624961 打分数量: 5002419

打分平均值: 49.65618273879098

实验原理

二、基本实验思路

处理数据:根据 train.txt 中的数据得到[userid, itemid, rating]形式的 list,构建出 user 对 item 打分的矩阵。

由于以上矩阵是稀疏的,因此定义聚类对未打分项进行填充,降低矩阵的稀疏程度。具体做法是:选取 itemAtribute.txt 中所给的每个 item 的属性值对 item 聚类。

开始训练:将数据集分为 trainset 和 testset,然后用 trainset 进行训练,用 testset 评估算法的准确度,不断调整参数,提升算法的准确度。

最后用模型预测 test.txt 中数据的得分并按照要求存储到 result.txt 中,再算出 RMSE。

三、主要算法

本小组使用潜在因子模型 SVD(奇异值分解)的方法构建推荐系统。

MiniBatchKmeans 聚类

此算法主要为了解决矩阵稀疏问题。

在统的 K-Means 算法中,要计算所有的样本点到所有的质心的距离。如果样本量非常大,比如达到 10 万以上,特征有 100 以上,此时用传统的 K-Means 算法非常的耗时,就算加上 elkan K-Means 优化也依旧。在大数据时代,这样的场景越来越多。此时 Mini Batch K-Means 应运而生。

顾名思义,Mini Batch,也就是用样本集中的一部分的样本来做传统的 K-

Means,这样可以避免样本量太大时的计算难题,算法收敛速度大大加快。当然此时的代价就是我们的聚类的精确度也会有一些降低。一般来说这个降低的幅度在可以接受的范围之内。

在 Mini Batch K-Means 中,我们会选择一个合适的批样本大小 batch size,

我们仅仅用 batch size 个样本来做 K-Means 聚类。batch size 个样本一般是通过无放回的随机采样得到的。

为了增加算法的准确性,我们一般会多跑几次 Mini Batch K-Means 算法,用得到不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

SVD 算法我们设 user 给 item 的评分的矩阵为 A,SVD 算法就是将矩阵 A 分解为成矩阵

和 V,其中 A,U,V 满足:

A:输入的矩阵

U:左奇异矩阵

V:右奇异矩阵

Σ:奇异值向量上述算法成立是在 A 中所有值都已知的情况下,但是实际上打分矩阵中有大量未知值。所以我们构建另一种分解。

这里

利用基于求函数最小值问题的方法:求出所有满足如下条件的向量

四、求解过程

梯度下降找近似解梯度下降是一种查找函数最小值的方法。这里我们使用随机梯度下降的方法,所以首先要构造损失函数:

这里公式的后半部分为正则项,防止过拟合。接下来求出函数关于 p,q 的导数,就可以应用梯度下降。

预测评分对未知 u,i 对的分数进行预测公式:

新的损失函数:

评估模型这里我们使用 RMSE(均方根误差)

五、关键部分代码解析

普通函数: myfind 函数:用来查找一个 list 里某个值的索引【关键】cluster 函数:(MiniBatchKmeans 聚类算法)根据 itemAttribute.txt 进行聚类,返回 itemid 的 list 和聚类得到的每个点的分类 label,代码如下

LoadTrainset 函数:加载训练集,主要两部分

根据 train.txt 生成元素为[userid, itemid, rate/10]的 rating_list 根据聚类结果,对评分数 <15 的 user 进行打分填充最后返回 rating_list,user 总数,item 总数LoadTestset 函数:加载测试集,根据 test.txt 生成元素为[userid, itemid]的test_list,返回 test_list

Trainset 类中的函数

get_all_ratings 函数:返回所有[userid, itemid, rate] list get_user_ratings 函数:返回某个 user 的所有[userid, itemid] listglobal_mean 函数:返回训练集所有打分平均值 construct_trainset 函数:从 train.txt 中加载数据并创建训练集,返回一个 Trainset 的对象。

SVD 类中的函数

InerProduct 函数:返回两个矩阵的内积。

【关键】train 函数:SVD 算法,运用梯度下降进行训练,得到训练好的一系列参数值和矩阵,代码如下

【关键】predict 函数:对 test.txt 中未知的某对 u,i 对的打分进行预测(由于前面存储的已知打分值[rate/10],所以这里返回值要乘 10)返回打分值,代码如下

predict_all 函数:对 test.txt 中未知的所有 u,i 对进行打分预测,返回所有分值的 list

split_train_and_test 函数:根据 train.txt 分割出新的训练集和测试集,返回训练集 trainset 和测试集 testset。

RMSE 函数:计算均方根误差的函数

【关键】evaluation 函数:计算训练出的模型的均方根误差,返回均方根误差的值,代码如下

六、结果分析

我们将数据集随机分成训练集和测试集(训练集 9 成测试集 1 成),测试集上

RMSE 结果如下:

最后作为预测结果的 result 文档结构如下:

c++ <user id>|<numbers of rating items> <item id> <score>

结果预览:(详情见 result.txt)

测试环境:

时间消耗:343s

空间消耗:2g

七、分析算法的改进与不足

初步测试中,由于参数设定的太大,消耗时间太长。

降低迭代次数,将评分范围缩小至【0,10】,同时引入 k-means 聚类,得以将时间缩短至 6min,rmse 也减小到 32。

考虑使用 tensorflow 来加速实现,但由于未知原因内存使用量太高而放弃。

参考文献

  • 基于中小型电商平台的个性化推荐系统建模(华北电力大学(北京)·梁德祥)
  • 个性化音乐推荐系统的设计和研究(武汉纺织大学·李丹丹)
  • 基于Apache Spark的增强型奇异协同过滤推荐系统(北京交通大学·ADEM SEID AHMED)
  • 基于中小型电商平台的个性化推荐系统建模(华北电力大学(北京)·梁德祥)
  • CLARANS改进算法在音乐网站智能推荐系统中的应用(吉林大学·魏佳)
  • 面向软件知识学习平台的个性化推荐研究(山东大学·李琳)
  • 基于短视频内容理解的用户偏好预测模型研究(北京交通大学·Muhammad Irbaz Siddique)
  • 基于Hadoop的电子商务推荐系统的设计与实现(闽南师范大学·彭兴)
  • 基于复杂网络的移动互联App应用推荐系统(复旦大学·汤浙斌)
  • 基于Hadoop的电子商务推荐系统的设计与实现(闽南师范大学·彭兴)
  • 融合多重注意力机制的深度推荐方法研究与应用(江苏科技大学·张宗海)
  • 基于协同过滤的推荐算法比较研究(重庆大学·高寒)
  • 基于混合模式的个性化推荐系统的研究与应用(武汉理工大学·梁洁)
  • 基于组合算法的电子商务推荐系统的研究(西安工业大学·杨亚楠)
  • 基于中小型电商平台的个性化推荐系统建模(华北电力大学(北京)·梁德祥)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码港湾 ,原文地址:https://m.bishedaima.com/yuanma/36034.html

相关推荐

  • 企业设备管理系统

    这是一个🔥🔥基于SpringBoot框架的企业设备管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于SSM框架的实验室设备管理系统源码+论文

    基于SSM框架的实验室设备管理系统源码+论文 随着科技的发展和实验室规模的不断扩大,传统的实验室管理方式已显现出明显的局限性,目前,大多数实验室仍采用纸质打印等人工管理方式
    2024年05月07日
    16 1 3
  • 基于JSP和MySQL的宿舍财产管理系统

    基于JSP和MySQL的宿舍财产管理系统 1 开发背景 1,1 系统开发背景与意义 宿舍管理是高校后勤工作中的一个重要组成部分,是高校“服务育人”中的一项内容
    2024年05月14日
    5 1 1
  • 基于JSP和MySQL的网上订餐管理系统的设计与实现

    基于JSP和MySQL的网上订餐管理系统的设计与实现 摘 要 随着科学技术与经济的快速发展,网络信息技术也有了显著的提升与进步,当今的社会是一个集数字化
    2024年05月14日
    2 1 1
  • 基于 Python 制作的炸弹人小游戏

    基于 Python 制作的炸弹人小游戏 导语 T_T 月末了才发现这个月就没写几篇文章,愧疚之下,决定更下正常而言每月都会出的 Python 制作小游戏系列
    2024年05月14日
    2 1 1
  • 基于Java Web的智能二维码门禁管理系统

    基于 Java Web 的智能二维码门禁管理系统的设计与实现 摘要 我们身边的很多事物都已悄然接入互联网,由此本文提出基于 Java Web 和微信小程序的一套门禁系统的设计
    2024年05月14日
    2 1 1
  • 基于SSM和mysql的个人博客系统

    基于SSM和mysql的个人博客系统 摘 要 随着互联网的发展,博客在自由和共享的精神的影响下应运而生,博客的出现让我们有更多机会在日常生活中向他人展示自己的观点和信息
    2024年05月14日
    9 1 4
  • C++模拟爱奇艺web视频上传

    c++模拟爱奇艺web视频上传 说明 此次学习的是HTTP的post协议,使用使用multipart form-data上传文件, 理解HTTP消息头 (五)——使用multipart/form-data上传文件 写的比较好的一篇帖子 https://www
    2024年05月14日
    2 1 2
  • 基于JSP的学生信息管理系统

    Student-information-managemen 基于JSP的学生信息管理系统 参考文献 开放性实验室管理系统的设计与实现(南昌大学·刘定军) 基于JSP的辽宁大学毕业设计指导系统的设计与实现(吉林大学·王一凡) 基于J2EE的高校人力资源信息管理的设计与实现(四川大学·付明柏) 学生综合信息管理平台的设计与实现(吉林大学·刘铁刚) 基于Web的学生管理信息系统的分析和设计(厦门大学·叶露阳) 基于MVC与ASP
    2024年05月14日
    2 1 1
  • 基于Python的PyGame的俄罗斯方块游戏设计与实现

    基于Python的PyGame的俄罗斯方块游戏设计与实现 摘 要 近年来,随着游戏产业的突飞猛进,游戏玩家的技术也是与日俱增,当你看见游戏高手完美的表演时
    2024年05月14日
    2 1 1

发表回复

登录后才能评论