电影推荐系统-整体总结(一)从整体上谈论此项目

一、推荐系统

推荐系统,推荐系统是信息过载所采用的措施,面对海量的数据信息,从中快速推荐出符合用户特点的物品。

二、该电影推荐系统整体架构

hadoop构建电影推荐系统 电影推荐系统架构_数据

该电影推荐项目主要实现了关键电影指标的数据统计和电影的推荐功能。

1.其中,涉及到的几个重点框架包括:

   Spark(Spark SQL、Spark Streaming、Spark MLlib)--提供数据离线和实时的计算 、Flume--提供日志采集服务、Kafka--提供消息缓冲服务、

   Elasticsearch--搜索服务器、Redis--缓存数据库、MongoDB--存储业务数据库。

2.系统在实际的实现功能过程主要分为两个部分--离线部分、实时部分

离线包括对电影的统计服务和离线推荐,实时就是对电影进行实时的推荐服务。

对于此电影推荐系统的实现过程为:

hadoop构建电影推荐系统 电影推荐系统架构_数据_02

(0)首先,通过Spark SQL进行初始化加载数据到MongoDB、Elasticsearch中);

(1)再根据MongoDB中存储的指定数据集借助Spark SQL进行电影的离线统计服务,包括电影平均评分、电影评分个数、最近电影评分个数以及电影类别TOP10 

         电影的统计,之后将结果写入MongoDB中;

(2)接着还会利用Spark MLlib对存储在MongoDB中指定的数据集进行离线推荐服务,算出ALS训练模型,结合实际数据从基于用户和基于商品两个角度进行预

         测,从而实现商品的推荐:

  • 基于用户的离线推荐大致流程:首先,从MongoDB中储存的关于电影评分数据的集合里取出关键性的3列数据-用户ID、电影ID、电影评分 来训练ALS模型。

           然后从MongoDB中存储的关于电影数据的集合里取出所有电影ID

           再将之前用户ID这列的数据单独取出,两者做笛卡尔积(cartesian)

           之后结合模型得出预期(predict)数据、最后再进行过滤、模式匹配、分组之后存入MongoDB中;

  • 基于物品的离线推荐大致流程:首先,根据之前在基于用户做推荐算出的模型,获取(50)维向量的特征矩阵(productFeatures)

           然后,将其与自身做笛卡儿积,过滤出电影自身和自身相似的数据,

           接下来进行模式匹配和余弦相似度的计算

           最后再进行过滤、分组,存入MongoDB中。

  • ALS模型参数(rank-特征维度、lambda-放过拟合参数(跨度))优化:遍历两个参数的所有待选值,形成ALS训练模型,之后计算采用此模型带来的均方根误差

     选取最小的误差并连带其配置的模型参数-----将(rank,lambda,rmse-最小误差) 返回出去。

(3)在实时部分呢,会使用Flume、Kafka以及Redis对接Spark Streaming 再结合数据分析公式 进行数据的实时推荐服务

         (其中,Redis是用来缓存历史数据的,Flume、Kafka则是负责实时接收数据的)