消费者行为分析-推荐系统

目录

一、项目概述 

1、项目简介

2、项目使用技术

3、项目系统框架

二、数据简介

1、数据来源

2、数据概览

三、环境搭建

1、ElasticSearch-head安装

1)插件安装

2)linux下单节点安装

3)修改linux配置文件

4)解压安装

5)修改配置文件

6)启动ElasticSearch

2、Mongodb单节点安装

1)Wget下载

2)解压

3)创建文件夹

4)创建配置文件

5)配置文件添加信息

6)启动mongodb服务器

7)访问mongodb

8)停止mongodb服务器

3、Redis单节点安装

1)下载解压

2)编译安装

3)创建并修改配置文件

4)启动redis

4、Spark单节点安装

1)下载解压安装包

2)配置单点spark环境

3)启动sparkWebui查看

5、Azkaban单节点配置

1)下载azkaban资源包

2)配置

3)部署Azkaban Solo

4)编译Azkaban Solo

5)启动服务

6、zookeeper单节点安装

1)下载解压

2)配置环境

 3)启动zookeeper

7、 Flume、kafka安装

1)flume-ng单节点配置

2)kafka单点配置

 8、开发环境搭建(idea)

1)项目框架搭建

2)prom依赖管理

四、数据加载部分

1、DataLoader-加载数据模块项目

1)项目目录

2)项目依赖

2、Mongodb加载数据

1)定义样例类

2) 定义参数配置 

3)编程实现数据处理与写入

4)远程写入mongodb

​编辑2.ElasticSearch加载数据

1)数据预处理

2)编程实现数据写入

3)查看数据是否加载成功

 五.基于LMF离线推荐部分

1.StatisticsRecommender-统计数据模块项目创建

1)项目目录

2)项目依赖

2.离线数据统计

         1)历史热门统计

        2)最近热门统计

        3)电影平均得分

         4)每个类别优质电影统计

 3.OfflineRecommender-离线推荐模块项目创建

1)项目目录

2)项目依赖

4.基于隐语义的协调过滤推荐

1)用户电影推荐矩阵

 2)电影相似度矩阵

5. ALS模型参数选择-隐语义

1)ALS模型参数选择概念

2)编写代码

 六、实现推荐部分

1.StreamingRecommender-实施推荐模块项目建立

1)项目目录

2)项目依赖

 2.实施推荐部分算法

1)数据连接环境

2)测试kafka环境是否连通

 启动消费者生产者

​编辑 3)推荐算法编程

​编辑 4)程序运行

 5)mongodb查看推荐结果

七、基于内容的推荐模块

1.ContentRecommender项目建立

1)项目目录

2)项目依赖

2.特征工程的选取

1)代码实现 

2)得出特征向量结果

3.编码实现基于内容的推荐模块

1)得到特征矩阵

 2)基于内容推荐

3)mongodb查看结果

八、 项目总结

1.项目可视化问题

 2.项目实时系统联调问题

3.学习总结

 九、完整项目代码


一、项目概述 

1、项目简介

此次推荐系统项目跟随B站尚硅谷大数据项目教程实现,在学习推荐系统的过程中结合大数据技术做一个完整的项目

2、项目使用技术

Flume日志采集、kafka消息缓冲、spark、mongoDB业务数据库、redis缓存数据库、ElasticSearch搜索服务器,在此次项目中主要使用以上技术,可视化技术与综合业务服务技术不做深入实现研究。

3、项目系统框架

二、数据简介

1、数据来源

此次项目所需要的数据名称为 moviceLen ,是推荐系统中所使用到的典型数据集,数据来源于一个网站专门提供的免费数据https://grouplens.org/datasets/movielens/

2、数据概览

字段名

字段类型

字段描述

mid

Int

电影的 ID

name

String

电影的名称

descri

String

电影的描述

timelong

String

电影的时长

shoot

String

电影拍摄时间

issue

String

电影发布时间

language

String

电影语言

genres

String

电影所属类别

director

String

电影的导演

actors

String

电影的演员

表 2‑1 电影数据表

字段名

字段类型

字段描述

uid

Int

用户的 ID

mid

Int

电影的 ID

score

Double

电影的分值

timestamp

Long

评分的时间

表 2‑2 用户评分表

三、环境搭建

1、ElasticSearch-head安装

1)插件安装

地址: liufengji/es-head (github.com)

拖拽不成功参照csdn博客

Google浏览器 安装 Elasticsearch-head 插件_打工人很惨的博客-CSDN博客_elasticsearch head谷歌插件

检查安装结果

2)linux下单节点安装

[root@ha-01 software]#

 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.2.tar.gz

3)修改linux配置文件

ElasticSearch单节点环境配置_sebeefe的博客-CSDN博客_elasticsearch单节点配置

[root@ha-01 ~]# vi /etc/security/limits.conf

[root@ha-01 ~]# vi /etc/security/limits.d/20-nproc.conf

[root@ha-01 ~]# vi /etc/sysctl.conf

[root@ha-01 ~]# sysctl -p

4)解压安装

[root@ha-01 software]# tar -xf elasticsearch-5.6.2.tar.gz -C /export/servers/cluster

[root@ha-01 elasticsearch-5.6.2]# mkdir data/

[root@ha-01 elasticsearch-5.6.2]# mkdir logs/

5)修改配置文件

[root@ha-01 elasticsearch-5.6.2]# vi config/elasticsearch.yml

6)启动ElasticSearch

Caused by: java.lang.RuntimeException: can not run elasticsearch as root_liang墨竹的博客-CSDN博客

创建一个新用户切换到非root用户才能启动

新用户 elsearch

密码 123456

2、Mongodb单节点安装

1)Wget下载

[root@ha-01 ~]#

 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.3.tgz

2)解压

[root@ha-01 software]# tar -xf mongodb-linux-x86_64-rhel62-3.4.3.tgz -C /export/servers/

3)创建文件夹

data目录下文件夹用于存放数据和日志

在 data 文件夹下创建 db 文件夹,用于存放数据

在 data 文件夹下创建 logs 文件夹,用于存放日志

4)创建配置文件

[root@ha-01 logs]# touch mongodb.log

[root@ha-01 logs]#

 touch /export/servers/mongodb-linux-x86_64-rhel62-3.4.3/data/mongodb.conf

5)配置文件添加信息

mongodb.conf文件

#端口号 port = 27017

#数据目录

dbpath = /export/servers/mongodb-linux-x86_64-rhel62-3.4.3/data/db

#日志目录

logpath = /export/servers/mongodb-linux-x86_64-rhel62-3.4.3/data/logs/mongodb.log

#设置后台运行

fork = true

#日志输出方式

logappend = true

#开启认证

#auth = true

6)启动mongodb服务器

[root@ha-01 mongodb]# sudo /export/servers/mongodb/bin/mongod

-config /export/servers/mongodb/data/mongodb.conf

7)访问mongodb

[root@ha-01 mongodb]# bin/mongo

8)停止mongodb服务器

[root@ha-01 mongodb]# sudo bin/mongod -shutdown

-config /export/servers/mongodb/data/mongodb.conf

3、Redis单节点安装

1)下载解压

[root@ha-01 software]# wget http://download.redis.io/releases/redis-4.0.13.tar.gz

[root@ha-01 software]# tar -xf redis-4.0.13.tar.gz -C /export/servers/

2)编译安装

进入 Redis 源代码目录,安装 GCC,编译安装

[root@ha-01 redis-4.0.13]# yum install gcc

[root@ha-01 redis-4.0.13]# make MALLOC=libc

[root@ha-01 redis-4.0.13]# sudo make install

3)创建并修改配置文件

[root@ha-01 redis-4.0.13]# sudo cp redis.conf /etc/

[root@ha-01 redis-4.0.13]# vi /etc/redis.conf

4)启动redis

[root@ha-01 redis-4.0.13]# redis-server /etc/redis.conf

[root@ha-01 redis-4.0.13]# redis-cli

[root@ha-01 redis-4.0.13]# redis-cli shutdown

4、Spark单节点安装

1)下载解压安装包

[root@ha-01 software]#

 wget https://d3kbcqa49mib13.cloudfront.net/spark-2.1.1-bin-hadoop2.7.tgz

[root@ha-01 software]# tar -xf spark-2.1.1-bin-hadoop2.7.tgz -C /export/servers/cluster/

2)配置单点spark环境

复制 slave 配置文件修改

[root@ha-01 spark-2.1.1-bin-hadoop2.7]# cp ./conf/slaves.template ./conf/slaves

复制Spark-Env 配置文件修改

[root@ha-01 conf]# cp ./conf/spark-env.sh.template ./conf/spark-env.sh

3)启动sparkWebui查看

[root@ha-01 spark-2.1.1-bin-hadoop2.7]# sbin/start-all.sh

5、Azkaban单节点配置

1)下载azkaban资源包

[root@ha-01 ~]# yum install git

[root@ha-01 software]# sudo git config --global http.postBuffer 5242880000

[root@ha-01 software]# git clone GitHub - azkaban/azkaban: Azkaban workflow manager.

切换版本

[root@ha-01 servers]# cd azkaban/

[root@ha-01 azkaban]# git checkout -b 3.36.0

2)配置

安装编译环境

[root@ha-01 azkaban]#  yum install -y gcc-c++*

执行编译命令

[root@ha-01 azkaban]# ./gradlew clean build

3)部署Azkaban Solo

将编译好的 azkaban 中的 azkaban-solo-server-3.36.0.tar.gz 拷贝到根目录

解压 azkaban-solo-server-3.36.0.tar.gz 到安装目录

4)编译Azkaban Solo

编译

[root@ha-01 azkaban]# ./gradlew build -x test

[root@ha-01 azkaban]# cp

azkaban-solo-server/build/distributions/azkaban-solo-server-3.91.0-329-g98d70e0.tar.gz /export/software/

[root@ha-01 azkaban]# tar -xf

/export/software/azkaban-solo-server-3.91.0-329-g98d70e0.tar.gz

-C /export/servers/cluster/

5)启动服务

[root@ha-01 azkaban-solo-server-3.91.0-329-g98d70e0]# bin/start-solo.sh

6、zookeeper单节点安装

1)下载解压

[root@ha-01 software]# tar -xf zookeeper-3.4.10.tar.gz -C /export/servers/cluster/

2)配置环境

创建data目录

[root@ha-01 zookeeper-3.4.10]# mkdir data/

修改配置文件

[root@ha-01 zookeeper-3.4.10]# cp ./conf/zoo_sample.cfg ./conf/zoo.cfg

 3)启动zookeeper

 

7、 Flume、kafka安装

1)flume-ng单节点配置

安装包获取解压

[root@ha-01 software]# wget

http://www.apache.org/dyn/closer.lua/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz --no-check-certificate

[root@ha-01 software]# tar -zvxf apache-flume-1.8.0-bin.tar.gz -C /export/servers/cluster/

2)kafka单点配置

安装包上传解压

[root@ha-01 software]# tar -zvxf kafka_2.11-0.10.2.1.tgz -C /export/servers/cluster/

配置文件

启动kafka(启动前需要先启动zookeeper)

[root@ha-01 zookeeper-3.4.10]# bin/zkServer.sh start

[root@ha-01 kafka_2.11-0.10.2.1]#

 bin/kafka-server-start.sh -daemon ./config/server.properties

关闭kafka

[root@ha-01 kafka_2.11-0.10.2.1]#

 bin/kafka-server-stop.sh -daemon ./config/server.properties

 8、开发环境搭建(idea)

1)项目框架搭建

2)prom依赖管理

父项目的prom文件

引入共同的日志管理工具

引入公有插件

Recommender的prom文件

DataLocader的prom文件

四、数据加载部分

1、DataLoader-加载数据模块项目

1)项目目录

2)项目依赖

2、Mongodb加载数据

1)定义样例类

2) 定义参数配置 

3)编程实现数据处理与写入

4)远程写入mongodb

可以看见数据已经成功加载

2.ElasticSearch加载数据

1)数据预处理

2)编程实现数据写入

3)查看数据是否加载成功

 

 五.基于LMF离线推荐部分

1.StatisticsRecommender-统计数据模块项目创建

1)项目目录

2)项目依赖

2.离线数据统计

         1)历史热门统计

        2)最近热门统计

         3)电影平均得分

         4)每个类别优质电影统计

 3.OfflineRecommender-离线推荐模块项目创建

1)项目目录

2)项目依赖

4.基于隐语义的协调过滤推荐

 项目采用 ALS 作为协同过滤算法,分别根据 MongoDB 中的用户评分表和电影 数据集计算用户电影推荐矩阵以及电影相似度矩阵

1)用户电影推荐矩阵

通过 ALS 训练出来的 Model 来计算所有当前用户电影的推荐矩阵,主要思路为:

1. UserId 和 MovieID 做笛卡尔积,产生(uid,mid)的元组

2. 通过模型预测(uid,mid)的元组。

3. 将预测结果通过预测分值进行排序。

4. 返回分值最大的 K 个电影,作为当前用户的推荐。

最后生成的数据保存到 MongoDB 的 UserRecs 表中

        编码实现:

 2)电影相似度矩阵

        编码实现

5. ALS模型参数选择-隐语义

1)ALS模型参数选择概念

als算法参数_推荐算法之ALS_钟离舟的博客-CSDN博客

RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差)_敲代码的quant的博客-CSDN博客_rmse

上述模型训练的过程中,我们直接给定了隐语义模型的 rank,iterations,lambda 三个参数。对于我们的模型,这并不一定是最优的参数选取,所以我们需要对模型 进行评估。通常的做法是计算均方根误差(RMSE),考察预测评分与实际评分之 间的误差。有了 RMSE,我们可以就可以通过多次调整参数值,来选取 RMSE 最小的一组 作为我们模型的优化选择。

2)编写代码

 六、实现推荐部分

1.StreamingRecommender-实施推荐模块项目建立

1)项目目录

2)项目依赖

 2.实施推荐部分算法

实时推荐算法的前提: 在 Redis 集群中存储了每一个用户最近对电影的 K 次评分。实时算法可以 快速获取。 离线推荐算法已经将电影相似度矩阵提前计算到了 MongoDB 中。 Kafka 已经获取到了用户实时的评分数据。

实时推荐算法输入为一个评分,而执行的核心 内容包括:获取 userId 最近 K 次评分、获取 movieId 最相似 K 个电影、计算候选 电影的推荐优先级、更新对 userId 的实时推荐结果。

1)数据连接环境

mongodb连接

Redies连接

kafka连接 

2)测试kafka环境是否连通

创建主题

[root@ha-01 kafka_2.11-0.10.2.1]#    

bin/kafka-topics.sh --create --zookeeper ha-01:2181 --replication-factor 1 --partitions 1 --topic recommender

 启动消费者生产者

生产者

[root@ha-01 kafka_2.11-0.10.2.1]#    

bin/kafka-console-producer.sh --broker-list ha-01:9092 --topic recommender

消费者

[root@ha-01 kafka_2.11-0.10.2.1]#      

bin/kafka-console-consumer.sh --bootstrap-server ha-01:9092 --topic recommender

自身流通性测试

 自身流通性无误 

与程序流通性

 3)推荐算法编程

获取用户的k次最近评分 

获取当前电影最相似的 K 个电影 

电影推荐优先级计算

 4)程序运行

1|1271|4.5|1554276432

2|10|4.0|835355493

 5)mongodb查看推荐结果

七、基于内容的推荐模块

1.ContentRecommender项目建立

1)项目目录

2)项目依赖

2.特征工程的选取

将标签内容进行提取,得到电影的内容特征向量,进 而可以通过求取相似度矩阵。这部分可以与实时推荐系统直接对接,计算出与用户 当前评分电影的相似电影,实现基于内容的实时推荐,通过 TF-IDF 算法对标签的权重进行调整,从而尽可能地接近 用户偏好。 

1)代码实现 

2)得出特征向量结果

3.编码实现基于内容的推荐模块

1)得到特征矩阵

 2)基于内容推荐

3)mongodb查看结果

八、 项目总结

1.项目可视化问题

经过我的研究,在mongodb中得到的数据都可以使用springboot微服务结合网页EChars进行可视化,尝试着新建了一个子项目专门用于表的可视化,以下为项目目录结构。

MoviesController

使用注解的形式构建网页父域子域

Movies

@Document("RateMoreMovies"),这个注解的意思就是连接数据库中指定的表

MoviesService

最后可以在网页中获取数据

对获取到的json数据可以灵活使用EChars进行可视化,但是由于时间关系,获取到数据后的可视化就没有继续进行了,但是已经可以充分实现。 

 2.项目实时系统联调问题

在尚硅谷的视频中有提到后台业务系统,业务系统连接flume日志采集传入kafka做sparkstreaming处理,过程中使用azkaban调度,在本项目中flume和azkaban的业务环境其实已经搭好,但是由于时间关系,没有太多时间进行程序的部署和运行。

因此业务后台与前端项目不做跟进与展示。

3.学习总结

此次项目其实是参照尚硅谷的学习视频一步一步做下来的,其实属于站在前人的肩膀上看世界,没有用熟悉的python语言去做,是因为作为大数据的学生最终走向的岗位还是后端偏多一些,java作为必不可少的语言其实在这几年的学习中已经略显生疏了。

秋招将临,而八股和基础mysql和java反而还不太熟练,这无疑在秋招是竞争不过别人的,所以我萌生出了此次推荐系统使用大数据处理的方式,linux操作系统下重新搭建这些环境,并且使用spark,这学期刚学的进行数据处理。最后呈现出来的实验报告就是上文这些。

历时一周,有因为基础问题跑不出代码,无法理解底层机制,也有想创新但是没有时间充分实现,总而言之这次项目意义非凡,希望后续有时间可以接着完善。

       我是个理想主义,我的学习,进步不想仅仅只是因为培养方案的倒逼,而是我愿意投身于学习进步的知识海洋,哲文政史、公式建模、代码编写,我喜欢吸收一切的知识,我也坚信在这短暂的一生中,大概率逃脱不了普通人命运的我,依旧会产生自己的价值。

勿忘昨日的苦难辉煌,无愧今天的使命担当,不负明天的伟大梦想。共勉。

 九、完整项目代码

jiangjiang913/Recommendation-system: 消费者行为分析-推荐系统 (github.com)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值