基于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 ...
随机推荐
- Pro ASP.NET MVC 5 Framework.学习笔记.6.4.MVC的必备工具
2.5.创建链式依赖 当你请求Ninject创建一个类型,它检查该类型的依赖是否声明.它也会检查该依赖是否依赖其他类型.如果这里有附加依赖,Ninject自动解决他们,并创建请求的所有类的实例.正是由 ...
- IOS 音频开发文件大小计算
音频基础知识 音频文件计算大小 音频转码 标签(空格分隔): 调查 IOS音频 https://developer.apple.com/library/ios/documentation/MusicA ...
- HDU 3966:Aragorn's Story(树链剖分)
http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:有n个点n-1条边,每个点有一个权值,有两种操作:询问一个点上权值是多少和修改u到v这条链上的权值. ...
- java 字符串处理
第一张: 第二张:
- javascript——web前端编程
一.弹出提示框: 连接 function disp_prompt() { var name=prompt("请输入您的名字","Bill Gates") ...
- 清空html代码
不要使用 $("XXX").html(""); 清空html代码块一般有两种方式: 1)非miniui等组件区块:$("#id").empt ...
- YTU 2344: 先序遍历二叉树
原文链接:https://www.dreamwings.cn/ytu2344/2603.html 2344: 先序遍历二叉树 时间限制: 1 Sec 内存限制: 128 MB 提交: 4 解决: ...
- 多校4-Walk Out 分类: 比赛 2015-08-02 17:15 21人阅读 评论(0) 收藏
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...
- Unity帧序列实时渲染脚本
该脚本会创建一个新相机进行录制,支持包含所有相机内容,完美解决跳帧问题,可自定义分辨率等参数,脚本会输出品质为100的jpg序列,基本无损. 但缺点是帧率始终是每秒100帧,必须压制时限制帧数. 而用 ...
- 南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
N! 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 阶乘(Factorial)是一个很有意思的函数,但是不少人都比较怕它.现在这里有一个问题,给定一个N(0< ...