基于Spark ALS构建商品推荐引擎

基于Spark ALS构建商品推荐引擎

一般来讲,推荐引擎试图对用户与某类物品之间的联系建模,其想法是预测人们可能喜好的物品并通过探索物品之间的联系来辅助这个过程,让用户能更快速、更准确的获得所需要的信息,提升用户的体验、参与度以及物品对用户的吸引力。

在开始之前,先了解一下推荐模型的分类:


1、基于内容的过滤:利用物品的内容或是属性信息以及某些相似度定义,求出与该物品类似的物品

2、协同过滤:利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度

3、矩阵分解(包括显示矩阵分解、隐式矩阵分解和最小二乘法)

当前Spark模型库中只包含基于矩阵分解的实现,其中最小二乘法(Alternating Least Squares,ALS)是一种求解矩阵分解问题的最优化方法(把稀疏的矩阵近似地转为两个稠密矩阵的乘积)。因此,本文将采用Spark ALS来实现商城礼物推荐。

一个推荐系统的实施,一般需要以下几个步骤:


1、数据准备:获取训练模型所需的数据,比如收集用户历史以来的购买记录和浏览记录

2、数据清理:大部分机器学习模型所处理的都是特征,但通常上述获取的数据都是原始形式,需要进一步处理。比如数据过滤、处理异常值、合并数据源、数据汇总等。本例重点放在评分计算规则上

3、数据转化:对数据中的某些特征进行标准化(StandardScaler)、归一化(MinMaxScaler)、正则化(Normalizer)的缩放转化

4、模型训练和测试回路:当数据已转化模型可识别的形式,就可以开始模型的训练和测试。把数据划分为两部分,一部分是训练数据,用于构建模型,另一部分是测试数据,用于检验模型

5、模型评估:在训练数据集上运行模型并在测试集上测试其效果,进行交叉验证,评估其推荐效果

6、模型优化:这部分关注对特定模型最佳参数的选择问题,通常情况下,我们会尝试调整算法中的超参数,通过多次迭代训练模型,选择最优的结果

用户如需测试数据集,可以从UCL机器学习知识库下载:包括近300个不同大小和类型的数据集,可用于分类、回归、聚类 和推荐系统任务。数据集列表位于: http://archive.ics.uci.edu/ml/

经过上面的转化后,最终传递给模型的训练数据的格式为:


1,1330,1,1,穷神(用户ID,商品ID,购买数量排序,购买数量,商品名称)-->Rating(1,1330,0.05)(用户ID,商品ID,评分)

主函数代码实现:


打包执行:


bin/spark-submit --class com.boyaa.spark.rel.GiftRecommend --master spark://dn11:7077 --num-executors 24 --executor-cores 24 --driver-memory 4g --executor-memory 4g --jars /data/mf/lib/fastjson-1.2.14.jar sparkml.jar file:/data/soft/new/spark/20150615-20160912.csv 0 25 25 0.01 -1 0

选取评估结果中均方根误差最小并且决定系数最高的超参数组合:

选择超参数:


1、rank,模型的潜在因素个数,也是矩阵的阶

2、iterations,矩阵分解迭代次数,迭代次数越多,花费时间越长,但分解的结果可能会更好

3、lambda,标准的过拟合参数,值越大越不容易产生过拟合,但值太大会降低分解的准确性

4、blocks,决定并发分解计算的程度

5、seed,随机种子

不同超参数结果对比:


给一个用户推荐商品:

推荐结果:


original为用户历史购买的商品ID,actual为用户实际需要购买的商品ID,recommend为推荐的商品列表

{"original":[1699,1325,1314,221,1328,628,1329,1331,1324],"actual":1330,"recommend":[695,2104,1324,1330,428],"user":1}

计算所有用户推荐结果的均方根误差:

时间: 2024-10-23 20:59:42

基于Spark ALS构建商品推荐引擎的相关文章

基于 Apache Mahout 构建社会化推荐引擎

推荐引擎简介 推荐引擎利用特殊的信息过滤(IF,Information Filtering)技术,将不同的内容(例如电影.音乐.书籍.新闻.图片.网页等)推荐给可能感兴趣的用户.通常情况下,推荐引擎的实现是通过将用户的个人喜好与特定的参考特征进行比较,并试图预测用户对一些未评分项目的喜好程度.参考特征的选取可能是从项目本身的信息中提取的,或是基于用户所在的社会或社团环境. 根据如何抽取参考特征,我们可以将推荐引擎分为以下四大类: 基于内容的推荐引擎:它将计算得到并推荐给用户一些与该用户已选择过的

用Mahout构建职位推荐引擎【一起学Mahout】

阅读导读: 1.如何设计职位推荐引擎的指标? 2.简述职位推荐引擎所需要的系统架构? 3.如何对推荐结果进行人工比较? 4.职位推荐引擎中什么情况的数据最好做排除? 1. Mahout推荐系统框架概述 Mahout框架包含了一套完整的推荐系统引擎,标准化的数据结构,多样的算法实现,简单的开发流程.Mahout推荐的推荐系统引擎是模块化的,分为5个主要部分组成:数据模型,相似度算法,近邻算法,推荐算法,算法评分器. 更详细的介绍,请参考文章:从源代码剖析Mahout推荐引擎 2. 需求分析:职位推

基于lucene实现自己的推荐引擎

基于lucene实现自己的推荐引擎 推荐常用算法之-基于内容的推荐

JVM调优(这里主要是针对优化基于颁布式Mahout的推荐引擎)

优化推荐系统的JVM关键参数 -Xmx 设定Java允许使用的最大堆空间.例如-Xmx512m表示堆空间上限为512MB -server 现代JVM有两个重要标志:-client和-server,分别为客户端程序(运行时间短.占用资源少)和服务器端程序(长时间运行.资源密集型)选择合适的JVM配置. -d32和-d64 分别设定为32位和64位模式.在一台64位的机器上,两种都是有效的.尽管通常情况下最好是让JVM自己决定,但32位模式可以降低内在需求(例如引用变成4字节).当然,32位模式下不

基于Spark ALS在线推荐系统

所用技术: Bootstrap.flat-ui . Servlet.Spark1.4.1.Hadoop2.6.0.JDK 说明:本系统不涉及ssh相关内容,只有简单的Servlet和JSP.HTML页面,系统架构相对简单. 系统部署: 1. 拷贝spark-assembly-1.4.1-hadoop2.6.0.jar到WebContent/WEB-INF/lib目录:(spark-assembly-1.4.1-hadoop2.6.0.jar文件由原生spark-assembly-1.4.1-ha

探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(转)

第 2 部分: 深入推荐引擎相关算法 - 协同过滤 本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法. 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”.本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现.Apache Mahout 是 ASF 的一个

深入推荐引擎相关算法 - 协同过滤

集体智慧和协同过滤 什么是集体智慧 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用户体验.集体智慧是指在大量的人群的行为和数据中收集答案,帮助你对整个人群得到统计意义上的结论,这些结论是我们在单个个体上无法得到的,它往往是某种趋势或者人群中共性的部分. Wikipedia 和 Google 是两个典型的利用集体智慧的 Web 2.0 应用: Wikip

探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类

聚类分析 什么是聚类分析? 聚类 (Clustering) 就是将数据对象分组成为多个类或者簇 (Cluster),它的目标是:在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别较大.所以,在很多应用中,一个簇中的数据对象可以被作为一个整体来对待,从而减少计算量或者提高计算质量. 其实聚类是一个人们日常生活的常见行为,即所谓"物以类聚,人以群分",核心的思想也就是聚类.人们总是不断地改进下意识中的聚类模式来学习如何区分各个事物和人.同时,聚类分析已经广泛的应用在许多应用中,包

推荐引擎的学习资料

下面的资料没有做优先级排序. 文章: CSDN的推荐引擎主题资料汇集页面:http://subject.csdn.net/tuijian/ 推荐<探索推荐引擎的秘密>系列 http://tiny4.org/blog/2011/05/recommend-enginee/  该文作者为iApp4me创始人,文中提到几个开源推荐引擎项目 探索推荐引擎内部的秘密系列:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/in