文章目录
- 项目系统设计
- 项目框架
- 大数据处理流程
- 系统模块设计
- 项目系统架构
- 系统数据流图
- 数据源解析
- 主要数据模型
- 统计推荐模块
- 离线推荐模块(基于隐语义模型推荐)
- ALS推荐模型训练
- 计算用户推荐列表
- 计算电影相似度矩阵
- 基于模型的实时推荐模块
- 基于内容的推荐
- 混合推荐--分区混合
项目系统设计
主要内容:
网站本身代码已经做好了,主要做推荐系统
项目框架
大数据处理流程
详细高清图见ppt“6_电影推荐系统设计”
我们的目标:
实时推荐、离线推荐、热门推荐
有评分+标签
系统模块设计
项目系统架构
前端:angularjs
后台:spring
数据库:mongodb
辅助数据库:elasticsearch
缓存数据库:redis
工作调度服务:Azkaban
离线统计服务:spark sql
离散推荐服务:spark MLlib
实时推荐:Flume-ng
消息缓冲服务:kafka
实时推荐服务:spark streaming
系统数据流图
数据源解析
movies.csv
电影信息:
ratings.csv
用户评分信息:
tags.csv
电影标签信息:
主要数据模型
统计推荐模块
历史热门电影统计
近期热门电影统计
电影平均评分统计
各类别Top10评分电影统计
离线推荐模块(基于隐语义模型推荐)
- 用ALS算法训练隐语义模型
- 计算用户推荐矩阵
- 计算电影相似度矩阵
ALS推荐模型训练
ALS.train(trainData,rank,iterations,lambda)
rank:隐藏特征向量维度
iterations:迭代次数
lambda:正则化参数
通过交叉验证进行参数调整
计算用户推荐列表
笛卡尔积:相当于两个集合一对一join,外连接
计算电影相似度矩阵
矩阵分解后得到P和Q,P是用户特征矩阵,Q是电影特征矩阵,通过Q矩阵来计算电影相似度
为什么算相似度,不算欧氏距离?
每一个用户的评分标准不同,用户A的3分和用户B的3分的含义不一定一样。值不同,但是方向相同。夹角可以表现方向的差距
存储电影相似度矩阵
基于模型的实时推荐模块
要求:计算速度快,结果不一定特别精确
有预先设计好的推荐模型
推荐优先级计算
要考虑评分,评分反应用户的偏好
备选电影从相似电影里获得
把每一个备选电影单独计算,算一个推荐优先级
incount:最近k个电影的高分个数
recount:最近k个电影的低分个数
lg:增益项和惩罚项
如果最近看的k个电影都是低分电影,那么推荐的电影优先级应该降低。
基于内容的推荐
混合推荐–分区混合