LFM法实现的user item推荐系统

推荐系统之隐语义模型(LFM) 一 基本概念 LFM(latent factor model)隐语义模型,这也是在推荐系统中应用相当普遍的一种模型。那这种模型跟ItemCF或UserCF有什么不同呢?这里可以做一个对比: 对于UserCF,我们可以先计算和目标用户兴趣相似的用户,之后再根据计算出来的用户喜欢的物品给目标用户推荐物品。 而ItemCF,我们可以根据目标用户喜欢的物品,寻找和这些物品相似的物品,再推荐给用户 阅读详情

所有源码都在github上(https://github.com/seasonyao/recommended-system)

代码环境:windows环境下python3.5,安装numpy和sklearn即可

源码、数据、结果:https://download.youkuaiyun.com/download/codes_first/10741150

各个读入文件的格式如下:

               

一、代码理论模型(参考书本《推荐系统实践》以及《机器学习》中理论内容,可跳过看后文具体思路和实现)

 

1.LFM

对于一个给定的用户行为数据集(数据集包含的是所有的user, 所有的item,以及每个user有过行为的item列表),使用LFM对其建模后,我们可以得到如下图所示的模型:(假设数据集中有3个user, 4个item, LFM建模的分类数为4)

R矩阵是user-item矩阵,矩阵值Rij表示的是user i 对item j的兴趣度,这正是我们要求的值。对于一个user来说,当计算出他对所有item的兴趣度后,就可以进行排序并作出推荐。LFM算法从数据集中抽取出若干主题,作为user和item之间连接的桥梁,将R矩阵表示为P矩阵和Q矩阵相乘。其中P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度;Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能作为该类的代表。所以LFM根据如下公式来计算用户U对物品I的兴趣度

我们发现使用LFM后,
 

1.    我们不需要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算。

2.    不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。

3.    对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类。

4.    对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。

5.    对于每一个class,我们可以得到类中每个item的权重,越能代表这个类的item,权重越高。

那么,接下去的问题就是如何计算矩阵P和矩阵Q中参数值。一般做法就是最优化损失函数来求参数。在定义损失函数之前,我们需要准备一下数据集并对兴趣度的取值做一说明。


数据集应该包含所有的user和他们有过行为的(也就是喜欢)的item。所有的这些item构成了一个item全集。对于每个user来说,我们把他有过行为的item称为正样本,规定兴趣度RUI=1,此外我们还需要从item全集中随机抽样,选取与正样本数量相当的样本作为负样本,规定兴趣度为RUI=0。因此,兴趣的取值范围为[0,1]。


采样之后原有的数据集得到扩充,得到一个新的user-item集K={(U,I)},其中如果(U,I)是正样本,则RUI=1,否则RUI=0。损失函数如下所示:

上式中的是用来防止过拟合的正则化项,λ需要根据具体应用场景反复实验得到。损失函数的优化使用随机梯度下降算法:

 

1.    通过求参数PUK和QKI的偏导确定最快的下降方向;

2.    迭代计算不断优化参数(迭代次数事先人为设置),直到参数收敛。

其中,α是学习速率,α越大,迭代下降的越快。α和λ一样,也需要根据实际的应用场景反复实验得到。

 

LFM的伪代码可以表示如下:

 

2.Kmeans

K-Means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。

K-Means聚类算法主要分为三个步骤:
(1)第一步是为待聚类的点寻找聚类中心
(2)第二步是计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去
(3)第三步是计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心
(4)反复执行(2)、(3),直到聚类中心不再进行大范围移动或者聚类次数达到要求为止

 

 

 

二、思路分析和遇到的问题

 

在开始正式讲代码之前,先来说说对几个细节问题的解决思路:

1.根据数据集初始化P和Q矩阵

这个初始化其实耗费了巨量的写代码时间,我的思路是

(1)对于P矩阵,对每一个用户计算其自己评分的平均值,然后用户对每个class的评分就以平均值为基础进行正态分布的随机值取值。

 

(2)对于Q的初始化前前后后做了很多工作:一开始就是以所有评分的平均值进行正态随机值(显然这和理论不符合,理论上Q是概率矩阵,也就是某个item所有class加起来要为1,但一开始就先简单赋予初值了)。后来结合itemAtrribute的文件,首先对这个文件里的item进行聚类(使用kmean),对于聚类结果我的利用方式有两种:

(a)一种是根据聚类结果把item分为150个class(为什么是150后文有解释),那么对于Q矩阵的初始化就可以按照我们的理论进行初始化了:某个item根据聚类结果属于某个class(又出现在itemAttribute最好,没有也可以和150个中心点算距离得到类别),将这个class对应的数设为某个参数(需要实验,可以说取决于你的class聚类的可信度,可信度高就概率给的大接近1,低就小),当然还是进行正态处理得到p,对于这个item其他class的值,则是(1-p)/149再分别进行正态处理,为了保证和为1最后那个p得重新赋值1-sum(其他)。

(b)第二种想法其实相当于增加数据集,根据聚类结果可以将一些同class的item在相同user那的评分给个差不多的值(同样正态处理),这样就能减少过拟合的风险,当然效果也要取决于聚类的可信度。

 

2.确定4个参数:分类数F,迭代次数N,学习速率α,正则化参数λ。

 

其中α,λ都是实验出来的选择了0.015和0.01,N是一开始20次,之后可以看结果继续决定需不需要继续。对于F,这边结合itemAtrribute

推荐系统算法_推荐系统算法详解及案例实操 一、主要内容1、常用推荐算法分类常用推荐算法分类2、基于人口统计学的推荐算法基于人口统计学的推荐算法3、基于人口统计学的推荐算法基于人口统计学的推荐算法用户画像用户画像 图1用户画像 图24、基于内容的推荐算法基于内容的推荐算法 图1基于内容的推荐算法 图2相似度计算相似度计算基于内容的推荐算法 图35、基于内容推荐系统的高层次结构基于内容推荐系统的高层次结构特征工程 特征工程 图1特征工程... 阅读详情

相关推荐

基于LFM的商品评分预测

基于LFM的商品评分预测; 训练数据 trainingData 1300个用户在1182个项目上的评分,评分范围从1到5,共22824条数据 测试数据1 testData1 855个用户在789个项目上的评分,评分范围从1到5 测试数据2 testData2 935个用户在858个项目上的评分,评分范围从1到5 测试数据3 testData3 922个用户在864个项目上的评分,评分范围从1到5 测试数据4 testData4 912个用户在854个项目上的评分,评分范围从1到5 测试数据5 testData5 950个用户在853个项目上的评分,评分范围从1到5

LFM算法 复杂网络相关

LFM算法源码 复杂网络相关 linux环境 输出文件是output.dat,最下面便是结果,分为了多少个社区,每个社区的元素是哪些

(NOI)打表骗分过样例,暴力枚举出奇迹1.8.22题解

                                                                                                                                                           48818 B题解 #include <iostream> u...

Owen20071026的博客 3129

Unity3D实战:5分钟搞定RTSP监控视频流播放(附完整代码)

本文详细介绍了如何在Unity3D中快速实现低延迟RTSP监控视频流播放,提供完整代码和优化方案。通过Video Player组件和FFmpeg集成,开发者可以轻松应对智能家居和安防监控领域的实时视频流挑战,显著降低延迟并提升性能。

weixin_29015051的博客 590

避开这些坑!海天MA1600注塑机数据采集项目经验分享

本文分享了海天MA1600注塑机数据采集项目的实战经验。针对KEBA控制器接口不开放的难题,项目采用专用网关进行协议转换,并详细剖析了网络部署、ModbusTCP配置、数据准确性保障及现场运维中遇到的典型陷阱与解决方案,为同类工业物联网项目提供宝贵参考。

o4p5q6r7s的博客 492

避开ANSYS SOLID65钢筋模拟的坑:从材料TB到实常数R的完整配置清单

本文详细解析了ANSYS SOLID65单元在钢筋混凝土模拟中的关键配置与优化技巧,涵盖材料TB设置、实常数R配置及收敛性优化。特别针对钢筋建模的分布式钢筋模型进行深度解析,提供实战验证的参数设置手册,帮助工程师避免常见错误,提升模拟精度与效率。

weixin_30898555的博客 365

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

电池管理系统(BMS)技术全景解析:从基础原理到智能未来

《BMS技术演进与核心功能解析》摘要: 电池管理系统(BMS)作为新能源系统的智能中枢,已从基础保护电路发展为具备预测能力的智能系统。文章系统梳理了BMS三大技术时代:1.0保护时代(1990-2000)采用硬件保护电路;2.0智能时代(2000-2020)引入SOC算法;3.0云脑时代(2020后)实现AI预测。详细解析了BMS三大核心模块:AFE感知系统(±2mV精度)、功率驱动模块(10μs级保护)和均衡技术(效率提升至85%),并对比了主动/被动均衡技术差异。同时阐释了SOC/SOH等关键参数定义与

bother3000的博客 2986

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

YOLO 系统尊嘟太卷了吧,YOLOv11 还没完明白,YOLOv12 就重磅来袭,YOLOv12 是由纽约州立大学联合中科院在 2025年2月19 日发布,从 YOLOv12 论文题目我们大概就知道做了那些更新 ,下图是YOLOv12 在 COCO 数据集上的性能表现引入区域注意力机制(area-attention):通过引入十字形窗口自我注意机制,沿水平和垂直条纹计算注意力机制,纵横交错的注意机制。如下图所示,区域注意力采用最多简单的等分方法,将特征地图垂直或水平划分为 L 个区域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6万+

【WorkBuddy从入门到精通实战教程】使用手册 第 2 章 WorkBuddy的下载、安装、登录与更新

摘要:WorkBuddy官方下载地址为https://www.codebuddy.cn/work/,支持Mac和Windows系统,需根据设备自动匹配版本。安装时需核对发布者信息,Mac用户需拖入应用程序文件夹。登录支持微信扫码或手机号,公司电脑安装需IT授权。更新通过个人中心检查,遇到安装包损坏、登录失败或文件读写问题时,建议重新下载、检查网络/权限或联系官方支持。重要文件建议定期备份,避免直接操作原文件。(149字)

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 1991

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 高斯消去法SSE并行化实验
下一篇: 嵌入式系统实验报告(裸机实验)
codes_first
博客等级 码龄10年 255粉丝 34原创
评论 23
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值