基于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} |
计算所有用户推荐结果的均方根误差:
基于Spark ALS构建商品推荐引擎的更多相关文章
- 基于 Apache Mahout 构建社会化推荐引擎
基于 Apache Mahout 构建社会化推荐引擎 http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp 推荐引擎利用特殊的 ...
- [转] 基于 Apache Mahout 构建社会化推荐引擎
来源:http://www.ibm.com/developerworks/cn/java/j-lo-mahout/index.html 推荐引擎简介 推荐引擎利用特殊的信息过滤(IF,Informat ...
- 转】用Mahout构建职位推荐引擎
原博文出自于: http://blog.fens.me/hadoop-mahout-recommend-job/ 感谢! 用Mahout构建职位推荐引擎 Hadoop家族系列文章,主要介绍Hadoop ...
- 基于lucene实现自己的推荐引擎
基于lucene实现自己的推荐引擎 推荐常用算法之-基于内容的推荐 推荐算法
- 客户流失?来看看大厂如何基于spark+机器学习构建千万数据规模上的用户留存模型 ⛵
作者:韩信子@ShowMeAI 大数据技术 ◉ 技能提升系列:https://www.showmeai.tech/tutorials/84 行业名企应用系列:https://www.showmeai. ...
- Spark高级数据分析· 3推荐引擎
推荐算法流程 推荐算法 预备 wget http://www.iro.umontreal.ca/~lisa/datasets/profiledata_06-May-2005.tar.gz cd /Us ...
- 基于 Spark 的文本情感分析
转载自:https://www.ibm.com/developerworks/cn/cognitive/library/cc-1606-spark-seniment-analysis/index.ht ...
- 基于Azure构建PredictionIO和Spark的推荐引擎服务
基于Azure构建PredictionIO和Spark的推荐引擎服务 1. 在Azure构建Ubuntu 16.04虚拟机 假设前提条件您已有 Azure 帐号,登陆 Azure https://po ...
- Azure构建PredictionIO和Spark的推荐引擎服务
Azure构建PredictionIO和Spark的推荐引擎服务 1. 在Azure构建Ubuntu 16.04虚拟机 假设前提条件您已有 Azure 帐号,登陆 Azure https://port ...
随机推荐
- bash环境变量读取顺序
bash环境变量读取顺序: 交互式登录的用户: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bas ...
- 如何用javascript 的eval动态执行一个需要传对象参数的函数
代码如下: var method = 'setRiskItemAmount_'+id[1]+'(id[0],id[2],this.value);'; console.log(method); eval ...
- ACM题目————Aggressive cows
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
- HDU 4707:Pet
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 训练集(train set) 验证集(validation set) 测试集(test set)
转自:http://www.cnblogs.com/xfzhang/archive/2013/05/24/3096412.html 在有监督(supervise)的机器学习中,数据集常被分成2~3个, ...
- JSch - Java实现的SFTP(文件上传详解篇) [转载]
文章来源:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch是Java Secure Channel的缩写.JSch是 ...
- Reflector8.5 .net反编译工具 破解教程
一.断网 二.打开软件.打开注册机 三. 四. 五. 六. 七. 八.
- Currency Exchange 分类: POJ 2015-07-14 16:20 10人阅读 评论(0) 收藏
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22180 Accepted: 8015 De ...
- C#中八皇后问题的递归解法——N皇后
百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections. ...
- Mysql任务调度
Mysql任务调度 Event调度配置 Mysql任务调度Event不执行 Mysql任务作业Event不执行 我采用的方法就是: 方法一:找到当前使用的 .cnf 文件,在 [mysqld] 的下面 ...