基于spark的协同过滤推荐算法的改进
2019-10-08李淑敏夏茂辉赵志伟
李淑敏 夏茂辉 赵志伟
摘 要: 在协同过滤推荐算法中,如果用户-评价矩阵稀疏,共同评价的物品个数少,就很难准确的计算出用户相似度,加上其它实际因素,会使最终的推荐结果与实际结果有很大的差异,推荐效果不佳。本文旨在通过改进算法的计算方式,融入更多实际因素,最终形成更准确的推荐结果集。首先,对数据进行预处理分类,降低冗余数据的计算和矩阵稀疏性。其次,考虑实际推荐中影响用户相似度较大的因素,对用户相似度计算做出改进。然后,通过构造混合推荐函数,在spark分布式计算平台上进行离线和实时计算,减少了计算时间。通过最终的数据训练和结果集的对比,展示了改进后的算法在效率和准确率的提高程度。
关键词: 协同过滤;聚类分析;用户相似度;spark计算;MASE
【Abstract】: In the collaborative filtering recommendation algorithm, if the user-evaluation matrix is sparse and the number of items evaluated together is small, it is difficult to accurately calculate the user similarity. With the other practical factors, there will be very Big differences between recommendation result and the actual result. The purpose of this paper is to improve the calculation method of the algorithm and incorporate more practical factors to form a more accurate recommendation result set. First, the data is pre-processed to reduce the calculation of redundant data and matrix sparsity. Secondly, considering the factors that affect the user's similarity in the actual recommendation, the user similarity calculation is improved. Then, through the algorithm integration, the hybrid recommendation function is constructed, and the offline and real-time calculations are performed on the spark distributed computing platform, which reduces the time. Through the comparison of the final data training and the result set, the improvement of the efficiency and accuracy of the improved algorithm is demonstrated.
【Key words】: Collaborative filtering; Cluster analysis; User similarity; Spark calculation; MASE
0 引言
隨着大数据时代的到来,网络信息的快速膨胀让人们从信息匮乏的时代不入流信息过载的时代。当我们需要在海量信息中找到自己的个性化信息,我们可以借助于强大的搜索引擎。但是搜索引擎显示内容的前提是输入关键字,而在现实中,很多时候没有明确的需求,比如突然想听最近的流行歌曲,当前流行歌曲成百上千,用户自己可能都不知道哪首歌符合自己的要求,没有关键字输入,搜索引擎也就变得无能为力。此时,推荐系统应运而生[1]。
推荐系统通过分析用户的历史数据,预测出的用户感兴趣的信息或者商品,帮助用户从海量的数据中发掘自己的个性化需求。目前在电子商务、视频音乐、网络社交等各类网站和应用中,推荐系统都扮演着不可替代的角色,所以对推荐系统的探索是非常有意义的。
1 相关工作
推荐系统的核心是推荐算法,协同过滤推荐是推荐系统应用最为成功的技术之一,所以本文将其作为研究的重点。协同过滤推荐算法包括UserCF算法和ItemCF算法。UserCF算法以用户数据为中心,推荐结果集是与目标用户相似度较高的其他用户评价较高的物品。ItemCF算法以物品数据为中心,推荐结果集是与目标用户历史购买物品相似度最高的物品。在数据量丰富的情况下,各种推荐算法的大体都能取得较好的准确率,但现实中,用户的历史数据和评价矩阵几乎都是稀疏的,同时,单台服务器往往无法承受海量次数的数据计算,所以解决评分矩阵的稀疏性和算法的可扩展性是协同过滤推荐需要解决的两大问题[2]。
为了能尽可能使推荐结果的准确度和计算速度达到最优化,本文采用混合推荐算法。首先,先对数据进行预处理,即聚类,通过降维,减少冗余计算降低运行速度和增加服务器压力。其次,采用混合推荐算法,动态调节参数,以期使算法的适用范围更广,同时尽可能小的影响结果集的准确度。再者,算法的计算采用spark分布式计算,将海量数据的计算执行部署在多台服务器上,在增加算法可拓展性的基础上,多条数据并行计算,计算效率明显提高。最后,将通过混合算法计算出的推荐结果集持久化到数据库,使用户的推荐结果得到更快的反馈。
2 算法详细优化流程
2.1 算法优化思路
在平台方面,采用大数据平台,数据计算采用spark分布式计算,数据的存储和计算分布式部署在多台服务器上,无论是离线计算和实时计算,spark的流式处理数据的效率都是非常可观的[4]。在详细算法方面,对推荐算法的多个环节进行优化,以期得到准确性和效率的最大化。首先,通过聚类分析先对用户进行模糊推荐。其次,考虑到物品的热度和好评度,对余弦相似度和皮尔逊相似度进行优化,得到用户间的相似度,然后再计算出预测评分结果集。最后,根据动态参数进行加权,得到最终的推荐列表。
2.2 推荐算法的执行过程
Flume从数据源收集数据,经过解析发送到kafka的topic中,spark程序启动后,加载驱动,从topic中读取实时数据,先进行预分类,然后对用户相似度、预测评分进行计算,得到推荐列表。最后,通过调节自定义参数,计算最终的预测推荐函数,形成最终的推荐列表,持久化到数据库中,推荐给用户。总体流程如图1所示。
2.3 算法详细优化过程
2.3.1 平台优化
不同于传统的推荐算法,大数据计算平台采用分布式开源框架,可以将多台PC机结合到一起,组成主从节点。主节点执行管理功能,负责任务的分发和调度,从节点负责接收主节点的信息,进行数据计算[6]。这种分布式结构在可靠性和承受高并发性都有着突出的优势。
推荐系统通常需要处理庞大的数据,每秒刷新千百条数据是很常见的。如果要考虑推荐结果的准确性和计算时间,离线计算和实时计算都是有必要的。离线计算部分对于数据量、时间间隔要求等限制均较少,能够得到较高的准确率。在线计算在准确度上不如离线,但能够快速响应用户的请求[5]。所以通过实时计算和离线计算结合的形式能够得到更准确的结果。在大数据平台下,离线计算部分以hadoop的组件HDFS作为本地源数据的存储载体,通过spark sql和Mlib进行模型构建和函数计算,计算的结果存储到HBase中或者再次存储到HDFS中。在线计算部分通过flume进行数据的收集,将收集到的数据解析后发送到kafka消息队列中,然后启动spark进行流式计算。
离线和实时计算结合流程图3所示。
2.3.2 数据分类预处理
由于用户数据量非常庞大,在对用户数据进行计算时都需要对数据进行预处理,不仅能够减少冗余数据给计算机带来的计算负担,还能够通过初始筛选,提高计算结果的精度。在各类推荐算法中,一般都需要数据清洗,去燥等预处理,而聚类算法是此阶段必不可少的环节之一。同时,聚类分析的结果还可分析数据的稀疏性和关联性[7]。本文中采用C-Means聚类对数据预处理,通过目标函数来计算出样本点和聚类中心的隶属度从而对数据进行自动分类。该算法的流程是:
由图7可看出在spark平台下,海量数据的计算效率是非常可观的。在实际的生产环境中,一般都是组合多台高性能服务器构成集群,进行每日TB量级的数据计算,综合实时计算和离线计算,为海量用户提供更加准确的推荐服务。
4 结论
通过以上结果的的对比,改进后的混合推荐算法,融入了更多的实际因素,能够更准确的计算用户相似度,最终提高推荐的准确度。同时,基于spark平台的分布计算,在执行效率上有很大的提高。本文给出的基于用户的混合过滤推荐算法以用户为中心,通过用户历史数据挖掘用户的兴趣,并将计算结果持久化,能够让用户在海量信息中更快速准确地定位到自己的兴趣商品。
参考文献
林子雨. 大数据技术原理与应用[M]. 人民邮电出版社. 2017, 242: 27-31.
史尤昭. 数据挖掘技术研究与应用[J]. 软件, 2015, 36(11): 38-42.
栾红波, 文福安. 数据挖掘在大学英语成绩预测中的应用研究[J]. 软件, 2016, 37(3): 67-69.
胡俊, 胡贤德, 程家兴. 基于Spark 的大数据混合计算模型. 计算機系统应用, 2015, 24(4).
谭云志. 基于用户评分和评论信息的协同推荐框架[J]. 模式识别与人工能, 2016, 29(4): 359-366.
杨彬. 移动云计算中分布式计算卸载框架的研究[J]. 软件, 2015, 36(6): 129-133.
赵雪. 基于用户兴趣的个性化协同过滤推荐算法研究[D]. 2014, 17: 15-25.
王成. 基于用户协同过滤推荐效率和个性化改进[J]. 小型微型计算机系统, 2016, 37(3): 428-432.
江周峰, 杨俊, 鄂海红. 结合社会化标签的基于内容的推荐算法[J]. 软件, 2015, 36(1): 1-5.
Francesco ricci, etc. Recommender systemshandbook[M]. NewYork: Springer, 2011, 1(1): 39-184.