R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例

随着用户数量和项目数量的增加,数据的稀疏性成为影响推荐质量的重要因素。对此,本文帮助客户提出了一种基于混合SVD矩阵填充技术的协同过滤算法点击文末“阅读原文”获取完整代码数据

相关视频

image.png

首先利用准确度指标找出SVD的最优参数和混合IBCF算法的最佳权重,然后使用SVD降维方法对原始的高维稀疏矩阵进行预测填充,最后使用IBCF在用户所属类中寻找目标用户最近邻并使用最佳权重合并结果产生推荐。该算法利用用户与项目之间的潜在关系克服了稀疏性问题,同时保留了可离线建模、可扩展性好等优点。

以母婴产品为例,通过分析母婴类产品,收集数据集构造母婴领域不同类型产品的特征向量。提取母婴类偏好系数不为0的用户为目标用户,通过用户访问的时间偏好来确定服务推荐的权重,计算其访问的母婴类与目标产品的特征向量的相似度来确定推荐产品的类型。最后,在购物平台上实践结果表明,该方法确实可提升用户的个性化推荐。

用户个性化需求解决方案设计

提高计算精度——优化 k 值, SVD ItemCF 的合并

目前协同过滤算法分为:基于物品(Item-based)的和基于用户(User-based)的,但是在实际商业应用中,User-based算法存在两个重大问题:

1. 数据稀疏性。一个大型的母婴类电子商务推荐系统一般有非常多的商品,用户可能买的其中不到1%的商品,不同用户之间买的商品重叠性较低,导致算法无法找到一个用户的邻居,即偏好相似的用户。

2. 算法扩展性。最近邻居算法的计算量随着用户和商品数量的增加而增加,不适合实际情况中商品数据量大的情况。

由于母婴类商品的相似性较高,不同商品具有比较固定的相似度,所以我们使用基于物品的协同过滤算法(IBCF)来进行推荐,在推荐过程中可以预先在线下计算好不同商品之间的相似度结果,然后把结果存在相似度表中,当推荐时进行表的查询,预测用户可能的偏好值,从而进行推荐。同时,由于母婴商品相似度高,当推荐过程的运算量比较大的时候,使用物品的一个小部分子集也可以得到高质量的预测结果。

基于物品的协同过滤算法(IBCF)是在计算邻居时采用物品本身,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。因此当物品和用户维度较高的时候,算法的运算量就会很大。

针对上述问题,Sarwar等人首次将SVD算法应用到协同过滤中,使用SVD方法将用户评分分解为不同的特征及这些特征对应的重要程度,利用用户与项目之间潜在的关系,用初始评分矩阵的奇异值分解去抽取一些本质的特征,降低数据维度来进行推荐,从而提高运算效率。

由于SVD算法中保留的维数k很重要,也不容易选取,k如果太小,容易失去原始数据中重要的信息,不能得到用户评分矩阵的重要结构,k如果选大了,达不到降维的目的,而且容易过拟合训练数据,因此测试数据时需要先对k的取值进行优化,选取最优的k值然后再进行实验。

 

更客观的评价用户对商品的兴趣——用户行为权重、用户遗忘曲线

本文首先根据用户的不同行为(bhv)定义偏好权重,行为:"投诉" 、"下单"、 "商品浏览" 、"商品加入购物车" 、"评论"分别对应偏好分值-1、4、3、2、3。

然而传统的推荐基于用户兴趣是固定不变的假设,即用户兴趣不随时间的变化而改变,因此,这些方法不能反映用户兴趣的变化。同时,被推荐的资源(产品)往往具有时效性,用户的兴趣也往往随时间的不同而变化。

针对以上问题,为了满足用户的个性化需求,我们提出了基于时间加权的协同过滤算法,考虑了时间对推荐质量的影响,认为用户兴趣随时间的流逝而衰减,即某个用户感兴趣的资源最可能和他近期访问过的资源相似。

其中,艾宾浩斯遗忘曲线可以较好的描述用户浏览商品和遗忘的过程。它认为当用户浏览商品时,商品信息输入大脑后,遗忘也就随之开始了。遗忘率随时间的流逝而先快后慢,特别是在刚刚识记的短时间里,遗忘最快。遵循艾宾浩斯遗忘曲线所揭示的记忆规律,对所浏览的商品及时进行推荐,可以提升用户的个性化推荐。

用户购买周期性问题解决——惩罚上一周购买

然而,常常存在这样一种现象,用户往往在根据自己的兴趣爱好购买了商品之后,一段时间内会对所购买物品相似的物品产生“疲倦期”,会更加趋向于选择与以前购买过的商品较为相异的那些新商品进行购买。从本质上讲,这种情况往往发生在作为用户短期兴趣的资源上,这样的用户兴趣会随时间的接近而衰减。因此,如果能有效识别出用户的短期兴趣,在预测用户最感兴趣的资源时加以考虑,区分不同时间对推荐的不同影响,可以提升用户的个性化推荐。

算法设计

 

结合用户个性化解决方案,本文提出算法的具体步骤描述如下:

第一步: 计算用户偏好

本文首先根据用户的不同行为(bhv)定义偏好权重,然后根据用户行为距今的时间差对用户的偏好进行权重调整,其中权重的计算使用艾宾浩斯(H.Ebbinghaus)遗忘率,并且计算得到最终的用户行为偏好。

 

第二步: 利用 SVD 对原始的稀疏矩阵进行平滑,填补缺失值

第三步: 在测试集上对用户评分进行预测

接下来,算法具备良好的可扩展性根据用户a与其最近邻的相似度,本文采用经典的最近邻预测算法预测对未知项目的评分

883f1b7ae87254306185b8706194a6ab.png



评估数据集和度量标准

随着电商行业的迅猛发展,母婴类购物平台异军突起,进入高速发展期,为妈妈们提供了母婴产品、母婴健康、交流交友等相关的服务和帮助,拥—个数量相当可观的消费群体。因此,我们试图在母婴电商平台中引入推荐系统,从而满足尽可能多的用户个性化推荐的需求。

本文选取母婴用户数据作为实验数据集。该数据集为一个月的用户评分数据,包含8989个用户对 6958个商品的评分记录 151400条。用户评分值介于 1到199 之间,评分间隔为 1,数值越大,说明用户对商品的喜爱程度越高,反之,说明用户对商品兴趣度不高。数据集示例如图所示。实验中随机抽取用户评分数据集的 80%作为训练集,其余 20%作为测试集。

d96bb0bd2bb4dbe47d308a7dad8ded53.png

数据集描述

变量 描述 变量类型
DeviceIdentity 用户id 名义变量
SKUId_All 商品id 名义变量
is_temai 是否特卖商品 名义变量
bhv_type 用户行为类型 名义变量
bhv_cnt 行为数量 数值变量
bhv_datetime 行为时间 日期变量

评分预测的预测准确度一般通过平均绝对误差 (MAE)、根方误差(RMSE)等计算,平均绝对偏差越小,预测的准确度越高。

结果

(1)SVD算法参数k的设定

SVD算法中保留的维数k很重要,也不容易选取,k如果太小,容易失去原始数据中重要的信息,不能得到用户评分矩阵的重要结构,k如果选大了,达不到降维的目的,而且容易过拟合训练数据,本节利用测试集数据先对k的取值进行优化,选取最优的k值然后再进行实验。

k与MAE、RMSE、MSE的变化关系如图所示,图中了显示奇异值分解方法中不同维数k下的运行结果,实验中k的取值从5到225,步长为20,分别计算不同k水平下各个指标,选取指标最小时的k值作为最优值。从结果中我们可以看出,当k=45时,平均绝对误差(MAE)最小,所以对于这个数据集,维数k=45是最佳的。所以,在后续采用基于SVD算法的协同过滤算法的试验中我们选取k=45。

(2) 最优权重的选择

function( k){
 cofi_rec <- Recommender(
   data=ratings_train,
   method="svd", param=list(k = k))
 cofi_rec_pred <- predict(
   cofi_rec,
   ratings_test_known ,
  type='ratings',n = 20)
 cofi_rec_pred_acc <- calcPredictionAccuracy(
   cofi_rec_pred,
   ratings_test_unknown )
 cofi_rec_pred_acc
 }
 
 k=seq(5,150,by = 10)
 time=0
 RMSE=0
 MSE=0
 MAE=0
 for(i in 1:length(k)){
 time[i]=system.time(recomres<-mclapply( k[i], ratingsrecsvd))
 RMSE[i]=recomres[[1]][1]
 MSE[i]=recomres[[1]][2]
 MAE[i]=recomres[[1]][3]
Recommender(
Recommender(ratings_train, method = "SVD", param=list(274)),
Recommender(ratings_train, method = "IBCF") ,
weights = c(.8,   .2)
)

747f151e1f8eb709cb56d63687714b31.png

872533a30c3fb020692bdf2aed6d8647.png

e7c4321b2914b6d1dfa73c1389944be4.png 013149b50ba7e841aeffec8abd1d26bb.png

为了得到最优推荐结果,首先应得到最优SVD和IBCF的混合权重。我们将从0.5开始每递增0.1直到0.9为止,利用用户-项目评分矩阵,分别计算调整对应算法的预测精度MAE、RMSE、MSE值。实验结果如图所示。从结果来看当取0.8的时候具有最高的准确度。因此,下文使用SVD的混合权重为0.8。

ROC性能比较

为了验证本文所提出的算法的性能,将传统的推荐算法和本文提出的基于SVD的协同过滤的算法(SVD approximation)进行TOP-N实验比对。其中,使用SVD对用户-项目评价矩阵降低稀疏程度时使用上述实验得到的45作为最佳维度。实验指标使用ROC曲线性能。ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验评价方法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。ROC曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,允许有中间状态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。因此,ROC曲线评价方法适用的范围更为广泛。

在测试数据集上,这五种方法在不同近邻个数上的ROC性能表现如图所示,其中横坐标为FPR,纵坐标是TPR值。

3d849c3775c59a59a0c5ca9c7ff7267f.png

在图中,曲线random item代表随机推荐算法,曲线popular item代表热门物品推荐算法,曲线user-based cf代表基于用户的协同过滤算法,曲线item-based cf代表基于物品的协同过滤算法,曲线SVD approximation代表基于SVD矩阵分解的协同过滤算法。

由图可以看到基于SVD矩阵分解的协同过滤算法在ROC指标上要优于其他算法。

精确度指标比较

在接下来的精确度实验中,我们选择SVD算法与其他算法在MAE、RMSE、MSE指标上进行比较。实验结果如图所示。

f51f18ac78407326459700626388f7ca.png


96f49bc067c475c26e6c2514fdf1a17e.png 横轴代表不同的推荐精确度衡量指标,包括MAE、MSE和RMSE。其中,每个指标对应的条形图分别为IBCF、SVD、RANDOM和POPULAR对应的指标函数值。

SVD算法与其他算法相比,在不同的精确度指标下表现较好,即新算法在推荐质量上有所改善,有效地提升了推荐精度。

结论与展望

本文在传统协同过滤的基础上对用户个性化推荐需求进行了研究,将SVD、时间权重等方法应用到传统推荐算法中,给出了几个改进的算法,并且在母婴数据集上进行了相关实验。主要研究工作如下:

1、将SVD应用到传统协同过滤算法中,提出了基于SVD的项目推荐算法,在一定程度上缓解了数据稀疏性问题。同时,提高了算法的推荐速度,在实际应用中,提升了用户的个性化推荐。

2、针对用户对近期已购物品的购买倾向产生的“疲倦”问题。本文提出对近期购买物品的偏好进行惩罚的思想,并且结合艾宾浩斯遗忘曲线函数对用户的偏好进行加权,提出了时间权重的SVD推荐算法。实验结果表明,该算法在缩短了算法的执行时间的同时提高了用户的个性化推荐。

3、使用混合推荐的方法将SVD和IBCF的推荐结果根据最优权重来合并。基于混合推荐的优化协同过滤算法既保证了SVD在数据极端稀疏的情况下可以获得更好的推荐质量,又兼顾了IBCF可以考虑相似物品的特征。该算法在不同的测试标准及不同数据集上的执行效果将作进一步的研究。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
8天前
|
算法
基于模糊PI控制算法的龙格库塔CSTR模型控制系统simulink建模与仿真
本项目基于MATLAB2022a,采用模糊PI控制算法结合龙格-库塔方法,对CSTR模型进行Simulink建模与仿真。通过模糊控制处理误差及变化率,实现精确控制。核心在于将模糊逻辑与经典数值方法融合,提升系统性能。
|
8天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
81 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
84 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
85 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
15天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
21天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
17天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。