




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学科研训练报告餐饮电子商务个性化推荐系统推荐算法研究 院 系: 软件学院班 级: 1105班姓 名: 张学 号:指导老师: 餐饮电子商务个性化推荐系统推荐算法研究The Research on recommendation algorithm of Recommendation System in Catering E-Commerce 指导老师: 餐饮电子商务个性化推荐系统推荐算法科研报告 摘要:本文首先阐述了本算法的思想,基于分类的协同过滤推荐算法。给出了形式化的数学表达式。给出了协同过滤算法部分的详细代码和实验过程。然后,本文讨论了实验平台的改进设想。最后讨论了基于Hadoop和Mahout平台推荐算法的实现。Abstract: This paper first expounds the thought of this algorithm, the collaborative filtering recommendation algorithm based on classification. The formal mathematical expressions are given. Detailed code part of the collaborative filtering algorithm is proposed and the experimental process. Then this paper discusses the experiment platform of improvement ideas. In the end implementation of recommended algorithm is discussed based on Hadoop and Mahout platform.关键词:推荐系统;协同过滤;Hadoop; MahoutKey words: recommendation system; Collaborative filtering; Hadoop一、 算法概述不同的推荐系统,它们的推荐算法和评价指标都不尽相同。作为餐饮推荐系统,至少存在以下几个方面,与传统(如图书)的推荐系统(购买行为)不同。(1)受地域和消费水平影响非常大。对于餐饮来说,极少会有去很远的地方或与自身消费相去甚远的餐馆消费。(2)餐饮往往还有社交因素。有很多餐饮消费发生在宴请、聚餐等行为。(3)餐饮还有重复性消费的特点。由于时间和本人自身水平问题,很多问题尚不能考虑完全。暂且提出如下的推荐算法。(1) 根据餐馆和用户的位置,将餐馆和用户分类。相同地区的餐馆和用户才能发生相应关系。这样做第一可以提高推荐质量,更主要的是可以减少算法的开销。(2) 根据购买记录、浏览记录以及用户兴趣模型综合评分。这样可以在一定程度上解决冷启动问题和评分稀疏性问题。(3) 根据评分利用协同过滤方法进行推荐。二、 协同过滤算法的实现2.1基于用户的协同过滤算法主要步骤描述由于时间问题和实验条件(缺乏实验数据源),本次训练暂且实现了基于用户的协同过滤算法。算法的主要步骤如下。数据表示:在Userbased协同过滤推荐中,必须根据不同用户对商品的评分信息产生推荐结果。用户评分数据可以用一个mn阶矩阵A(m,n)表示,m行代表m个用户,n列代表n个项,第i行第j列的元素凡J代表用户i对项j的评分。用户评分数据矩阵如图2.1所示。 图2.1: 用户评分矩阵 最近邻查询:最近邻查询是整个Useobased协同过滤推荐算法的核心部分,其效果和效率很大程度上决定了User一based协同过滤推荐算法的效果和效率。所谓最近邻居,就是购买行为或评分行为与当前用户比较相似的若干用户。最近邻查询阶段实质上就是Userbased协同过滤推荐算法的模型建立阶段。1). 余弦相似性(Cosine):用户评分看作为n维项空间上的向量,如果用户对项没有进行评分,则将用户对该项的评分设为O,用户间的相似性通过向量间的余弦夹角度量。设用户i和用户j在n维项空间上的评分分别表示为向量I,j,则用户i和用户j之间的相似性sim(I,j)为:分子为两个用户评分向量的内积,分母为两个用户向量模的乘积。通过上面提出的相似性度量方法得到目标用户的最近邻居,下一步需要产生相应的推荐。设用户u的最近邻居集合用刀N公表示,则用户u对项i的预测评分pu,可以通过用户u对最近邻居集合凡叽中项的评分得到,计算方法如下 sim(u,n)表示用户u与用户n之间的相似性,Rn.j表示用户n对项i的评分。Ru和Rn分别表示用户u和用户n对项的平均评分。2.2 实验的具体方法和步骤 实验环境: 开发工具:MyEclipe8.5 语音:java数据源;用户评分矩阵static double userScore = new double 2,4,4,4,3,3,2,2,3,2,3,4,2,4,2,3,1,3,4,3,3,3,1,2,1,3,4,3,3,5,3,2,1,3,5,4,4,3,2,1,3,2,3,3,3,3,2,3,3,4,4,3,3,3,2,2,4,2,5,3,3,3,1,1,;相关代码:import java.util.Arrays;public class userCF /* * param args */ 索引分别代表用户和商品,项代表用户对商品的评分static double userScore = new double 2,4,4,4,3,3,2,2,3,2,3,4,2,4,2,3,1,3,4,3,3,3,1,2,1,3,4,3,3,5,3,2,1,3,5,4,4,3,2,1,3,2,3,3,3,3,2,3,3,4,4,3,3,3,2,2,4,2,5,3,3,3,1,1,;static double sim = new double0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,;static double preScore = new double0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,;/ 相似用户集合static int nearUser = new int0,0,0;/ 计算相似度矩阵public static void setSim()for(int i=0;i8;i+)for(int j= 0;j8;j+)simij= vectorInnerProduct(i,j) / vectorProduct(i, j);/ 计算向量模的乘积public static double vectorProduct (int vector1,int vector2)int Product1 = 0;int Product2 = 0;for(int i = 0;i8;i+)Product1 += userScorevector1i * userScorevector1i;for(int i = 0;i8;i+)Product2 += userScorevector2i * userScorevector2i;return Math.sqrt(Product1) * Math.sqrt(Product2);/ 计算向量内积public static double vectorInnerProduct (int vector1,int vector2)double toutle = 0;for(int i = 0;i8;i+)toutle += userScorevector1i * userScorevector2i;return toutle;/ 功能:将相似度最大的三个用户索引号按序储存在数组nearUserpublic static void simMax(int user) double tempSort = new double8; for(int i=0;i8;i+) tempSorti = simuseri; Arrays.sort(tempSort); for(int i=0;i8;i+) if(tempSort6=simuseri) nearUser0= i; break; for(int i=0;i8;i+) if(tempSort5=simuseri) nearUser1= i; break; for(int i=0;i8;i+) if(tempSort4=simuseri) nearUser2= i; break; / 计算用户对项目的平均评分public static double avgUserToItem(int user) double totalUserToItem = 0;for(int i = 0; i8; i+)totalUserToItem += userScoreuseri;return totalUserToItem / 8;/ 计算预测得分public static double predictiveScore(int user,int item) double Score = 0;double sum1 = 0;double sum2 = 0; for(int i = 0;i 3;i+) sum1 += simuser nearUseri *( userScorenearUseriitem - avgUserToItem(nearUseri); for(int i = 0;i 3;i+) sum2 += simuser nearUseri ; Score = avgUserToItem(user) + sum1/sum2 ;return Score;public static void main(String args) / TODO Auto-generated method stubsetSim();simMax(0);for(int i = 0; i 8; i+)for(int j = 0; j 8; j+)preScoreij = predictiveScore(i,j );for(int i = 0; i 8; i+)for(int j = 0; j 8; j+)System.out.print(preScoreij + );System.out.println(); / 平均准确度误差double avePre = 0;double totlePre = 0;for(int i = 0; i 8; i+)for(int j = 0; j 8; j+)totlePre += Math.abs( userScoreij-preScoreij) / userScoreij );avePre = totlePre / 64; / 平均准确度随机误差double avePreR = 0;double totlePreR = 0;for(int i = 0; i 8; i+)for(int j = 0; j 8; j+)totlePreR += Math.abs( userScoreij-Math.random()*5) / userScoreij );avePre = totlePre / 64;System.out.println(avePre);avePreR = totlePreR / 64;System.out.println(avePreR);2.3 实验的运行结果如图2.3所示 图2.3:运行结果图可知采用此算法平均误差百分比为25.13%采用随机数对比平均误差百分比为61.63%实验表明本算法是具有显著效果的。如果是客观的数据源,我相信其准确率还会增加。三、 实验平台的改进在数据挖掘中,往往是大规模数据。本次实验室在极为普通的环境下实现,并没有考虑到实际应用中的问题。本次科研训练中我也尝试在一些专业的平台下实验。3.1 weka平台众所周知,weka是一款极为流行的数据挖掘平台工具。研究生助教也是给我们介绍的是这个平台。Weka平台我认为有以下几个优点:(1)使用简单。很多数据挖掘算法只要轻轻一点,即可完成。(2)数据图形化。很多算法可以提供图形化的结果和挖掘过程。(3)开源免费。可以进行二次开发。Weka平台如果想加入自己的算法,就必须根据其源码进行二次开发。我的开发环境为MyEclipe8.5。导入开发包后的工程目录如图3.1所示。 图3.1: 工程目录主要的包如图3.2所示。 图3.2:主要的包目录如包的名字所示。主要算法在相对的包中,weka.core提供了基本的功能类(类目录如图3.3所示)。主要的类有Attribute类,提供了属性的相关操作。Instance类提供了实例的相关操作。Weka.gui包提供了关于图形化界面的相关功能。 图3.3:weka.core包目录加入算法的步骤比较简单。根据weka的API规范写出算法类。然后可以在图形化接口中加入相关算法的选项。但是我们做的有关推荐算法,比如协同推荐,在weka中却没有任何体现和相关类或接口。所以我认为用weka作为实验工具做个性化推荐算法不是一个好的选择。3.2 Hadoop和Mahout平台Hadoop 是当前热门的云计算解决方案之一, 是Apache 组织的一个开源的分布式计算平台, 以Hadoop 分布式文件系统(HDFS)和MapReduce 为核心为用户提供了系统底层细节透明的分布式基础架构. 从而用户可以利用Hadoop 轻松地组织计算机资源, 搭建自己的分布式计算平台, 并且可以充分利用集群的计算和存储能力, 完成海量数据的处理.现在Hadoop 已经发展成为包含了多个子项目的集合, 它们提供互补性服务或在核心层上提供了更高层的服务。显然利用Hadoop平台是一个非常好的选择。在选择数据库(数据仓库)上HBase是个很好的选择。HBase是一个分布式、面向列的开源数据库, 在Hadoop 之上提供类似Bigtable 的能力. 不同于一般关系数据库的数据模型, 用户将数据存储在一个表里,一个数据行拥有一个可选择的键和任意数量的列. 主要用于需要随机访问、实时读取的大数据. 相比其他传统关系型数据库, HBase 数据库有以下优势.HBase 是一个基于列模式的映射数据库, HTable为null 的Column 不会被存储, 这样既节省了空间又提高了读性能, 很适宜存储松散型数据.HBase 架构在Hadoop 上, 不仅具有很好的可收缩性, 当数据越来越大时, 只要扩展Hadoop 集群, HBase会自动水平切分扩展, 跟Hadoop 的无缝集合保障了其数据库可靠性和海量数据分析的高性能.HBase 能够结合使用MapReduce 编程框架并行处理大规模数据, 使得数据存储与并行计算完美地结合在一起。 实际上Apache基金会还提供了另一个关于机器学习和数据挖掘的开源项目Mahout。 Mahout平台Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。Mahout项目中给出了一个关于协同过滤算法的高效实现。其相关的组件图如3.4所示。 图3.4:Mahout中协同过滤算法实现的组件图 很遗憾,由于时间的限制,我还没有完成Hadoop和Mahout平台上关于本算法和系统的实现。四、 科研训练总结本次科研训练,我对数据挖掘,特别是个性化推荐系统有了一定了解。锻炼了我一定的自学能力和科研能力。掌握了做科研的部分方法,如查文献等。对我的成长具有很大的帮助。本次训练也留下了很多遗憾的地方。算法的实现很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度电影主题旅游产品拍摄制作合同
- 2025二手集体土地上房屋买卖合同
- 红色遗址保护知识培训内容课件
- 新年心愿600字初三作文12篇
- 合同管理流程及审批标准化工具
- 企业级专利许可协议
- 诗经拾贝课件
- 红楼梦第91回课件
- 红楼梦介绍课件
- 红楼梦五六回课件
- 主题阅读1:大自然的文字
- 电梯周期日常维护保养项目表
- 工程项目进度管理-课件
- (中职中专)二维动画设计软件应用完整版课件汇总全书电子教案(最新)
- 国际贸易理论与实务ppt课件(完整版)
- GB∕T 6546-2021 瓦楞纸板边压强度的测定
- 历史选择性必修1 国家制度与社会治理(思考点学思之窗问题探究)参考答案
- 学前儿童发展心理学(第3版-张永红)教学课件1754
- 医学资料冠心病英文版
- 部编人教版九年级语文上册教学计划及教学进度表
- 干法——稻盛和夫
评论
0/150
提交评论