认证主体:宁夏凯米世纪网络科技有限公司
IP属地:宁夏
统一社会信用代码/组织机构代码
91640100MA774ECW4K
1、商品搜索引擎一推荐系统设计-编程开发技术商品搜索引擎一推荐系统设计原文出处:小宝鸽结合目前已存在的商品推荐设计(如淘宝、京东等),推荐系统主要包含系统推荐和个性化推荐两个模块。系统推荐:根据大众行为的推荐引擎,对每个用户都给出同样的推荐,这些推荐可以是静态的曲系统管理员人工设定的,或者基于系统所冇用户的反馈统计计算出的当下比较流行的物品。个性化推荐:对不同的用户,根据他们的口味和喜好给出更加精确的推荐,这时,系统需要了解需推荐内容和用户的特质,或者基于社会化网络,通过找到与当前用户相同喜好的用户,实现推荐。下面具体介绍系统推荐和个性化推荐的设计方案。、系统推荐2.1、系统推荐目的针对
3、推荐的设计。三、个性化推荐31、个性化推荐目的对不同的用户,根据他们的口味和喜好给出更加精确的推荐,系统需要了解需推荐内容和用户的特质,或者基于社会化网络,通过找到与当前用户相同喜好的用户,实现推荐,以促进商品的销售量。3.2、三种推荐模式的介绍据推荐引擎的数据源有三种模式:基于人口统计学的推荐、基于内容的推荐、基于协同过滤的推荐。(1)基于人口统计学的推荐:针对用户的“性别、年龄范围、收入情况、学历、专业、职业”进行推荐。(2)基于内容的推荐:如下图,这里没冇考虑人对物品的态度,仅仅是因为电影a刀电影c相似,因此将电影c推荐给用户a。这是与后面讲到的协同过滤推荐最大的不同。相似
4、(3)基于协同过滤的推荐:如卜图,这里我们并不知道物品a和物品d是否相似,仅仅考虑人对物品的喜好进行推荐。用户c模式采用:这三种模式可以单独使用,也可结合使用。结合我们实际情况,采用基于协同过滤的推荐更加合适,看后期情况是否结合另外两种模式实现推荐。但基于协同过滤的推荐这种模式,会引发“冷启动”问题。关于,冷启动问题,后续会讨论解决方案。3.3、用户喜好设计(1)判断用户喜好因素:丿力史购买、丿力史购物车、丿力史搜索、丿力史浏览等,待确定我们可用数据再进一步细化。(2)用户对某个商品的喜好程度,通过不同行为对应不同分值权重,女口:历史购买(10)、历史购物车(8)、历史搜索(5
5、)、历史浏览(6),确定用户喜好因素后再进-步对各个因素评分权重进行合理的设计。(3)用户对商品的喜好程度最终体现:结合某个商品的不同行为统计出最终对该商品的喜好程度,即对商品的喜好程度,最终以一个数字体现。3.4、mahout介绍目前选择采用协同过滤框架mahout进行实现。mahout是一个很强大的数据挖掘工貝,是一个分布式机器学习算法的集合,包括:被称为taste的分布式i办同过滤的实现、分类、聚类等。mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了mapreduce模式,这样大大提升了算法可处理的数据量和处理性能。mahout是
7、-core
9、y=newpearsoncorre1ationsimi1arity(model);/指定用户邻居数量,这里为2uscrncighborhoodncighborhood二newncarcstnuscrncighborhood(2,similarity,model);/构建基于用户的推荐系统recommenderrecommender二newgenericuserbasedrecommender(model,ncighborhood,similarity);/得到指定用户的推荐结果,这里是得到用户1的两个推荐list
10、commendations二recommender,recommend(1,2);/打印推荐结果for(recommendedltemrecommendation:recommendations)system.out.printin(recommendation);catch(exceptione)system,out.printin(e);3.5.3>data,csv内容(用户id、商品id,评分)1,101,51,102,31,103,2.52,101,22,102,2.52,103,52,104,23,101,2.53,104
11、,43,105,4.53,107,54,101,54,103,34,104,4.54,106,45,101,45,102,35,103,25,104,45,105,3.55,106,43.5.4、运行结果jproblemsjavadoc凰declaration貝console茨egprogressservers协debug
12、同过滤算法选用3.6.1、mahout协同过滤自带算法介绍mahout算法框架自带的推荐器有下面这些:genericuserbasedrecommender:基于用户的推荐器,用户数量少卩寸速度快;genericitembcisedrecommender:基于商品推荐器,商品数量少时速度快,尤其当外部提供了商品相似度数据后效率更好;slopeonerecommender:基于slope-one算法的推荐器,在线推荐或更新较快,需要事先大量预处理运算,物品数量少时较好;svdrecommender:奇异值分解,推荐效果较好,但之前需要大量预处理运算;knnrecommender:基于k近邻
13、算法(knn),适合于物品数量较小时;trccclustcringrcconimendcr:基于聚类的推荐器,在线推荐较快,之/前需要大量预处理运算,用户数量较少时效果好;mahout最常用的三个推荐器是上述的前三个,本文主要讨论前两种的使用。362、考虑使用算法(1)genericuserbasedrecommender(推荐)一个很简单的user-based模式的推荐器实现类,根据传入的datamodcl和userneighborhood进行推荐。其推荐流程分成三步:第一步,使用userneighborhood获取跟指定用户ui最和似的k个用户u1uk;第二步,uluk喜欢的it
14、em集合中排除掉ui喜欢的item,得到一个item集合itemo*itemm第三步,对itemo-itemm每个itemj计算ui可能喜欢的程度值pcrf(ui,itemj),并把item按这个数值从高到低排序,把前n个item推荐给ui。其中perf(ui,itemj)的计算公式如下:其中是用户u1对ttemj的喜好值。(2)genericttembasedrecommender一个简单的item-based的推荐器,根据传入的datcmodcl和itcmsimilarity去推荐。基于item的相似度计算比基于user的相似度计算冇个好处是,item数量较少,计算量也就
15、少了,另外itemz间的相似度比较固定,所以相似度可以事先算好,这样可以大幅提高推荐的速度。其推荐流程可以分成三步:第一步,获取用户ui喜好的item集合itl-itm第二步,使用mostsimilarttemscandidatettemsstrategy(冇多种策略,功能类似uscrneighborhood)获取跟用户喜好集合里每个item最相似的其他item构成集合iteml-*itemk;第三步,对iteml-itemk里的每个itemj计算ui可能喜欢的程度值perf(ui,ttemj),并把item按这个数值从高到低排序,把前n个item推荐给ui。其中perf(
16、ui,itemj)的计算公式如下:其中是用户u1对itcml的喜好值。(3)slopeonerecommender基于slopeone算法的推荐器,slopeone算法适用于用户对item的打分是具体数值的情况。slopeone算法不同于前面提到的基于相似度的算法,他计算简单快速,对新用户推荐效果不错,数据更新和扩展性都很不错,预测能达到和基于相似度的算法差不多的效果,很适合在实际项口小使用。综合考虑,我们使用genericuserbasedrecommender(基于用户的推荐器)比较合适。3.5、mahout实现协同过滤实例就是采用这种算法实现的。3.7、mahout数据
17、源获取方式datamodel是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。taste默认提供jdbcdatamodel和filcdatamodel,分别支持从数据库和文件屮读取用户的喜好信息。目前,mahout为datamodel提供了以下儿种实现:org.apache,mahout,cf.taste,impl.model.genericdatamodelorg.apache,mahout,cf.taste,impl.model.genericbooleanprefdatamodelorg.apachc.mahout.cf
18、.tasteimp1.mode1.plusanonymoususcrdatamodelorg.apachemahoutcf.tasteimp1.mode1.filefiledatamodelorg.apache,mahout,cf.taste,impl.model.hbase.hbasedatamodelorg.apache,mahout,cf.taste,impl.model,cassandracassandradatamodelorg.apache,mahout,cf.taste,impl.model.mongo
19、db.mongodbdatamodelorg.apache,mahout,cf.taste,impl.model,jdbc.sql92jdbcdatamodelorg.apachemahoutcf.tasteimp1.mode1.jdbcmysqljdbcdatamodelorg.apache,mahout,cf.taste,impl.model,jdbc.postgresqljdbcdatamodelorg.apache,mahout,cf.taste,impl.model,jdbc.genericjdbcdatamo
20、delorg.apache,mahout,cf.taste,impl.model,jdbc.sql92booleanprefjdbcdatamodelorg.apache,mahout,cf.taste,impl.model,jdbc.mysqlbooleanprefjdbcdatamodelorg.apache,mahout,cf.taste,impl.model,jdbc.postgrcboolconprcfsqljdbcdatamodelorg.apache,mahout,cf.taste,impl.model,jdbc
22、点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了mapreduce模式,这样大大提升了算法可处理的数据量和处理性能。spark是ucberkeleyamplab所开源的类hadoopmapreduce的通用的并行计算框架,spark基于mapreduce算法实现的分布式计算,拥冇hadoopmapreduce所貝有的优点;但不同于mapreduce的是job中间输出结果可以保存在内存中,从而不再需要读写hdfs,因此spark能更好地适用丁数据挖掘与机器学习等需要迭代的mapreduce的算法。但spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。这里我们可以选择hadoop的hdfs,也可以