基于spark的个性化电商推荐系统(源码)【字数:7388】
目 录
一、引言
(一)开发背景
如今网上购物成为了与人们生活息息相关的一部分,它极大地便捷了人们的生活方式,可是面对电商平台海量的商品展示,以至于让用户不能明确的商品需求,不知道该买什么样的商品,或者哪个品牌的商品是自己所需要的。大多数用户都是盲目冲动的买单,可买回来后却发现不是自己内心所真 *景先生毕设|www.jxszl.com +Q: &351916072&
实需要的,这极大的造成了社会资源的浪费。我们迫切的需要个性化推荐系统根据使用者平时的爱好习惯,用算法训练出属于自己的个性化推荐模型,从而为用户筛选出优质的产品。
(二)项目内容与目标
本系统模拟电商平台购物场景,用户登录系统,寻找自己心仪的商品,系统会针对不同的用户进行不同的产品推荐。如果用户对商品进行评分的操作后,推荐系统能够实时的进行计算,并对此做出实时的推荐,来满足用户的各种需求。针对离线推荐,本系统也有另外一套解决方案,由于需要计算全局的数据量,系统会每隔一段时间进行计算一次,为用户达到多元化的商品推荐。
二、推荐系统的相关技术
(一)数据的收集
Scrapy 是一种基于python的开源的爬虫框架,它在大众使用范围内比较普遍且具有简单、快速和可扩展的优点。本系统利用Scrapy 爬取某电商网站的数据,分为三个部分,用户个人信息数据,商品信息数据,和用户对商品的评分数据。
(二)大数据计算框架
Spark是由Scala语言进行开发实现的一种基于内存的计算框架。Scala是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集[2]。具有以下特点:
1.运行速度快:Spark的底层核心使用DAG执行引擎,所以能够在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍[3]。
2.易用性好:Spark支持多种主流语言进行编写程序的api库,包括Java、Python 和Scala等,尤其是对Scala的支持非常友好和全面,能够使用简洁的代码处理复杂的工作流程。
3.通用性强:Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架、SparkStreaming的实时处理应用、Spark SQL的即席查询、MLlib或MLbase的机器学习和GraphX的图处理[4]。
(三)主要推荐算法
1.基于大众行为的推荐
系统通过一些固定的规则统计出当下受欢迎的物品,例如:统计一段时间的销售榜、好评榜单和点击榜等等,或是由后台管理员人工的设定主推某些产品,促使其销量的提高,这些推荐的物品对于每一个用户来说都是相同的推荐。
2.基于内容的推荐(ContentBased Recommendations)
以物品的信息内容为基础建立的推荐算法模型,物品的信息内容是指物品全部的内容信息,由于物品的内容信息可能过于繁杂或是不好获取,我们会对此内容进行概括性的描述,也就是物品的元数据信息,例如:可以是人工标注的信息内容,为物品贴上的标签内容,甚至是用户对物品的评论信息等。我们会用这些数据信息建模来计算物品与物品之间的相似度,来为用户推荐商品。用户自身的行为操作才会对这种推荐结果产生影响,不涉及其他的用户行为。如图21所示:
图21基于内容的推荐
3.基于协同过滤的推荐
(1)基于用户的协同过滤推荐(UserCF)
第一代协同过滤技术是以用户的协同过滤为基础的算法,它在推荐系统中发挥着举足轻重的作用。以用户的协同过滤为基础的算法是先根据用户的历史记录等发现用户感兴趣的物品,再根据不同的用户对同一物品的共同偏好,计算出用户与用户之间的相似度,然后将相似度最高的用户购买的物品推荐给用户[9]。举个例子,比如在学校里,新生都会问同专业近届的学长学姐“我要买什么书?”、 “我该如何学好专业课?”等类似问题,有趣的是,他们一般不会问其他专业的学长学姐,或者问其他非专业的老师,对他们来说,上一届同专业的同学们所了解的知识更适合自己,知识结构也相似,所以他们推荐的更具可靠性。其UserCF算法原理是使用K近邻算法,输出用户特征空间中的最相似的k个用户,那么算法将根据这k个用户的偏好信息来预测该用户的喜好。如图22所示:
图22基于用户的协同过滤推荐
(2)基于物品的协同过滤推荐(ItemCF)
第二代协同过滤技术是基于物品的协同过滤算法,它与上面所描述的UserCF十分类似。ItemCF基于所有的用户对某个物品的偏好信息,从而发现物品和其他物品之间是否具有相似性,继而推荐给用户。简单来说,如果用户最近对几种商品都进行了购买,可能这些商品的特征之间有着天壤之别,但是通过模型计算出来他们的相似度很高,我们就认为他们是相似的。如图23所示:
图23基于物品的协同过滤推荐
两种协同过滤算法只是相似度计算的目标不一样,一个是以用户对物品历史偏好信息为基准,它涉及到了用户自身的行为操作,而另外一个是基于物品本身的属性特征,与用户自身的操作无关。
4.基于 ALS 矩阵分解协同过滤算法(Alternating Least Squares)
ALS是交替最小二乘法的简称,在机器学习的上下文中,ALS特指使用交替最小二乘求解的一个协同推荐算法[7]。用户不需要对所有的商品都有评分数据,如果用户没有对一个商品打分,那么就会对这个用户对商品的评分数据进行预测,这就是矩阵的补全。
ALS的核心概念是用户矩阵是近似低秩的,一个 m* n 的评分矩阵,可以近似分解为两个小矩阵U(m*k)和 V(n*k )的乘积得到,即评分矩阵可以分解为用户的喜好特征矩阵U(m*k)和产品特征矩阵V(n*k )的乘积。
原文链接:http://www.jxszl.com/jsj/rjgc/559908.html