推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现

这篇具有很好参考价值的文章主要介绍了推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


基础推荐模型——传送门

  • 推荐系统 | 基础推荐模型 | 协同过滤 | UserCF与ItemCF的Python实现及优化
  • 推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现
  • 推荐系统 | 基础推荐模型 | 逻辑回归模型 | LS-PLM | PyTorch实现
  • 推荐系统 | 基础推荐模型 | 特征交叉 | FM | FFM | PyTorch实现
  • 推荐系统 | 基础推荐模型 | GBDT+LR模型 | Python实现

一、矩阵分解模型

  为了使协同过滤能够更好地处理稀疏共现矩阵问题 ,增强模型的泛化能力,从协同过滤衍生出矩阵分解模型( Matrix Factorization , MF) ,并发展出矩阵分解的各分支模型,比如:隐语义模型LFM
推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现
  针对协同过滤算法的头部效应较明显、泛化能力较弱的问题,同时增加模型的泛化能力,矩阵分解技术被提出。该方法在协同过滤共现矩阵的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐含特征,在一定程度上弥补了协同过滤模型处理稀疏矩阵能力不足的问题

1.矩阵分解算法的原理

  Netflix 是美国最大的流媒体公司,其推荐系统的主要应用场景是利用用户的行为历史,在 Netflix 的视频应用中为用户推荐喜欢的电影、电视剧或纪录片等。
  下面用图例的方式分别描述协同过滤算法矩阵分解算法在视频推荐场景下的算法原理。
推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现
如上图所示,协同过滤算法找到用户可能喜欢的视频的方式很直接,即基于用户的观看历史,找到跟目标用户 Joe 看过同样视频的相似用户,然后找到这些相似用户喜欢看的其他视频,推荐给目标 Joe
推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现
如上图所示,矩阵分解算法则期望为每一个用户和视频生成一个隐向量 ,将用户和视频定位到隐向量的表示空间上,距离相近的用户和视频表明兴趣特点接近,在推荐过程中,就应该把距离相近的视频推荐给目标用户。例如,如果希望为用户 Dave 推荐视频,可以发现离 Dave 的用户向量最近的两个视频向量分别是 “Qcean’s 11”、 “The Lion King” ,那么可以根据向量距离由近到远的顺序生成 Dave 的推荐列表。
  在"矩阵分解"的算法框架下,用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的。矩阵分解算法将 m × n m×n m×n 维的共现矩阵 R R R分解为 m × k m×k m×k维的用户矩阵 U U U k × n k×n k×n维的物品矩阵 V V V相乘的形式。 其中, m m m是用户数, n n n是物品数, k k k是隐向量维度的大小,决定了隐向量表达能力的强弱 k k k的取值越小,隐向量包含的信息越少,模型的泛化程度越高;反之, k k k的取值越大,隐向量的表达能力越强,但泛化程度相应降低。 此外, k k k的取值还与矩阵分解的求解复杂度直接相关。在具体应用中, k k k的取值要经过多次试验找到一个推荐效果和工程开销的平衡点。
推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现
  基于用户矩阵 U U U和物品矩阵 V V V,用户 u u u对物品 i i i的预估评分为:
r ^ u i = q i T p u = ∑ f = 1 F 𝑝 𝑢 , 𝑘 𝑞 𝑖 , 𝑘 \widehat{r}_{ui}=q_i^Tp_u=\sum_{f=1}^F 𝑝_{𝑢,𝑘}𝑞_{𝑖,𝑘} r ui=qiTpu=f=1Fpu,kqi,k
其中,

  • p u p_u pu是用户 u u u在用户矩阵 U U U中的对应行向量;
  • q i q_i qi是物品 i i i在物品矩阵 V V V中的对应列向量。
  • 𝑝 𝑢 , 𝑘 𝑝_{𝑢,𝑘} pu,k度量了用户的兴趣和第 k k k个隐类的关系
  • 𝑞 𝑖 , 𝑘 𝑞_{𝑖,𝑘} qi,k度量了第 k k k个隐类和物品之间的关系

  隐语义模型(LFM)是一种基于兴趣分类的方法,可以对物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。 𝑝 𝑢 , 𝑘 𝑝_{𝑢,𝑘} pu,k可以认为是判断用户属于某个兴趣分类的打分, 𝑞 𝑖 , 𝑘 𝑞_{𝑖,𝑘} qi,k可以认为是物品属于该兴趣分类的分数。

2.矩阵分解的求解过程

  对矩阵进行矩阵分解的主要方法有三种:特征值分解( Eigen Decomposition )、奇异值分解( Singular Value Decomposition , SVD) 和梯度下降( Gradient Descent)。 其中,特征值分解只能作用于方阵,显然不适用于分解用户-物品矩阵
  奇异值分解的具体描述如下:

  1. 假设矩阵 M M M是一个 m × n m×n m×n 的矩阵,则一定存在一个分解 M = U ∑ V T ,其中 M=U\sum{V^T}, 其中 M=UVT,其中U是 m × m m×m m×m的正交矩阵, V V V n × n n×n n×n的正交矩阵, ∑ \sum m × n m×n m×n的对角阵。
  2. 取对角阵 ∑ \sum 中较大的 k k k个元素作为隐含特征,删除 ∑ \sum 的其他维度及 U U U V V V中对应的维度,矩阵 M M M被分解为 M ≈ U m × k ∑ k × k V k × n T M≈U_{m×k}\sum_{k×k}V_{k×n}^T MUm×kk×kVk×nT,至此完成了隐向量维度为 k k k的矩阵分解。

可以说,奇异值分解似乎完美地解决了矩阵分解的问题,但其存在两点缺陷,使其不宜作为互联网场景下矩阵分解的主要方法。

  1. 奇异值分解要求原始的共现矩阵是稠密的,互联网场景下大部分用户的行为历史非常少,用户-物品的共现矩阵非常稀疏,这与奇异值分解的应用条件相悖。如果应用奇异值分解,就必须对缺失的元素值进行填充。
  2. 传统奇异值分解的计算复杂度达到了 O ( m n 2 ) O(mn^2) O(mn2)级别 ,这对于商品数量动辄上百万、用户数往往上千万的互联网场景来说几乎是不可接受的。

由于上述两个原因,传统奇异值分解也不适用于解决大规模稀疏矩阵的矩阵分解问题 因此,梯度下降法成了进行矩阵分解的主要方法。
  2006年的Netflix Prize之后, Simon Funk公布了一个矩阵分解算法叫做Funk-SVD,后来被Netflix Prize的冠军Koren称为Latent Factor Model(LFM)Funk-SVD的思想: 把求解上面两个矩阵的参数问题转换成一个最优化问题, 可以通过训练集里面的观察值利用最小化来学习用户矩阵和物品矩阵
  下面介绍梯度下降进行矩阵分解的方法。求解矩阵分解的目标函数
m i n q ∗ p ∗ ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 min_{q^* p^*}\sum_{(u,i)∈K}(r_{ui}-q_i^Tp_u)^2 minqp(u,i)K(ruiqiTpu)2
其中, K K K是所有用户评分样本的集合。
该目标函数的目的是让原始评分 r u i r_{ui} rui与用户向量和物品向量之积 q i T p u q_i^Tp_u qiTpu变小,这样才能最大限度地保存共现矩阵的原始信息。
  为了减少过拟合现象,加入正则化项后的目标函数为:
m i n q ∗ p ∗ ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 + λ ( ∣ ∣ q i ∣ ∣ + ∣ ∣ p u ∣ ∣ ) 2 min_{q^* p^*}\sum_{(u,i)∈K}(r_{ui}-q_i^Tp_u)^2+\lambda(||q_i||+||p_u||)^2 minqp文章来源地址https://www.toymoban.com/news/detail-405732.html

到了这里,关于推荐系统 | 基础推荐模型 | 矩阵分解模型 | 隐语义模型 | PyTorch实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 推荐算法之--矩阵分解(Matrix Factorization)

    在众多推荐算法或模型的发展演化脉络中,基于 矩阵分解 的推荐算法,处在了一个关键的位置: 向前承接了 协同率波 的主要思想,一定程度上提高了处理稀疏数据的能力和模型泛化能力,缓解了头部效应; 向后可以作为 Embedding 思想的一种简单实现,可以很方便、灵活地

    2023年04月13日
    浏览(46)
  • UNet语义分割模型的使用-Pytorch

    最近有时间,跑了一下UNet模型,因为自己的深度学习基础不扎实,导致用了一些时间。目前只停留在使用和理解别人模型的基础上,对于优化模型的相关方法还有待学习。 众所周知,UNent是进行语义分割的知名模型,它的U形结构很多人也都见过,但是如果自己没有亲自试过

    2024年02月03日
    浏览(49)
  • 矩阵理论| 基础:线性子空间(非平凡子空间)、空间分解、直和分解

    前置:线性代数学习笔记3-5:秩1矩阵和矩阵作为“向量”构成的空间 空间 V mathbf V V 有子空间 V 1 mathbf V_1 V 1 ​ (一组基为 α 1 , α 2 , . . . , α k alpha_1,alpha_2,...,alpha_k α 1 ​ , α 2 ​ , ... , α k ​ )和子空间 V 2 mathbf V_2 V 2 ​ (一组基为 β 1 , β 2 , . . . , β l beta_1,beta_2,

    2024年02月09日
    浏览(55)
  • 【分布鲁棒和多目标非负矩阵分解】基于DR-NMF的对NMF问题噪声模型的识别鲁棒性研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2024年02月07日
    浏览(52)
  • Windows11环境下VS2019调用Pytorch语义分割模型(C++版)

             语义分割模型在训练时往往采用python脚本进行网络搭建和训练,并获得训练好的模型。为了提高效率方便整个工程项目部署,实际工程应用中通常希望使用C++编程语言调用训练好的网络模型。查询大量网络资料并踩过无数坑后,经实际测试实现了在window11环境下调用

    2024年02月14日
    浏览(61)
  • SLAM ORB-SLAM2(22)分解基础矩阵

    在 《SLAM ORB-SLAM2(12)估算运动并初始地图点》 中了解到 估算两帧间相对运动过程: 记录特征点对的匹配关系 RANSAC 采样准备 计算H矩阵或者F矩阵 判断并选取模型求位姿过程 在

    2024年04月15日
    浏览(45)
  • Matlab实现矩阵的QR分解和奇异值分解

    1.安装并运行matlab软件; 2.在命令窗口行输入需要进行QR分解的矩阵,并输入求秩及进行QR分解的函数,如下图; 3.点击回车键,则可得Q及R矩阵; 4.若要查看之前所输入的矩阵及所获得的相关变量,可从右侧工作区窗口查看; 5.单击需要查看的变量名,则相关变量会被显示在主窗口

    2024年02月16日
    浏览(71)
  • 矩阵分解及其Eigen实现

    主要是用来记录自己的学习过程,内容也主要来自于网上的各种资料,然后自己总结而来,参考的资料都以注明,感谢这些作者的分享。如果内容有误,请大家指点。 定义        将矩阵等价为两个矩阵 L L L 和 U U U 的乘积 ,其中 L L L 和 U U U 分别是单位下三角矩阵和上三角

    2024年02月03日
    浏览(48)
  • 语义分割系列11-DAnet(pytorch实现)

    DAnet:Dual Attention Network for Scene Segmentation 发布于CVPR2019,本文将进行DAnet的论文讲解和复现工作。 DAnet的思想并没有之前提到的DFAnet那么花里胡哨,需要各种多层次的连接,DAnet的主要思想就是——同时引入了空间注意力和通道注意力,也就是Dual Attention = Channel Attention + Posit

    2023年04月13日
    浏览(63)
  • Python实现矩阵奇异值分解(SVD)

    Python实现矩阵奇异值分解(SVD) 矩阵奇异值分解(Singular Value Decomposition, SVD)是一种重要的矩阵分解方法,可以将一个矩阵分解成三个矩阵的乘积,即 A = U Σ V T A=USigma V^{T} A = U Σ

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包