当前位置: 首页 > news >正文

一文讲清协同过滤,矩阵分解,spark als,显示反馈与隐式反馈

1.协同过滤

协同过滤分为基于用户的协同过滤,基于物品的协同过滤,基于模型的协同过滤。

1.1 基于用户的协同过滤
  1. 先计算用户a与其他用户b,c,d的余弦相似度b1,c1,d1。

    1. 用户的余弦相似度计算方法为:用户对所有物品的评分为该用户向量,针对用户之间向量求余弦即为用户相似度。

  2. 然后利用其他用户对物品A的评分bA,cA,dA,通过(bA*b1+cA*c1+dA*d1)/(b1+c1+d1)得到用户a对物品A的推测得分。

1.2 基于物品的协同过滤
  1. 先计算物品的余弦相似度。

    1. 物品的余弦相似度计算方法为:所有用户对该物品的评分为该物品向量,针对物品之间向量求余弦即为物品相似度。

  2. 然后针对用户a消费的物品序列b,c,d分别得到对应的topk个相似物品(e,f,g),e的推测得分就为(b1*be+c1*ce+d1*de)/(be+ce+de)(其中b1,c1,d1是用户a针对b,c,d的评分,be,ce,de是b与e,c与e,d与e的物品相似度)。

2.矩阵分解(基于模型的协同过滤)

假设n个用户,m件物品,那么评分矩阵维度为n*m,假设分解的目标维度为embedding_dim,那么分解后的用户矩阵维度为n*embedding_dim,物品矩阵维度为embedding_dim*m,计算得到用户矩阵和物品矩阵后可以得到任意用户对任意物品的推测得分。

预测评分矩阵的目标函数为:

上式前半部分表示的是User矩阵*Item矩阵与评分矩阵中已知的评分差异,后半部分是L2正则项,保证数值计算稳定性,防止过拟合。

上述目标函数最优化问题的工程解法一般采用交替最小二乘法ALS(Alternating Least Squares)或随机梯度下降。

参考资料:推荐算法学习(五):评分预测&矩阵分解

3.spark als(Alternating Least Squares)

ALS als = new ALS().setMaxIter(alsMaxIter).setRegParam(0.01).setImplicitPrefs(true).setRank(alsRank).setNumUserBlocks(alsNumBlock).setNumItemBlocks(1).setUserCol(uidIdxCol).setItemCol(itemIdxCol).setCheckpointInterval(3).setRatingCol(ratingCol);

以上参数的含义为:

  1. setMaxIter(alsMaxIter):设置运行迭代的最大次数。

  2. setRegParam(0.01):设置ALS的正则化参数。

  3. setImplicitPrefs(true):指定ALS使用隐式反馈数据,而不是显式反馈。

  4. setRank(alsRank):设置模型中的因子数,也就是在用户和物品特征矩阵中的隐含特征数。

  5. setNumUserBlocks(alsNumBlock):设置用户块的数量,用于并行化计算。

  6. setNumItemBlocks(1):设置物品块的数量,用于并行化计算。

  7. setUserCol(uidIdxCol):设置用户列的名称。

  8. setItemCol(itemIdxCol):设置物品列的名称。

  9. setCheckpointInterval(3):设置检查点间隔,这里的含义为每3次迭代生成一份检查点文件,这个参数越小,模型训练能从越近的地方恢复训练,训练更稳定,但是会增加IO时间。

  10. setRatingCol(ratingCol):设置评分列的名称。

4.显式反馈与隐式反馈

  1. 显式反馈:用户明确提供的反馈,例如评分、喜欢或不喜欢、喜欢的程度等。这些反馈数据通常被认为是用户对物品的真实评价,因此可以直接用于建立推荐模型。然而,获取显式反馈的机会通常比较少,因为它需要用户主动提供反馈,而大多数用户在使用产品或服务时并不会主动提供反馈。

  2. 隐式反馈:用户在使用产品或服务过程中产生的行为数据,例如点击、浏览、购买、搜索等。这些数据可以被视为用户的隐式反馈,它们可以提供用户的兴趣和偏好信息,但解释性比显式反馈弱,因为用户的行为可能受到各种因素的影响,并不一定反映出用户的真实偏好。

对于显式反馈,ALS模型的目标是最小化以下损失函数:

L = ∑(r_ui - x_u^T * y_i)^2 + λ(∑||x_u||^2 + ∑||y_i||^2)

其中,r_ui是用户u对物品i的评分,x_u和y_i分别是用户u和物品i的潜在因子,λ是正则化参数。模型会通过交替最小二乘法(Alternating Least Squares)迭代优化用户和物品的潜在因子,使得损失函数最小。

对于隐式反馈,ALS模型的目标是最小化以下损失函数:

L = ∑c_ui*(p_ui - x_u^T * y_i)^2 + λ(∑||x_u||^2 + ∑||y_i||^2)

其中,c_ui是用户u对物品i的置信度,p_ui是用户u对物品i的偏好(如果用户u有过对物品i的行为,p_ui=1,否则p_ui=0),其他参数的含义与显式反馈的模型相同。置信度c_ui通常是用户对物品的行为数量的函数,例如点击次数、购买次数等。

可以看出,显式反馈的ALS模型直接使用用户的评分作为目标,而隐式反馈的ALS模型使用用户的偏好和置信度作为目标。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 蓝牙耳机百元内怎么选?四款上榜百元品牌机型合集
  • HTB-Explosion(rdp连接)和preignition(目录遍历)
  • 外包干了2年,女朋友跑了...
  • 【Linux】基本命令(第二篇)
  • 【系统分析师】-综合知识-计算机网络与信息安全
  • 无损放大图片,盘点5款最新无损放大图片软件
  • Python和MATLAB和R对比敏感度函数导图
  • Redis单线程和多线程
  • YOLOv8目标检测部署RK3588全过程,附代码pt->onnx->rknn,附【详细代码】
  • Apache Doris 使用 CBO 和 RBO 结合的优化策略
  • JMeter Plugins之内网插件问题解决
  • 【C++】继承详解
  • Swift性能优化:掌握Swift性能分析工具的实用指南
  • C++基础面试题 | 什么是C++的列表初始化?
  • 大模型介绍
  • Android 架构优化~MVP 架构改造
  • Iterator 和 for...of 循环
  • Java 23种设计模式 之单例模式 7种实现方式
  • JS专题之继承
  • mongodb--安装和初步使用教程
  • nodejs:开发并发布一个nodejs包
  • vagrant 添加本地 box 安装 laravel homestead
  • 工程优化暨babel升级小记
  • 观察者模式实现非直接耦合
  • 回顾2016
  • 聚簇索引和非聚簇索引
  • 蓝海存储开关机注意事项总结
  • 爬虫模拟登陆 SegmentFault
  • 漂亮刷新控件-iOS
  • 使用Gradle第一次构建Java程序
  • 无服务器化是企业 IT 架构的未来吗?
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 用简单代码看卷积组块发展
  • 最近的计划
  • zabbix3.2监控linux磁盘IO
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (八)Flask之app.route装饰器函数的参数
  • (编译到47%失败)to be deleted
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十)c52学习之旅-定时器实验
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (算法设计与分析)第一章算法概述-习题
  • (转)shell调试方法
  • ***通过什么方式***网吧
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET/C# 使窗口永不获得焦点
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET开源、简单、实用的数据库文档生成工具
  • .net实现客户区延伸至至非客户区