在BDOS上搭建推荐系统(Product Recommendation System)
目录
1. 摘要
2. 背景介绍
3. 简介
4. 主要步骤
4.1 安装App
4.2 使用已有数据训练模型
4.3 测试模型
4.3.1 推荐系统,为已有的用户推荐相似产品
4.3.2 预测系统,为新用户推荐产品
4.4 扩展功能(Enterprise 版本)
5. 测试用例下载
1. 摘要
BDOS大数据平台不仅仅只包含 Hadoop和Kafka这些传统的大数据组件, 使用 BDOS, 用户还可以快速搭建一个集成机器学习/人工智能的基础框架(例如 Spark,TensorFlow)的分布式计算平台, 快速开发 AI 应用, 并可将应用与 BDOS 大数据流水线和应用发布平台结合, 加速从研发到生产化的速度。本博客就是从这个角度出发,介绍了如何在BDOS平台上用K-measn算法实现一个推荐系统。
2. 背景介绍
推荐系统是个复杂的系统工程,依赖数据、架构、算法、人机交互等环节的有机结合,是数据挖掘技术、信息检索技术、计算统计学等悠久学科的智慧结晶,也关联到认知科学、预测理论、营销学等相关学科。
在本篇教程中,主要利用已有的数据源,通过k-means算法,训练出一套模型,通过模型可以为现有的用户推荐产品,也可以用来预测新用户的推荐产品。
3. 简介
这篇文章的示例如下,从某一个在线课程网站的数据库提取如下信息,学生id, 购买课程id,语数外分数,通过数据源,训练推荐模型,通过该模型,即可为现有学生用户推荐类似课程,如果有新用户注册,通过用户的语数外分数,推荐模型即可为该用户推荐合适的课程。
4. 主要步骤
- 安装app
- 上传数据源,选择算法,训练数据模型
- 测试模型
- 扩展功能
4.1 安装App
- 在[已安装应用]的[应用市场]中,选择”linktime-product-recommendation”,进行安装
-
进入app detail主页,如下图
-
点击app detail主页右上角的”运行应用程序”
-
继续点击”下一步”
-
继续点击”安装”
-
稍等几秒钟后
同样的,在操作记录中可查到如下记录
点击查看,如下图:
- 安装完毕后,进入[当前运行应用]的[官方应用]
-
点击应用,进入运行页面如下
查看运行实例和历史实例如下图
- 点击[首页],可直接进入app首页,如下图
具体的操作流程,请直接进入下一节4.2 使用已有数据训练模型
4.2 使用已有数据训练模型
- 为了防止数据格式错误,请下载data.txt文件作为数据源,在首页点击[创建新模型],点击上传文件,选择data.txt 文件上传,上传成功后,点击文件名,可以在右侧预览文件内容,目前只支持txt格式。之后点击下一步
(数据源格式为学生id, 课程id, 以及学生的语文,数学,外语分数,如数据123 tp00 Road2PKU 88 88 90
对应信息为
学生id | 购买课程id | 课程名称 | 语文分数 | 数学分数 | 外语分数 |
---|---|---|---|---|---|
123 | tp00 | Road2PKU | 88 | 88 | 90 |
- 选择算法k-means, 并填入 k 的值,k 需要小于数据源的条目数,此处建议填
3
, 之后点击下一步
(页面左侧为算法简介)
- 页面中显示为之前上传的文件信息以及算法信息,点击开始训练,后台就会对数据源用k-means算法进行训练,训练需要一段时间,点击[查看训练状态]。
- 查看训练的模型以及状态,如果状态为
completed
, 表示训练完成
4.3 测试模型
完成步骤 2 以后,在模型列表页面,点击操作中的[测试],进入测试页面。
4.3.1 推荐系统,为已有的用户推荐相似产品
通过选择不同的userid(学生id), 即可在下方看到为该用户推荐的课程
4.3.2 预测系统,为新用户推荐产品
如果需要为新用户推荐产品,则需要输入相关参数,在本篇教程中,相关参数为语数外分数,所以需要在右侧输入框中输入88 88 88
代表新用户的语数外分数分别为88,88,88,点击预测结果,即可看到为该用户推荐的课程,也可以输入其他分数进行测试。
4.4 扩展功能(Enterprise 版本)
在本篇教程中,数据源来自于上传文件,使用BDOS平台,可以安装Hadoop 和 Spark, 即可使用HDFS作为数据源,后台可以用spark提供不同的推荐算法进行模型训练。
同时BDOS平台还提供ETL工具,可以把训练模型过程封装成一个作业,每天定时运行。为用户实时推荐新产品。
5. 测试用例下载
- 点这里
如果对教程有任何疑问,请截图发邮件至 admin@linktime.cloud
留言
评论
${{item['author_name']}} 回复 ${{idToContentMap[item.parent] !== undefined ? idToContentMap[item.parent]['author_name'] : ''}}说 · ${{item.date.slice(0, 10)}} 回复
暂时还没有一条评论.