推荐系统之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日
    42 1 9
  • Python实现基于改进的KNN网站分类系统

    基于特征熵值分析的网站分类系统实现 摘要 随着互联网技术的飞速发展,Internet 上的 Web 页面呈指数型增长,对于如何自动对这些海量数据有效处理和管理
    2024年05月14日
    2 1 1
  • 基于Struts框架的电子银行系统

    基于Struts框架的电子银行系统 一,背景 随着信息技术特别是网络技术的不断发展,网上电子银行,一种通过网络提供金融服务的新事物,正顺应时代潮流快速发展
    2024年05月14日
    2 1 1
  • 基于SpringBoot框架的医护人员排班系统

    这是一个采用🔥🔥SpringBoot核心框架构建的医疗人员排班管理系统源代码,编程语言为Java,该项目巧妙融合了SpringBoot技术和Vue,js前端框架,开发工具涵盖Idea或Eclipse
    2024年05月23日
    3 1 1
  • 基于MySql和JSP的题库管理系统

    基于MySql和JSP的题库管理系统 第一章 选题意义及可行性 1,1 背景及意义 随着电脑网络的不断普及,计算机技术已经被越来越多地应用到各个行业管理当中
    2024年05月14日
    4 1 3
  • 基于python实现的消消乐记分小游戏

    基于python实现的消消乐记分小游戏 1,文件结构规划 定义config,py文件存储相关参数:包括界面的宽高,整个方格行列个数,总格数等等
    2024年05月14日
    1 1 1
  • 基于SpringBoot框架的宠物领养系统

    这是一份采用Java语言编写的🔥🔥SpringBoot框架宠物领养应用的源代码项目,开发中融入了SpringBoot和Vue技术,支持使用Idea或Eclipse作为开发工具
    2024年05月23日
    4 1 1
  • 基于spring boot实现的成绩分析系统

    基于spring boot实现的成绩分析系统 一,开发目的 随着现代化社会的发展,每年都会有大量苦读寒窗的考生参加高考,但是由于竞争压力大,很多考生由于成绩不理想不能报考自己心仪的高等院校
    2024年05月14日
    4 1 1
  • 基于JAVA的房屋中介管理系统

    基于JAVA的房屋中介管理系统 摘 要 随着住房制度改革不断深化和居民收入水平的提高,住房成为新的消费热点,大部分城市房屋销售价格上涨明显,随之而来国家出台了多项针对房地产行业的调空政策
    2024年05月14日
    2 1 1

发表回复

登录后才能评论