视频推荐系统离线处理与在线推荐引擎

**

视频推荐系统离线处理与在线推荐引擎

代码地址:https://download.csdn.net/download/qq_41785191/16462726

主要实现推荐系统的两个较大的子系统

  1. 离线数据处理系统
  2. 在线推荐引擎。
    介绍内容:
    推荐系统主要是用户的兴趣为用户提供符合兴趣的推荐项目。比较下面的表格中,假如用户喜欢《玩具总动员》,推荐系统会推出《星球大战4》、《独立日》、《星球大战6》、《碟中谍》、《欢乐糖果屋》、《回到未来》等电影。
    如图所示:
    在这里插入图片描述
    二、离线数据处理系统
    介绍:
    1. 读入网站用户给电影评分的历史数据
    Movie Lens网站的数据记录了用户对影片的评分。推荐系统的离线模块要从数据仓库取得这些数 据,并加以处理。这些数据包含了用户编号,电影编号,用户评分和评分时间。数据在Movie Lens网站上已经经过整理,规范整洁。数据记录的每一行记录都代表了一次用户的评分: UserID::MovieID::Rating::Timestamp 例如,数据1::185::5::838983525,代表了用户1看了第185号电影《Net》1995年上映(电影对 应关系可以在电影与ID对应数据中查到),评分为5。时间戳数据,目前不需要使用。
    2.将用户评分历史数据处理成两个映射
    我们需要设计两个映射(maps)用来查找邻居。它们分别是item_to_user 映射和user_to_item 映射。将原始数据处理成两个映射的过程中,可以使用java中自带的字符串split方法,将用户评 分数据切割开来。 item_to_user映射的关键值(Key)为电影的标号(MovieID),对应的Value是所有看过这个电 影的用户(UserID)和他们的评分(Rating)。item_to_user映射的格式是: MovieID: (UserID1, Rating), (UserID2, Rating), (UserID3, Rating)… 其中,MovieID为映射的Key,映射的Value为用户ID和评分信息:(UserID1, Rating), (UserID2, Rating), (UserID3, Rating)… ,可以使用一个ArrayList作为映射Value的数据结构。 user_to_item映射的Key值是用户的标号UserID,Value是这个用户所看过电影的标号 (MovieID)和用户对这部电影的评分。这个user_to_item映射的格式是: UserID: (MovieID1, Rating), (MovieID2, Rating), (MovieID3, Rating)… 该映射的存储方式和item_to_user映射相类似。 可以将处理完成的两个映射使用文件io功能存成txt文档,作为中间结果,保存在硬盘上,保留中 间处理的数据以便程序异常时使用。
    3.邻居查找
    使用以上这两个映射来找到一部电影的邻居。 首先从影片电影1出发,查找所有看了这部电影并做出评分的用户,从这些用户出发,再找到他们 看过并且评分过的所有电影,这些电影便是电影1的候选邻居。
    在这里插入图片描述
    如图所示,MovieID的邻居通过先查找item_to_user映射,再查找user_to_item映射,得到集合 {MovieID11, MovieID12, MovieID13…, MovieID21, MovieID22, MovieID23… MovieID31, MovieID32, MovieID33…},这个集合便是MovieID的邻居。
    4. 相似度计算
    当邻居关系确定后,计算两两邻居的相似度。假设我们有两部电影Item i和Item j,如果以Item i 为Key去item-to-user map中查找,则得到Value结果为看过item I这部电影的所有用户和他们的 评分。我们将这些用户的评分构成向量Vi,。同理,得到看过电影Item j所有用户评分可以构成向 量Vj。
    使用余弦相似度计算公式计算两部电影的相似度:
    在这里插入图片描述
    注意:向量的维度补0问题。假设有位用户看过Item i电影评分为5,而他没有看过Item j电影,因 此这位用户在Vj中的评分就不存在(因为没有观看记录)。这会引起两个向量的维度数目不同 (Vi中有评分5,而Vj中没有评分,此时Vi的维度比Vj的维度多了1),而我们知道计算两个向量的相似度需要它们的维度数相同。于是,为了匹配Vi和Vj向量的维度数,我们需要将这位用户的 评分以值0的形式插入到Vj中,来使Vj的维度匹配Vi。反之,如果有用户看过Item j电影而未看过 Item i电影,则需要加入值0维度到Vi向量中,以使Vi的维度数匹配Vj的维度数。 将计算得到的相似度结果存成 txt文档,这个txt文档中所包含的数据叫做sim table。存储格式的 参考格式可以为:MovieID:MovieID1,simValue1 MovieID2,simValue2 MovieID3,simValue3…中间的大空隔为制表符"\t",至此,离线数据处理任务便完成了。 这条sim table数据表示电影MovieID和MovieID1的相似度为simValue1,MovieID和MovieID2 的相似度为simValue2,MovieID和MovieID3的相似度为simValue3等等。
    四、在线推荐引擎
    在线推荐系统的的基本推荐功能实现较容易理解。将一个给定的输入item i输入到推荐引擎中,使 用item i作为键值,在加载到电脑内存中的相似度表(simTable)中找到与item i对应的相似度较 高的的其他item_id。在推荐过程中,所有的查询均在计算机内存中操作,所以推荐结果返回的速 度是非常快的。查询相似项目的返回值是一个列表,列表中的每个元素包含了相似项目item id和 相似度值Similarity,如图所示。最后,系统对相似值向量按照相似度值进行排序,并返回前15名 的推荐结果。
    在这里插入图片描述
  1. 加载sim table数据到系统内存,存储成为一个map,key为MovieID,value为与这个MovieID 的相似的若干电影和它们与这个MovieID电影的相似度,格式为: MovieID: (MovieID1, simValue1), (MovieID2, simValue2), (MovieID3, simValue3)… 2. 输入一个MovieID做为key,查找sim table map,返回相似度最高的15个MovieID。 3. 为这15个MovieID匹配电影名称的信息并显示,最终完成截图如图所示,系统输入一个 MovieID号码,显示出:
    (1) 该MovieID的号码,以及对应的电影名称和信息。
    (2) 推荐的15个MovieID号码,以及对应的电影名称和信息
    在这里插入图片描述

GitHub:https://github.com/990317gfl990317/-

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如今大数据已经成了各大互联网公司工作的重点方向,而推荐系统可以说就是大数据最好的落地应用之一,已经为企业带来了可观的用户流量和销售额。特别是对于电商,好的推荐系统可以大大提升电商企业的销售业绩。国内外的知名电商,如亚马逊、淘宝、京东等公司,都在推荐系统领域投入了大量研发力量,也在大量招收相关的专业人才。打造的电商推荐系统项目,就是以经过修改的中文亚马逊电商数据集作为依托,并以某电商网站真实的业务架构作为基础来实现的,其中包含了离线推荐与实时推荐体系,综合利用了协同过滤算法以及基于内容的推荐方法来提供混合推荐。具体实现的模块主要有:基于统计的离线推荐、基于隐语义模型的离线推荐、基于自定义模型的实时推荐,以及基于内容的、和基于Item-CF的离线相似推荐。整个项目具有很强的实操性和综合性,对已有的大数据和机器学习相关知识是一个系统性的梳理和整合,通过学习,同学们可以深入了解推荐系统在电商企业中的实际应用,可以为有志于增加大数据项目经验的开发人员、特别是对电商业务领域感兴趣的求职人员,提供更好的学习平台。适合人群:1.有一定的 Java、Scala 基础,希望了解大数据应用方向的编程人员2.有 Java、Scala 开发经验,了解大数据相关知识,希望增加项目经验的开发人员3.有电商领域开发经验,希望拓展电商业务场景、丰富经验的开发人员4.有较好的数学基础,希望学br习机器学习和推荐系统相关算法的求职人员

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值