




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕 业 设 计中文题目基于用户兴趣感知的高校图书馆推荐系统设计与实现英文题目The Design and Implementation ofRecommendation System for UniversityLibrary Based on Reader Interest Detection院系:计算机与信息工程学院年级专业:2013级软件工程(金融服务工程)姓名:学号:指导教师:职称:2017年5月诚信声明书毕业设计(论文)诚信声明书本人郑重声明:在毕业设计(论文)工作中严格遵守学校有关规定,恪守学术规范;我所提交的毕业设计(论文)是本人在 指导教师的指导下独立研究、撰写的成果,设计(论文)中所引用他人的文字、研究成果,均已在设计(论文)中加以说明;在本人的毕业设计(论文)中未剽窃、抄袭他人的学术观点、思想和成果,未篡改实验数据。本设计(论文)和资料若有不实之处,本人愿承担一切相关责任。学生签名: 年 月 日摘要摘要当今社会,随着计算机科学技术的发展和人类的进步,人们获取知识的途径也变得越来越多。在这样庞大的信息数据时代下,用户如何在海量的信息中快速找到自己所需变得尤为重要。尤其是图书馆领域,由于书目巨多,用户想找一本自己喜欢的书,需要花费相当长的时间,而且有些与用户兴趣相似的书因为信息流通的不及时,也很容易错过,造成图书资源利用率的降低。所以,在这样的前提下,个性化系统随之产生。如何及时感知用户的兴趣变化并推荐相关书籍已成为图书馆所关注的目标。本推荐系统借用理工学院图书馆数据库中的数据来为当前用户推荐,该系统需要实现的主要功能有图书管理功能、用户管理功能、热度排行榜功能、信息检索功能、推荐功能。通过对目前主流的推荐算法如基于用户推荐、基于内容推荐等存在的数据稀缺性,不可扩展性等缺陷分析,我们基于厦门理工学院图书馆的实际需求,提出了一种优化的算法,即以聚类算法来划分不同的用户类型,用欧几里得距离公式来计算用户相似度,把相似的用户分为一个簇,簇中的用户具有高度的相似性,这样就把具有相似兴趣的用户归在一起,随机选择簇中除当前用户的其余用户作为当前用户的邻居用户,最后为当前用户产生推荐。最后会通过实验数据表明,这种基于聚类的算法比传统的基于用户的算法具有更高的准确性。关键词:个性化推荐系统;协同过滤;聚类IVABSTRACTABSTRACTIn todays society, with the development of computer science and technology and human progress, people get more and more ways to acquire knowledge. In such a huge era of information and data, how users quickly find their needs in the vast amounts of information is becoming particularly important. Especially the field of library, because many users want to find books, a book that you love books, need to take a very long time, and some similar user interest in the book because of the flow of information is not timely, but also easy to miss, resulting in lower utilization of Library resources. So, in this case, the personalized system comes into being. How to perceive the changes of users interests and recommend related books in time has become the focus of the library.Based on the current mainstream recommendation algorithm, user recommendation data scarcity are recommended based on content based on the analysis, no defects such as expansion, we based on the actual demand of Xiamen University of Technology library, this paper proposed an optimized algorithm, the clustering algorithm to divide the different types of users, using Euclidean distance formula to calculate the user similarity, the similar user is divided into a cluster, cluster users with a high degree of similarity, so the users with similar interests together, randomly selected cluster except the current user other users as the current user generated neighbor users, recommended last for the current user. Finally, the experimental data show that the clustering algorithm is more accurate than the traditional user based algorithm.Keywords:Personalized recommendation technology; collaborative filtering; clustering目录目 录第1章引言11.1 研究背景11.2 研究意义及目的11.3 本章小结2第2章相关工作32.1 国内外研究现状32.1.1 研究内容32.1.2 研究面临问题42.2 相关技术介绍52.2.1 隐语义模型52.2.2 基于用户协同过滤62.2.3 余弦相似度72.2.4 皮尔森相关性的相似度82.2.5 欧几里得距离相似度82.2.6 基于图书的推荐92.2.7 聚类102.2.8 Spark技术132.2.9 Scala142.3 本章小结14第3章系统设计163.1 系统主要功能需求163.2 系统整体架构173.3 数据库设计183.3.1 需求分析183.3.2 表结构设计193.3.3 数据库视图设计213.4 本章小结22第4章系统实现234.1 数据导出234.2 推荐过程234.2.1 初始化234.2.2 文件读取234.2.3 K-means算法244.2.4 数据储存244.3 推荐算法及代码实现244.3.1 基于用户的协同过滤244.3.2 热门图书推荐264.3.3 聚类算法274.4 登陆界面284.5 本章小结30第5章系统实验315.1 数据集描述315.2 实验指标315.3 实验准备325.4 基于用户借阅行为聚类325.5 基于用户兴趣感知聚类335.5.1 用户兴趣建模335.5.2 聚类方法分析345.5.3 推荐预测效果统计34第6章结论与展望356.1 结论356.2 展望35参考文献36致 谢37第1章 引言第1章 引言1.1 研究背景随着电子科技时代的来临,信息资源呈现爆炸式增长,过载的数据给用户获取信息带来极大困扰1。而在电商领域也是,大量的信息给用户寻找商品时,带来了极大的困扰。那么,如何根据每个用户的偏好特性快速寻找满足用户日益需求的信息;如何高效率地给用户推荐,已成为当今时代所面临的重要问题。个性化推荐系统就是在这种条件下诞生的。它能够依据用户的兴趣特征,在海量信息中挖掘用户可能感兴趣的信息,并给用户做出相应的推荐2。当然,在传统图书馆系统带许多方便的同时,也带来了各种各样难以处理的问题,并且检索效率极低。而个性化系统推荐的产生,结合用户的历史查阅、浏览、借阅次数的信息,对用户需求进行动态检测,并挖掘出用户感兴趣的内容,并为他们提供相应的推荐服务。然而传统的这些推荐系统中,都是需要用户对项目的评分才可以推荐的,计算图书之间的相似度问题也依赖于评分矩阵,但是绝大多数的用户都不会去评价,这就导致了获取用户真实兴趣的困难。因此本文针对数据的稀疏性,冷启动提出了基于聚类的推荐方法,即以聚类算法来划分不同的用户类型,用欧几里得距离公式来计算用户相似度,把相似的用户分为一个簇,簇中的用户具有高度的相似性,这样就把具有相似兴趣的用户归在一起,随机选择簇中除当前用户的其余用户作为当前用户的邻居用户,最后为当前用户产生推荐。采用聚类方法来感知用户兴趣,提高推荐系统的准确率。1.2 研究意义及目的推荐系统的目的就是根据用户兴趣,推荐给当前用户可能喜欢的图书。这样方便用户对信息的查找,提高效率并且能快速选择出自己喜欢的。本论文通过对目前主流的推荐算法如基于用户推荐、基于内容推荐等存在的数据稀缺性,不可扩展性等缺陷分析,我们基于厦门理工学院图书馆的实际需求,提出了一种聚类算法,产生推荐结果。早期的推荐系统只需简单用户注册信息,而现今阶段则需要挖掘出用户的隐性需求。根据推荐算法的不同,当前已有的个性化推荐系统可以分为以下几类:基于用户的推荐系统:基于内容的推荐系统:以及混合式推荐系统,即将各种推荐方法混合使用,以提高推荐算法的精度和覆盖率3。其中协同过滤,也就是基于用户的推荐是目前所有应用种最为广泛的一种推荐技术,其核心思想就是依据相似用户的邻居用户所选图书为当前目标用户推荐图书。1.3 本章小结通过对当前已有的个性化推荐系统分析,提出了一种聚类算法并产生推荐结果。那么工作的主要内容可以大致分为以下几章节:第1章 引言:详细探讨了本课题所选的选题背景和意义,讲述国内外的研究现状,明确指出本文的组织结构,剖析了目前存在的问题。最后介绍本文的主要工作。第2章 相关工作:阐述了个性化推荐原理,简要介绍推荐系统中的一般概念和几种个性化推荐技术。并且指出各自的优缺点,提出了一种优化的算法解决问题。第3章 系统设计:本章先分析了个性化图书馆系统需要具备的功能,再把各功能整合为各个模块。做了数据库需求分析,设计了数据结构,并且把数据结构转变成为数据库表。第4章 系统实现:本章详细介绍了整个推荐算法的实现过程,先展示界面然后详细讲述了推荐算法,介绍了基于用户的推荐和热门推荐以及基于聚类的推荐并展示了他们的核心代码。第5章 系统实验:采用理工图书馆数据库数据,仅使用SSE作为初步评价标准,最终给出实验结果。第6章 总结与展望:本文采用的是K-Means算法处理,该方法在很大程度上改善了基于用户的推荐算法,提高推荐的质量。但还有很多不足之处,希望改进。2第2章 相关工作第2章 相关工作2.1 国内外研究现状随着电子技术的飞速发展,个性化推荐系统技术逐渐成为学术界非常热门的话题。就目前来说,推荐系统在电子商务,计算机科学技术等领域都作为研究的重点对象,并把它发展成为一门独立的学科进行重点研究。同时在这时也出现了许多著名的大型推荐系统,如众所周知的Amazon(亚马逊)最大的网上书店系统,它记录了用户商品购买行为和网页浏览情况和用户对图书的评价矩阵,依据的是基于用户的推荐算法,对这些记录的数据挖掘分析,得到用户的兴趣爱好,产生目标用户的推荐结果。再如MovieLens推荐系统,它是一种基于用户评分的推荐系统实例。在每次给用户提供个性化推荐服务之前,都先要求用户至少对15部电影进行评价打分,系统通过用户的真实评分情况,利用相似度算法去寻找与目标用户相似性程度最高的邻居用户,然后根据这些排名最前的邻居用户对当前现有的图书的评分值采用皮尔森相关系数产生结果,并把结果作为对目标用户的推荐4。国内的个性化推荐系统研究始于96年,02年具体开始应用于实际。一些典型的个性化图书馆是浙江大学的“我的图书馆系统”和中国科学院图书馆的“我的数字图书馆”,以及在个性化推荐领域出版网上书店等等,使用的主要技术是基于聚类,基于隐含语义标记以及基于用户技术三者相结合的方法。将每个不同的算法产生的推荐结果采用一种线性模型来把他们组织混合在一起,这样不需要用户自己去寻找信息,借用个性化推荐就能主动为用户进行服务,把各种数字资源结合在一起主动推送给用户的同时,同时接受用户反馈的数据,并且不断完善用户兴趣矩阵模型,提高推荐系统的质量5。当然,每个用户的记录数据越是丰富,推荐的质量自然而然也就越是可靠。还有类似于豆瓣之类的推荐系统,通过分析用户一系列行为:例如,在读、读过、浏览时间、浏览次数等从这些海量的数据,并从中挑选给用户作为推荐结果。2.1.1 研究内容推荐系统基本框架大体可以分为4层:(1) 数据采集层:也就是数据获取。获取访问者的访问记录信息是数据获取的最主要模块,主要包括:浏览图书时间的长短,浏览的图书的类别等,通过登陆oracle数据库连接理工学校图书馆数据库,数据就可以轻松获得。(2) 数据预处理:预处理,对于获取到的访问数据,需要先整理,把无关内容去掉,把缺失的数据填充。对于几种数据预处理方法有标准化也叫z-score规范化。(3) 最小-最大规范化,对原始数据进行线性变换,变换到0,1区间等等。规范化,其实就是将不同变化范围的数据值映射到一个相同的范围,常见的都是用0到1,出于这个原因也把此方法称为归一化方法。这样的好处使后面的数据处理方便,另一方面保正程序运行时收敛速度加快,方便计算6。(4) 推荐层:有协同过滤,它一般采用最近邻技术,利用最近邻对目标图书的评价来预测目标用户对图书的评价,评价越高的就可以当作次目标用户的推荐结果,它也是推荐系统中最为成功的一种技术。基于内容的推荐是从目标图书信息出发,计算图书之间相似度,更具用户的行为偏好,做出相应的推荐。上下文推荐,社会化推荐等等,每种算法都各自有自己的计算方法等。(5) 推荐效用评价层:目前用来做评价性能的几种计算公式。主要有:精确率,召回率,平均绝对值误差,多样性等这些指标去衡量一个推荐系统效果的好坏,并在需要的时候可以扩充公式,对其进行修改,类似的公式有修正的皮尔森系数等等。2.1.2 研究面临问题虽然推荐系统可以很好的提高用户查找信息的速度,但也存在很多棘手的问题,对于目前主流的推荐算法:协同算法,基于图书推荐和混合推荐算法存在的问题如下:(1) 冷启动问题:冷启动是指一个新用户刚进入一个系统时,没有关于他的相关的历史纪录,因此系统无法对他做出相应的推荐结果或者很难对新用户提供个性化服务,另一方面,当新图书没有对其借阅,浏览过的记录,也就无法将其推荐给用户。那么基于用户的推荐就面临两个冷启动,而基于图书的推荐只面临一个。当然解决此问题可以采用混合推荐或者基于关联规则或聚类的方法。本文中将采用同一个班中有过借阅记录的人作为目标的用户的推荐结果。(2) 用户兴趣变化问题:因为随着社会的发展,用户的兴趣也会随之影响。有可能一个用户前几天喜欢这个,过几天又喜欢别的。因为对目标用户的推荐是基于邻居用户的数据,而这其中隐含着一个条件就是每个用户都必须有相对集中并固定的兴趣爱好,否则无法找到邻居用户进行推荐7。(3) 数据稀疏性问题;用户评价矩阵的极度稀疏,一方面难以寻找最近邻,另一方面计算相似性非常耗时间。从而使得用户或图书之间的相似性计算结果与实际相差甚大,导致推荐质量难以令人满意。(4) 用户隐私问题:由于推荐系统需要利用用户的历史行为信息,甚至用户的联系方式,邮箱等重要的用户隐私问题。如果不能保护好用户的隐私反遭泄露,后果是很可怕的。针对这方面的研究主要可以有分布式协同过滤,混合推荐等算法解决。(5) 可扩展性:随着用户和图书的不断增多,要找到适合某个用户所需的图书,那么难度随之增大,这样就导致了推荐系统的精度降低。2.2 相关技术介绍引入个性化推荐,可以依据不同用户的行为偏好来为用户自己量身定做基于个人兴趣的推荐信息服务,这样节省了用户的麻烦,提高图书利用率。完整的个性化系统一般都需要三个模块:用户行为模块,用户行为处理模块和个性化推荐算法模块。用户行为模块中信息获取的方式主要有两种:显示获取与隐示获取7。也就是隐语义模型和显语义模型。2.2.1 隐语义模型隐语义模型,简称LFM,是一种隐语义分析算法,其核心思想就是通过潜在的用户特征把用户和图书联系在一起8。先对所有的图书进行分类,再根据用户的兴趣分类并给用户推荐该分类中的图书,这就是隐语义的实现方法。所以隐语义大致分为这么几步骤:先给图书分类,紧接着给用户兴趣分类以及计算用户对这些类别的感兴趣程度,最后对于用户感兴趣的类别,推荐出适合的书给不同的用户。当然隐语义的好处很明显,可以基于用户的行为自己进行分类。不需要人工分类,减少人工成本,并且这个类的数量完全可控。计算用户对图书兴趣如公式2.1所示:公式2.1LFM用户U对物品I的兴趣度其中,k为分类的类别。p为用户兴趣和第k个类别的喜好程度,q为图书i中第k个类别所占的比例。最优化损失函数:(真实喜爱减去计算喜爱)如公式2.2所示:公式2.2最优化损失函数上式中的是用来防止分类的个数太多所导致误差减少的不合理,其他参数可以在MovieLens1M数据集数据集上进行反复实验得到7。具体做法:首先明确操作的数据是正反馈数据还是负反馈数据.对于正反馈,只要用户评过分数就认为用户对该图书感兴趣,否则就没有。负反馈而言,越热门的图书用户却没有评价过,说明当前用户是个特殊用户,那么就认为该用户对这个图书没有兴趣。P,Q参数采用梯度下降迭代计算出,最终完成推荐。2.2.2 基于用户协同过滤协同过滤的核心思想是:在用户群中通过查找与当前目标用户相似的邻居用户,在根据邻居用户对图书的评分来预测目标用户对该图书的评分,采用的是皮尔森算法。最终把评分最大的前几项推荐给用户。主要包括以下两个步骤:1. 找到和当前这个目标用户兴趣相似的邻居用户集合,2. 找到当前这个集合中用户所喜欢的而且目标用户没有借阅过的图书推荐给当前的目标用户9。首先,常用的算法有余弦相似度、改进的余弦相似度、皮尔森相似度等10。此处采用皮尔森计算用户之间相似度,挑选出相似度最大的前N个,从而预测目标用户的兴趣。为什么余弦相似度的计算效率很低,是因为很多用户之间并没有对同样的图书产生过借阅行为,所以在分子部分等于零的时候没有必要再去计算分母。这里可以转化成建立倒插表进行优化算法,然后根据倒查表T,建立用户相似度矩阵W,可以一目了然看到哪些用户没有产生过相同行为,按么就不计算它。此矩阵是对称矩阵也是余弦相似度的分子部分。具体公式如图2.1所示:图2.1建立用户-物品倒插表用户U对物品I的兴趣度如公式2.3所示:公式2.3用户U对物品I的兴趣度用户对图书的喜爱程度可以转化为在邻近用户中,邻居用户借阅过此图书,与用户兴趣相似度两矩阵相乘便是结果,如公式2.4所示:公式2.4计算兴趣度2.2.3 余弦相似度余弦相似度是利用两用户借阅次数作为依据,度量出用户之间的相似性。用户A与用户B共同借阅过的相同图书数目作为分子,借过的共同数目的根号作为分母。它最大的优点是计算时不考虑当前用户借阅量的多少,哪怕一个用户借阅书目很多,另一个很少,也都有可能得到这两个用户是相似的结果,但缺点也很明显,因为对借阅数量数据的不敏感,导致即便借阅图书次数差距很大的用户也有可能变成相似的用户,如公式2.5所示公式2.5余弦相似度2.2.4 皮尔森相关性的相似度皮尔森相关系数它的取值是在-1,1之间。(1) 一个变量增大,另一个变量也增大,是正相关的,那么相关系数就大于;(2) 一个变量增大,另一个变量却减小,是负相关的,那么相关系数就小于;(3) 相关系数等于0,则代表他们之间不存在线性相关关系。皮尔森相关系数可以转化为分子为两个变量的协方差除于分母为两个变量的标准差,如公式2.6所示:公式2.6皮尔森相关系数但有两个缺点:1. 假如两个用户共同只对一个图书有过评分,那么相似度也计算不出来。2. 再者,用户间重叠的评分项数量越多并不代表两者就更相似,有可能只喝重叠几次的用户构成相似关系。2.2.5 欧几里得距离相似度指在N维空间中两个点之间的距离。倘若两者之间距离越小,用户相似度就越大,倘若两者距离越大,用户相似度就越小。公式只需要知道用户A对项目X的评分,以及对项目Y的评。同样知道B的对X,Y两项目评分,就可以计算他们之间的距离。但缺点是:如果两用户没有共同借阅书目,那么计算不了距离,也就没法做相似度,那么距离公式如图2.7所示:公式2.7欧几里得距离公式相似度公式如图2.8所示:公式2.8欧几里得距离相似度公式2.2.6 基于图书的推荐核心思想:根据用户对目标图书的相似的图书评分来预测对该用户对图书项的评分。如果你要给一个用户进行推荐,会挖掘当前用户曾经喜欢的图书,从而再去推荐类似的图书。其实就是利用用户的已知偏好,兴趣等特征和图书的特征相匹配,借此来为用户推荐出新的感兴趣的图书,具体做法如下:(1) 针对每个用户,建立图书间的同现矩阵,如图2.2所示:图2.2欧几里得距离相似度公式物品相似度如公式2.9:公式2.9物品相似度公式分母是喜欢图书i的用户数,而分子是同时喜欢图书i和图书j的用户数。图书相似度如图2.3所示:图2.3图书相似度表(2)用户对图书的喜爱程度可以转化为在邻近图书中,当前用户对邻居图书的喜爱程度与图书相似度两矩阵相乘,得出的结果作为推荐14。用户u对图书j的感兴趣程度如公式2.10所示:公式2.10用户对图书感兴趣程度2.2.7 聚类聚类:聚类就是将数据归集成簇的过程,使得同一个簇之间的元素相似度很大,而不同的簇之间相似度差异却很大。之所以这样做,是因为这样得到的类间元素相似性最大化而且类与类元素差异性最大化11。目前推荐系统中常用的聚类方法有:划分方法,模糊聚类,系统聚类,基于网格的方法,基于模型的方法,层次方法,高维数据的方法等等。产生簇的实现过程:根据用户的历史信息如浏览次数或借阅时间等将用户划分为若干个不同的类。首先在所有用户中随机选出几个用户作为聚类的初始中心点,采用平均公式不断计算中心点与其他用户的相似度。那么不断计算聚类中心与剩余的各个用户之间的相似度,产生邻居集合,最终给出推荐结果。其实说白了这个过程就是采用当前常用的这几种相似度的计算方法,这里采用欧几里得距离来计算相似度。并根据相似度将相应用户分配到对应的类簇,然后计算生成的簇的中心点,一直反复这个过程,直到各个类簇的中心点不再产生变化。12虽然聚类很方便但是也有自己的缺点,他没有将所有的用户进行相似度而只是与部分的用户进行比较,所以推荐的效果会受到影响。因此为了提高推荐质量,就需要把相似度很高的用户分到一组中,这样的结果才能保证推荐效果的质量。K-Means算法:他的优点是解决数据快速简便,用起来很方便,但缺点也很明显,(1) 必须事先给出分类的个数也就是K值,但通常K多少才合适都是不知道的,但是K值会影响最后推荐的结果,因此可以反复试炼得到一个满意的值。(2) 聚类初始中心的选择会对结果产生很大影响,可能最终得不到想要的效果,因此反复试验,值到满意。对于算法的实现过程,概要地描述如下:(1) 机选择k个初始质心;(2) 如果没有满足聚类算法终止条件,则继续执行步骤3,否则转步骤5;(3) 计算每个非质心点p到k个质心的欧几里德距离,将p指派给距离最近的质心;(4) 根据上一步的k个质心及其对应的非质心点集,重新计算新的质心点,然后转步骤2;(5) 输出聚类结果,算法可以执行多次,使用散点图比较不同的聚类结果。概要地总结一下k-means聚类算法的一些要点:(1) 除了随机选择的初始质心,后续迭代质心是根据给定的待聚类的集合S中点计算均值得到的,所以质心一般不是S中的点,但是标识的是一簇点的中心。(2) 基本k-means算法,开始需要随机选择指定的k个质心,因为初始k个质心是随机选择的,所以每次执行k-means聚类的结果可能都不相同。如果初始随机选择的质心位置不好,可能造成k-means聚类的结果非常不理想。(3) 计算质心:假设k-means聚类过程中,得到某一个簇的集合Ci=p(x1,y1),p(x2,y2),p(xn,yn),则簇Ci的质心,质心x坐标为(x1+x2+xn)/n,质心y坐标为(y1+y2+yn)/n。(4) k-means算法的终止条件:质心在每一轮迭代中会发生变化,然后需要重新将非质心点指派给最近的质心而形成新的簇,如果只有很少的一部分点在迭代过程中,还在改变簇(如,更新一次质心,有些点从一个簇移动到另一个簇),那么满足这样一个收敛条件,可以提前结束迭代过程。(5) k-means算法的框架是:首先随机选择k个初始质心点,然后执行聚类处理迭代,不断更新质心,直到满足算法收敛条件。由于该算法收敛于局部最优,所以多次执行聚类算法,通过比较,选择聚类效果最好的结果作为最终的结果。(6) k-means算法聚类完成后,没有离群点,所有的点都会被指派到对应的簇中。算法流程图如图2.4所示:图2.4算法流程图K-Means+算法解决K中心点的选择问题,基本思想是在选择中心点时候使其之间的距离尽可能的远,然后调用K-Means算法。Bisectingk-means(二分k均值)算法解决K-means算法的初始中心点对聚类结果影响较大问题,其基本思想是初始将所有样本作为一个聚类,将其一分为二,使用K-means算法,然后选择其中一个再次分为两份,循环迭代,直到聚类个数达到给您定K值为止,如表2.1所示:表2.1推荐系统比较推荐方法优点缺点基于项目推荐推荐结果直观,容易解释不需要领域知识稀疏问题;新用户问题;复杂属性不好处理;要有足够数据构造分类器基于内容推荐新异兴趣发现、不需要领域知识;随着时间推移性能提高;推荐个性化、自动化程度高;能处理复杂的非结构化对象稀疏问题;可扩展性问题;新用户问题;质量取决于历史数据集;系统开始时推荐质量差;基于规则推荐能发现新兴趣点;不需要领域知识规则抽取难推荐质量差;产品名同义性问题;个性化程度低;基于效用推荐无冷开始和稀疏问题;对用户偏好变化敏感;能考虑非产品特性用户必须输入效用函数;推荐是静态的,灵活性差;属性重叠问题;基于知识推荐能把用户需求映射到产品上;能考虑非产品属性知识难获得;推荐是静态的2.2.8 Spark技术Spark是Apache旗下顶级开源项目,是一个基于内存的集群计算平台,是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。Spark非常小巧玲珑,使用的语言是Scala。Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark是在Scala语言中实现的,它将Scala用作其应用程序框架。与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。虽然Spark与Hadoop有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。Spark还引进了名为弹性分布式数据集(RDD)的抽象。当执行SparkSQL语句的顺序为:1.对读入的SQL语句进行解析(Parse),分辨出SQL语句中哪些词是关键词(如SELECT、FROM、WHERE),哪些是表达式、哪些是Projection、哪些是DataSource等,从而判断SQL语句是否规范;2.将SQL语句和数据库的数据字典(列、表、视图等等)进行绑定(Bind),如果相关的Projection、DataSource等都是存在的话,就表示这个SQL语句是可以执行的;3.一般的数据库会提供几个执行计划,这些计划一般都有运行统计数据,数据库会在这些计划中选择一个最优计划(Optimize);4.计划执行(Execute),按Operation-DataSource-Result的次序来进行的,在执行过程有时候甚至不需要读取物理表就可以返回结果,比如重新运行刚运行过的SQL语句,可能直接从数据库的缓冲池中获取返回结果。2.2.9 ScalaScala是一门多范式编程语言,是一种纯粹的面向编程语言,同时又无缝集成了函数式编程和命令编程风格。Scala可以与Java交互,通过调用Scalac将Scala源文件编译成Java字节码文件,运行在JVM之上。Scala可以调用任何Java类库,同样可以从Java调用Scala代码。Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。2.3 本章小结协同过滤也就是基于用户的推荐。它是一种非常经典的推荐算法,同时也作为推荐系统中应用最为成功的一种技术11。它的优点很多,之所以它流行的原因,是因为不需要太多关于计算机方面的技能,简单易学也很方便,实验的结果也很不错。当然也存在着各种局限性。令人头痛的冷启动问题:两个用户没有同时对任何一个图书有过行为(浏览,借阅等),则无法计算他们之间的相似性;其二,当出现新用户的时候,因为新用户没有数据,所以我们无法为新用户推荐图书。因此针对这些棘手的问题,本文提出一种K-Means算法,划分不同用户类型,将相似用户聚类,不同的类差别又很大。最后在类中用排序算法帅选出可能与当前用户相似的邻居用户,依据邻居用户借阅过的图给当前用户推荐12。15第3章 系统设计第3章 系统设计3.1 系统主要功能需求本推荐系统借用理工学院图书馆数据库中的数据来为当前用户推荐,该系统需要实现的主要功能有图书管理功能、用户管理功能、热度排行榜功能、信息检索功能、推荐功能。图书管理功能的主要内容是:图书的添加与删除。图书的查询与修改。该功能主要是系统管理员对系统用户的管理,通过此模块的功能可以实现对图书的添加,修改,删除操作。用户功能主要内容:读者借阅与归还,读者登陆,用户注册。借阅的前提条件是这个用户注册过图书馆账号,所以借阅的时候会先判断是不是读者而非用户。不是读者那么就需要注册,注册成功才可以借阅。借阅图书后应在一个月内归还图书。热度排行榜功能主要内容是:根据图书馆数据库中用户借阅次数最多的图书,那么就将排名前20的图书展示出来,这样的好处是在系统中操作的用户可以很清楚的看到一些主流的图书信息,便于选择。推荐功能主要内容:基于用户的推荐和聚类推荐。根据读者的借阅记录为读者提供两种不同的推荐。第一种是基于用户系统过滤图书推荐,因为采用的是理工图书馆的数据,而通常图书馆没有采用打分的过程来了解用户对图书的喜好程度,那么就利用用户的历史记录帮助用户完成打分这一项,得出用户对图书的喜爱程度,最终将排名前10的推荐结果推荐给用户;还有一种是基于聚类算法实现推荐,前提条件是注册过图书馆,并且有借阅记录的读者,那么我们对这些读者聚类,读者登陆系统以后,系统会自动识别读者的类别,并将该类别的所有读者的借阅记录也进行聚类,分析得出借阅次数最高的不同图书推荐给读者。该功能是个性化图书系统设计的核心目标,也是为了和基于用户的协同过滤技术进行对比。信息检索功能主要包括两个:图书书目的检索和读者信息的检索。当输入图书书名时,检索出图书馆中有相同书名的书。当读者输入学号时,检索出该学生姓名,借阅记录等信息。基于以上对个性化图书馆系统功能分析的基础,对各功能进行整合,划分出四大功能模块,分别为图书管理模块、用户模块、信息检索模块、热度排行榜模块、推荐模块。图书管理模块包括管理员对图书的添加,删除,修改。用户模块包括读者借阅与归还,读者登陆和用户注册。推荐模块包括基于用户的推荐和聚类推荐。信息检索模块主要包括图书书目的检索和读者信息的检索。热度排行榜模块是排序出借阅次数39第3章 系统设计最高的书。下图为划分后的系统功能模块图如图3.1所示:图3.1功能模块图3.2 系统整体架构本系统主要分为三个模块,分别为数据库数据导出模块,数据运行模块,推荐服务模块。数据导出导入模块的实现主要通过查找数据库中用户的借阅历史记录数据,提取到有用的信息并储存在文件系统中。然后通过协同过滤或聚类的算法读取文件并进行有关计算,完成图书推荐。推荐服务模块是全用Java实现的,包括界面的展示。读者登陆以后就可以为读者进行推荐,如图3.2所示:图3.2系统架构图3.3 数据库设计3.3.1 需求分析本系统的使用者分为用户和读者。用户可以进行的操作有图书查询和热门推荐。而读者可以进行图书的借阅与归还,基于用户推荐等等。那么,数据库中的数据结构如下:(1) 读者信息,包括读者记录号,读者姓名,读者ID,读者班级和读者密码.(2) 用户信息,包括用户姓名,用户ID,用户班级和用户密码,以及用户邮箱。(3) 借阅日志信息,包括借阅记录号,借阅日期,借阅条码号,借阅时间,借阅类别(3031借书,3033还书,3035续借),读者记录号。借阅条码号是与馆藏表的条码号相连,读者记录号与读者表的记录号相连。(4) 馆藏表信息,包括条形码和书目记录号。(5) 书目表信息,包括书目记录号,书目和作者。(6) 推荐表信息,包括用户ID和书目ID,评分项。实体联系图如图3.3所示:图3.3实体联系图3.3.2 表结构设计根据需求分析把数据库的数据结构转变成相应的数据库表。个性化图书馆系统数据库中需要的表结果如表3.1,3.2,3.3,3.4,3.5,3.6所示。表3.1读者表new_reader列名含义数据类型是否主键不为空唯一R000读者记录号VARCHAR(45)R01a姓名VARCHAR(45)R03u班级VARCHAR(45)R01b读者证号VARCHAR(45)R01p读者密码VARCHAR2(64)表3.2用户表new_reader列名含义数据类型是否主键不为空唯一R000用户记录号VARCHAR(45)R01a姓名VARCHAR(45)R03u班级VARCHAR(45)R01b用户证号VARCHAR(45)R01p用户密码VARCHAR2(64)R03e用户邮箱VARCHAR2(64)表3.3借阅日志表ilog列名含义数据类型是否主键不为空唯一LOG0借阅记录号VARCHAR(45)LOGA1借阅日期VARCHAR(45)LOGA2借阅时间(秒)VARCHAR(45)LOGC借阅类别VARCHAR(4)LOGI条码号VARCHAR(45)LOGH书目记录号VARCHAR(45)LOGG读者记录号VARCHAR(45)备注外键:LOGG;参考表:new_reader;参考列:R000外键:LOGI;参考表:holding;参考列:HLDA外键:LOGH;参考表:z_bilios;参考列:BIB_RECNO表3.4馆藏表holding列名含义数据类型是否主键不为空唯一HLDA条码号VARCHAR(45)HLDB书目记录号VARCHAR(45)备注外键:HLDB;参考表:z_bilios;参考列:BIB_RECNO外键:HLDB;参考表:ilog;参考列:LOGH表3.5书目表z_bilios列名含义数据类型是否主键不为空唯一BIB_RECNO书目记录号VARCHAR(45)TITLE书名VARCHAR(45)AUTHOR作者VARCHAR(45)表3.6推荐表recomend列名含义数据类型是否主键不为空唯一Read_id用户IDVARCHAR(45)Book_id书目IDVARCHAR(45)备注外键:Read_id;参考表:new_reader;参考列:R000外键:Book_id;参考表:z_bilios;参考列:BIB_RECNO3.3.3 数据库视图设计根据上述数据库表,可以创建图书借阅视图。通过视图,可以方便的查看图书借阅信息而不必每次都编写重复复杂的SQL语句。图书借阅累计借阅时间视图V_BORROW_TIME用于查看读者借阅一本图书的借阅天数,读者借阅视图V_BORROW_LOG用于查看读者借书记录。创建图视图V_BORROW_TIME如图3.4所示:图3.4创建 V_BORROW_TIME 视图创建读者借阅视图 V_BORROW_LOG如图3.5所示:图3.5创建 V_BORROW_LOG 视图3.4 本章小结本章先分析了个性化图书馆系统需要具备的功能,再把各功能整合为各个模块。紧接着描述了系统的整体架构。对架构中各个层级的功能及其之间的联系进行了详细的设计说明。做了数据库需求分析,设计了数据结构,并且把数据结构转变成为数据库表。第4章 系统实现第4章 系统实现4.1 数据导出本应用程序一共需要导出四个表,new_reader表,ilog表,holding表,z_biblios 表。其中,读者表、书目表、馆藏表变更周期较小,第一次导出后,可以选择手动按需导出。借阅日志表更新周期较快,可以选择定期按时导出。使用 DBA 用户创建文件目录及授予普通用户xmut_lib读写文件目录权限代码如下:SQLCREATE OR REPLACE DIRECTORY XMUT_LIB_DIR AS D:XMUT_LIB;SQLGRANT READ, WRITE ON DIRECTORY XMUT_LIB_DIR to xmut_lib;4.2 推荐过程4.2.1 初始化每个Spark应用都由驱动器程序来发起集群上的并行操作。驱动程序使用SparkContext对象来访问Spark,这个对象代表计算机集群的一个连接。使用SparkContext,可以用它来创建RDD进行后续操作。Spark SQL组件可以通过创建SQLContext对象来使用。通过SQLContext对象,可以读取格式化文件,并将其注册为临时数据表,通过SQL语言进行数据操作。SQLContext对象可以通过SparkSession对象来获取。主函数main,该函数是程序入口,同时进行应用程序初始化。在该函中设置Spark运行参数,第一个是应用程序名称,在应用程序启动后,可以从Web平台根据这个名称查看程序运行情况。第二个参数是运行模式,可以选择使用本地模式或是集群模式,同时本地模式可以指定运行 CPU 核心数量。然后调用程序其他模块,将其组合成为完整的应用程序。4.2.2 文件读取其中,csv 格式的文件以纯文本的形式储存表格数据(数字和文本)。文件可以由任意数量的记录组成,记录间使用换行符分隔,字段间使用逗号或制表符分隔。Spark可以通过外部数据源接口来定义该类型的解析器。该接口由com.databricks:spark-csv定义。通过这个类库,我们可以在Spark S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-广西-广西汽车驾驶与维修员二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广西-广西地质勘查员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东信号工-机车信号设备维修二级(技师)历年参考题库典型考点含答案解析
- 烹饪甜品基础知识培训班课件
- 2025年事业单位工勤技能-安徽-安徽堤灌维护工一级(高级技师)历年参考题库典型考点含答案解析
- 烹饪原料储存
- 烷烃的命名教学课件
- 2025年驾驶证考试-摩托车理论考试-摩托车驾驶证(科目一)历年参考题库典型考点含答案解析
- 热镀锌基本知识培训课件
- 热轧槽钢基础知识培训
- 国网面试模拟题:电网运营与规划类面试题目及答案
- 2025年《工会法》知识竞赛试题库及答案
- 2025氯化工艺复审题库及答案详解
- 2025年军队文职人员(司机岗)历年考试真题库及答案(重点300题)
- 维克多高中英语3500词汇
- 专升本00465心理卫生与心理辅导历年试题题库(考试必备)
- 既有重载铁路无缝线路改造及运维技术探索
- 2022年教师副高职称评答辩范文(七篇)
- 高压罗茨风机选型参数表
- 中国监察制度史
- 架桥机日常检查记录表架桥机验收及试吊安全检查表
评论
0/150
提交评论