电影推荐系统 python简书_推荐系统实战
发布日期:2022-02-04 03:25:56 浏览次数:8 分类:技术文章

本文共 1396 字,大约阅读时间需要 4 分钟。

项目背景

本项目主要介绍电商系统中常见的推荐功能,包括热门商品和优质商品的统计推荐模块,基于隐语义模型实现的离线推荐模块,以及自定义规则的实时推荐模块。

技术栈

CentoOS 7.0

spark 2.1.1

hadoop 2.7

scala 2.11.8

redis 4.0.2

kafka 2.12

mongodb 3.4.3

zookeeper 3.4.10

flume-ng 1.8.0

JDK 1.8

数据流程

数据流

核心模块

统计推荐(离线统计)

热门商品 : 根据所有历史评分数据,计算评分次数最多的商品。

近期热门商品 :按月统计所有历史评分数据评分最多的商品。

优质商品 :根据有所历史评分数据,计算平均评分最高的商品。

基于隐语义模型的协同过滤推荐(离线推荐)

1、将用户评分数据,分解为用户向量和商品向量。

2、将用户向量和商品向量相乘,产生的笛卡尔积作为预测评分空矩阵,此时这是个稀疏矩阵。

3、调用saprk的ALS.train,进行模型训练后,使用模型对2的矩阵进行预测,预测结果是稠密矩阵,空的矩阵位置也产生了预测评分。

4、对新的稠密矩阵进行聚合、排序后,即可得到用户评分列表。

商品相似度列表

通过商品特征矩阵结合余弦相似度公式,产生商品相似度列表。

余弦相似度

模型评估和参数选取

对于ALS模型训练的过程中,直接指定了隐语义模型的三个参数(rank,iteration,lambda),所以需要对模型进行评估。通常采用均方根误差(RMSE),考察预测评分与实际评分之间的误差值。

均方根误差

实时推荐

1、用户u对商品p进行了评分,触发一次实时推荐计算。

2、获取用户u按时间顺序最近的K个评分,记为RK;获取商品p的最相似K个商品集合,记为S作为候选商品集合。

3、然后对每个商品(s中元素),计算推荐优先级,计算公式如下:

相似度评分加权推荐优先级计算公式

其中:

Rr表示用户u对商品r的评分;

sim(q,r)表示商品q与商品r的相似度,设定最小相似度为0.6,低于该阀值视为两者不相关并忽略;

sim_num表示q与RK中商品相似度大于最小阀值的个数

incount表示RK中与商品q相似且评分较高(>=3)的商品个数

recount表示RK中与商品q相似且本身评分较低(<3)的商品个数

公式意义:

首先对于每个候选商品q,从用户u最近K个评分中,找出与q相似度较高(>=0.6)的u已评分商品们,对于这些商品中的每个商品r,将r于q的相似度乘以用户u对r的评分,将这些乘积计算平均数,作为用户u对商品q的基础预测评分,lgmax{incount,1}是增强因子表示好评,lgmax{recount,1}是减弱因子,表示差评。此公式采用相似度乘以评分加权值,并利用增强与削弱因子,实现了自定义的商品推荐优先级计算。

基于内容的相似推荐

通过提取物品内容的UGC标签,作为特征向量,结合商品相似度公式和实时推荐规则,实现商品相似度列表。为了避免热门标签对特征提取的影响,可以通过TF-IDF调整其权重,尽可能接近用户偏好。

基于物品的协同过滤相似推荐

如果物品有同样的受众(感兴趣的人群),那么它们是有内在相关性的。所以利用已有的行为数据,分析受众的相似程度,进而得出物品间的相似度。我们把这种方法定义为“同现相似度”,公示如下:

同现相似度

转载地址:https://blog.csdn.net/weixin_39626369/article/details/111428713 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:pythonscrollbar布局_python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例...
下一篇:phpmyadmin漏洞_CVE201912922 phpMyAdmin 4.9.0.1跨站请求伪造漏洞复现

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月17日 07时06分46秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java list详解_java集合List解析 2019-04-21
java坐标代码_java实现计算地理坐标之间的距离 2019-04-21
kettle调用java程序_Kettle ETL调用 java代码来进行数据库的增删改查 2019-04-21
mysql 取两个时间差 php_在php和MySql中计算时间差的方法详解 2019-04-21
mysql 重启数据库实例_mysql 单机多实例重启数据库服务 2019-04-21
oracle12c order by,oracle 数据库中order by 的一些高级用法 2019-04-21
oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解 2019-04-21
导出oracle11g的空表,轻松解决oracle11g 空表不能 exp 导出 的问题。 2019-04-21
php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理 2019-04-21
oracle numlist,oracle sql str2numlist numtabletype 2019-04-21
php红包平均分配,红包平均分配算法 2019-04-21
linux磁盘的命令是,linux磁盘相关的命令 2019-04-21
linux服务器 缓存,Linux服务器内存使用分析及内存缓存 2019-04-21
linux查进程内存问题,关于linux 查看服务进程内存,cpu,内存占用的一些基础命令... 2019-04-21
linux英文包安装教程视频,Linux源码包安装过程讲解 2019-04-21
linux 关闭rsync服务器,linux下配置rsync服务器和实时同步 2019-04-21
linux初始化TCP服务失败,深入Linux系统追踪TCP初始化 2019-04-21
arch Linux添加源,在Arch Linux系统中使用Archlinuxcn源(清华源)的方法 2019-04-21
私人linux远程连接,Linux远程连接 - osc_5g1gl9wp的个人空间 - OSCHINA - 中文开源技术交流社区... 2019-04-21
windows文件迁移到linux,从Windows到Linux迁移之文件服务器(Samba和AD完美结合) 2019-04-21