admin 管理员组文章数量: 1086019
2024年4月16日发(作者:逗号表达式和赋值表达式)
基于Spark的协同过滤推荐算法研究
焦健
(三峡大学计算机与信息学院,湖北宜昌443002)
摘要院目前,经过国内外专家和学者长时间的应用与研究,协同过滤推荐算法的优势日益明显,并
且逐步成为推荐系统的主流算法。新兴的计算框架Spark得益于基于内存计算的优势,与传统的
MapReduce大数据计算框架在运算效率上比较有着显著的提高。通过在Spark计算框架下进行各种协同
有较高准确率。
关键词院Spark框架;协同过滤;ALS算法;隐语义模型
过滤推荐算法的准确识别率的对比得出结论,基于ALS优化的隐语义模型,在几种协同过滤算法中具
1Spark计算框架
写好的程序分发到各个节点袁并让每个工作节点并行运
Spark是一个开源的大数据计算引擎框架
[1]
遥它将编
orativeFiltering袁简称Item-CF冤袁基于物品的协同过滤
推荐在计算时只考虑利用物品本身信息袁并不用从用户
的角度考虑问题遥对于物品相似度的度量基于用户对于
物品的喜好袁利用该喜好程度发掘相似的物品袁将它推
荐给喜好相似物品的用户遥
2.1.3相似度算法
因为在两种基于邻域的协同过滤推荐算法中都需要
算自己的任务遥Spark的主要开发语言为Scala袁它与
Java十分类似袁但它又具有函数式编程思想袁为开发人
员提供更好的编程模型遥Spark吸取了计算框架MapRe鄄
duce的许多宝贵经验袁近些年它的性能提升很快袁
Spark与MapReduce相比袁在理想状态下它在内存计算
的速度比MapReduce要快100倍袁甚至在硬盘上的计
算速度也要快10倍以上遥主要是因为Spark拥有弹性
数据集RDD袁在执行任务时将中间结果读取到内存里
[2]
袁
不像MapReduce通过对磁盘进行读写来传递里面的结
果袁通过充分使用内存资源提升了计算的效率
[3]
遥
计算相似度来确定一定数量的用户或物品近邻袁然后才
能进行推荐袁所以需要用到相应的相似度计算方法袁目
前主要的相似度计算方法有两种院
渊1冤余弦相似度
余弦相似度这种评价两者相似性的度量袁依据两向
量夹角余弦确定遥具体公式如下院
2
2.1基于邻域的协同过滤
协同过滤推荐算法
2.1.1基于用户的协同过滤算法
公式渊1冤
渊2冤皮尔逊相似度
基于用户的协同过滤算法渊User-BasedCollabora鄄
tiveFiltering袁简称User-CF冤袁是推荐系统中早期的经
典算法袁它是基于系统使用者过去留下的活动数据对用
户的喜好进行归纳渊评分尧购物尧点赞等冤袁并且对喜
好的程度进行度量
[4]
遥通常情况下袁是基于使用者对物
品评价来作为喜好程度袁从而来挖掘和当前使用者相似
的邻域对象袁邻域对象的计算一般使用野K-邻居冶算
法袁找到K个最相似邻域对象的历史喜好数据中程度
最高袁并且当前使用者没有过任何行为的物品袁推荐给
当前的使用者遥
2.1.2基于物品的协同过滤算法
2020.03
皮尔逊相关系数是在两个项目之间有交集的偏好的
集合上进行相似度的计算遥公式如下院
公式渊2冤
2.2基于模型的协同过滤
2.2.1矩阵分解
在隐语义模型中进行矩阵分解的的主要原理为对用
户-物品矩阵进行偏好建模袁通常情况下就是构建用户-
物品评分矩阵袁并且用矩阵分解的形式将稀疏的用户-
物品评分矩阵转化成稠密的用户-物品评分矩阵袁预测
基于物品的协同过滤推荐算法渊Item-BasedCollab鄄
40
使用者对某物品的喜好程度袁最后针对该使用者进行推
荐遥其原理为将用户-物品评分矩阵分解为两个U*K和
I*K
户和物品的
的因子矩阵
K个属性或特征
袁其中对K因子的解释为隐性的关于用
袁并且不需要刻意去在意
每个因子的具体含义是什么袁只需要选取合适的值袁将
两个因子矩阵相乘后袁就可以使用重新计算的矩阵结果
进行评分预测遥
2.2.2
在实现隐语义模型的矩阵分解时
基于最小二乘法的矩阵分解(ALS
袁
)
用户和物品都会
映射到一个多维的因子矩阵中袁用户-物品的偏好矩阵
为这两个矩阵相乘的结果袁两个用户和物品的因子矩阵
分别表示为u和m袁现在的问题就是求解结果矩阵的
最优值袁这时损失函数可表示为院
公式渊3冤
此时最小二乘法便可以作为一个求解方法加入到最
优化求解过程中袁其原理就是在每一次进行迭代的时候
固定其中一个因子矩阵袁更新另一个因子矩阵袁之后反
复重复这个过程进行迭代直至模型收敛袁当实际使用
时袁往往会自己设置迭代次数来求解遥
以上就是对协同过滤推荐算法的研究袁接下来将对
以上的算法在Spark计算框架上做出实验来进行比较袁
得出在Spark平台上推荐效果较好的协同过滤算法袁从
而为以后搭建Spark推荐系统打好基础遥
3
3.1
实验及结果分析
使用的
搭建实验平台
Hdoop分布式大数据平台袁数据存储在
HDFS
平台由
存储系统
3台虚拟机组成
袁计算框架为
袁虚拟机分别配置为
Spark计算框架
4
遥
核心
分布式
袁2G
内存袁使用CentOS6.8操作系统遥3台虚拟机主要包括
一个Master节点袁两个Slave节点袁所有节点配置SSH
无密码远程登录遥
3.2
采用了经典的推荐系统公开数据集
实验数据集
MovieLens
揖13铱
要选取用户评分表的数据袁主要字段有userId袁movieId袁
袁主
rating袁
字段袁在前期的数据预处理中将其删除
timestamp袁其中时间戳字段在本实验中为无用
遥本实验选用的
是100K渊约10万条冤袁1M渊约100万条冤袁和从数据集
中随机抽取出1万条评分数据这3种规模的数据进行实
验袁分别随机取数据集中的80%作为训练集袁20%作
为测试集遥
3.3
实验是典型的基于推荐算法的实验
实验评测标准
袁所以实验最注
重的就是结果的准确性袁对于测试算法的准确性袁一般
采用均方根误差渊RMSE冤以评价算法的准确程度遥误
差的大小代表着准确率的高低遥其中r
i
表示真实评分袁
p
i
表示预测评分袁其具体公式为院
公式渊4冤
3.4
于皮尔逊相似度受到稀疏矩阵的影响较大
ALS
实验结果及分析
算法的运行效果受所选取参数的影响
袁基于近邻的
袁同时由
两种协同过滤算法将采用余弦相似度算法遥ALS算法受
所选取的迭代次数和隐因子的数目影响较大袁所以应该
先经过多次试验选取出最佳参数来进行对比遥
先通过100K的数据集ALS算法的迭代次数在达到
10
的提升变得缓慢
次后就趋于收敛
袁为了不增加更高的计算量
袁同时隐因子数量在40左右准确率
袁实验选取
ALS
数确定后
的迭代次数为
袁用这3个算法对
10袁隐因子数目为
3个不同规模数据集进行实
40遥将合适的参
验袁结果如图1所示遥
0.9
1
User-Based
0.8
Item-Based
0.7
ALS
0.6
0.5
0.4
0.3
0.2
0.1
0
10K
数据集规模
100K1M
图1
他两种算法
Spark计算框架中
袁之前通过对
ALS算法的整体准确率要优于其
Spark框架的了解和研究袁
Spark
正是需要多次迭代的算法
计算框架对迭代计算具有较好的支持
袁所以这个结果不出预料
袁并且
遥
ALS
另
一方面看出袁对于数据量的增大基于邻域的协同过滤算
法并未出现十分明显的准确率变化袁但是ALS却有较
大的提高袁是因为ALS是基于模型的算法袁随着数据
量的提升袁数据更加丰富袁模型训练量也变大袁大大提
(下转第73页)
2020.03
41
//变化
update-|-1.1.1.04-|-010_020__system_
|-020_010__user_
由于多个水平扩展的微服务实例连接的是同一个数
据库实例袁所以可以通过数据库表锁来实现多个微服务
实例之间的同步执行数据库脚本遥如图2所示袁是多个
微服务实例在数据库同步锁下袁并发执行完本次版本中
所有需要的数据库SQL脚本文件遥
4
4.1数据库脚本执行顺序控制
数据库脚本并发执行
数据库中有版本记录表schema_version袁把有序的
SQL文件列表与schema_version表中最大的版本号比
较袁找到需要执行的SQL文件的版本号袁再与schema_
确定需要执行的SQL脚本文件遥
4.2数据库脚本并发执行控制
version表中对应版本号的最大模块号_序号比较袁最终
5结语
微服务架构专注于将应用程序模块化袁将业务分解
成较小相互独立的服务袁解决了单体架构中的诸多问
题袁例如院程序构建和维护困难袁技术栈难以更新袁每
一项变更需要重构整个应用程序等遥
在微服务架构成为主流的今天袁为了解决相同微服
务实例水平扩展袁带来的数据库脚本初始化执行与升级
的问题遥在此提出了微服务的数据库安装脚本和升级脚
本的版本控制尧目录规划尧文件名定义解决办法袁并为
水平扩展的多个微服务实例提供了一种并发执行数据库
脚本的方案遥
参考文献
[1]
工业出版社,2019.
2017.
[美]克里斯窑理查森.微服务架构设计模式.机械
在微服务水平扩展时袁相同版本的微服务会有多个
微服务实例运行袁这会导致多个进程同时初始化数据库
表数据袁造成冲突遥需要通过同步机制控制多个微服务
实例执行数据库脚本遥
微服务1
循环
未执行SQL文件数跃0
获取到锁袁执行SQL脚本
未获取到锁袁等待
未获取到锁袁等待
执行一个SQL脚本
1
2
n
微服务2微服务n
数据库
表锁
[2]李艳鹏,杨彪.分布式服务架构.电子工业出版社,
执行一个SQL脚本结束袁唤醒后续微服务
唤醒微服务2
执行下一个SQL脚本
[3]jonson_jackson微服务理论与实践.什么是微服务.
执行一个SQL脚本结束袁唤醒后续微服务
图2多微服务实例并发执行SQL文件
(上接第41页)
高了模型的推荐效果遥
以找到算法的不足之处并对其进行改进遥
参考文献
[1]ZahariaM,ChowdhuryM,FranklinMJ,:
clustercomputingwithworkingsets[C]//UsenixCon鄄
ferenceonHotTopicsinCloudComputing.2010.
系统仿真技术,2016.
4结语
主要研究了当前比较流行的协同过滤推荐算法袁深
入研究它们的算法原理袁并且对Spark计算框架的原理
和应用有了一定的了解遥通过对比试验袁ALS算法在
Spark计算框架下比基于邻域的协同过滤算法有更高的
准确性袁这主要得益于Spark计算框架对迭代计算较好
的支持遥通过研究对Spark计算框架下的协同过滤推荐
算法有了一定的了解和应用能力袁对往后搭建基于
Spark的推荐系统打下了一定基础遥虽然取得了不错的
典的协同过滤算法袁但是如果进行更深入的研究应该可
实验效果袁但是还有不足之处袁比如这些算法虽然是经
[2]于娜娜.基于Spark的协同过滤算法的研究[J].
[3]吴信东,嵇圣硙.MapReduce与Spark用于大数据分
析之比较[J].软件学报,2018,29(6):260-281.
[4]ZhangZ,KudoY,orselectionforus鄄
er-basedcollaborativefilteringusingcovering-based
roughsets[J].AnnalsofOperationsResearch,2017,
256(2):359-374.
2020.03
73
版权声明:本文标题:基于spark的协同过滤推荐算法研究 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713252284a626046.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论