矩阵分解|Matrix Factorization

在上节讲过,用户和item之间的关系可以用一个关系矩阵表示,而矩阵分解式一个简单的嵌入模型。假设一个用户反馈矩阵:A∈Rm×nA \in R^{m \times n}A∈Rm×n,其中m表示用户的数量,n表示item的数量

  • 用户嵌入矩阵 U∈Rm×dU \in \mathbb R^{m \times d}U∈Rm×d
  • 商品嵌入矩阵 V∈Rn×dV \in \mathbb R^{n \times d}V∈Rn×d

嵌入矩阵可以看作是UVT(i,j)U.VT⟨Ui,Vj⟩ijAi,jU V^T(i, j)U . V^T\langle U_i, V_j\rangle i j A_{i, j}UVT(i,j)U.VT⟨Ui​,Vj​⟩ijAi,j​的点积

矩阵分解一般是用近似的方法表示,而不是使用整个矩阵表示,整个矩阵的元素个数是O(nm)个元素,而嵌入矩阵的元素个数是O((m+n)d),其中d的维数一般远小于m和n的维度。因此,嵌入矩阵能够表示数据的潜在结构,这表明观察到的结果接近于低维子空间,类似于降维。在上述例子中,由于维度太低,以至于这个优点被忽略不计。然而,在现实的推荐系统中,使用矩阵分解的效果可以比学习完整矩阵会更加高效。

选择目标函数

一个常用的目标函数是欧式距离,这里以此为例。为此,最小化所有观察到的item对的误差平方和:

min⁡U∈Rm×d,V∈Rn×d∑(i,j)∈obs(Aij−⟨Ui,Vj⟩)2\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2U∈Rm×d, V∈Rn×dmin​(i,j)∈obs∑​(Aij​−⟨Ui​,Vj​⟩)2

在上述目标函数中,只对观察到的item对(i,j)求和,即用户反馈矩阵中的非零值。然而,只对观察到值进行处理并不是一个好的想法 ,因为矩阵中的所有元素都会对模型产生影响,如果只用观察到的值进行仿真模拟,则该模型无法得出有效的推荐且泛化能力差。一句话总结:在推荐系统中,正样本数据集和负样本数据集都是有用的。

因此会有另外的求和方法,如下所示:

将为观察到的item对的值设置为0, 并对矩阵中所有的值求和,因此求和公式从之前的只对观察到的item对求和之外,还需要对未观察到的item对,求和公式如下所示:

​ min⁡U∈Rm×d,V∈Rn×d∥A−UVT∥F2\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \|A - U V^T\|_F^2U∈Rm×d, V∈Rn×dmin​∥A−UVT∥F2​

上述问题可以使用奇异值分解(Singular Value Decomposition , SVD)处理,然而SVD不是一个很好的解决方法,这是由于其在实际应用中,矩阵A可能是非常稀疏的,比如在视频或新闻APP中,热门的item可能被更多的用户浏览,导致矩阵很稀疏。稀疏矩阵会导致SVD的求解结果近似为0,导致泛化能力很差。

相反,加权矩阵分解 将目标分解为两个总和:

  • 观察到的条目的总和;
  • 未观察到的条目的总和;

min⁡U∈Rm×d,V∈Rn×d∑(i,j)∈obs(Aij−⟨Ui,Vj⟩)2+w0∑(i,j)̸∈obs(⟨Ui,Vj⟩)2\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2 + w_0 \sum_{(i, j) \not \in \text{obs}} (\langle U_i, V_j\rangle)^2U∈Rm×d, V∈Rn×dmin​(i,j)∈obs∑​(Aij​−⟨Ui​,Vj​⟩)2+w0​(i,j)̸​∈obs∑​(⟨Ui​,Vj​⟩)2

注意,在实际应用中,还需要仔细权衡观察到的item对。例如,热门item或频繁使用(例如,重度用户)可能会主导目标函数。因此,我们可以通过对训练样例进行加权重来考虑item频率来校正模型效果。换句话说,可以通过以下方式替换目标函数:

∑(i,j)∈obswi,j(Ai,j−⟨Ui,Vj⟩)2+w0∑i,j̸∈obs⟨Ui,Vj⟩2\sum_{(i, j) \in \text{obs}} w_{i, j} (A_{i, j} - \langle U_i, V_j \rangle)^2 + w_0 \sum_{i, j \not \in \text{obs}} \langle U_i, V_j \rangle^2(i,j)∈obs∑​wi,j​(Ai,j​−⟨Ui​,Vj​⟩)2+w0​i,j̸​∈obs∑​⟨Ui​,Vj​⟩2

最小化目标函数

最小化目标函数的常用算法包括:

  • 随机梯度下降(SGD) 是使损失函数最小化的通用方法。
  • 加权交替最小二乘WALS)专门针对这一特定目标。

目标函数对于U和V都是二次的,其中,随机梯度下降算法是比较常用的模型训练方法,这里不做过多的介绍,而WALS通过随机初始化嵌入,然后交替进行以下工作:

  • 固定U,对V求解
  • 固定V, 对U求解

关于WALS的详细介绍可以看该图:

SGD vs. WALS

SGD和WALS各有自身的优点有缺点:

SGD

  • 非常灵活 :可以使用其他损失函数

  • 可以并行化

  • 收敛较慢

  • 更难处理未观察到的item

WALS

  • 依赖于均方误差

  • 可以并行化

  • 收敛速度比SGD快

  • 更容易处理未观察到的item

推荐系列(四):矩阵分解|Matrix Factorization相关推荐

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

    文章目录 推荐算法之--矩阵分解(Matrix Factorization) 1. 共现矩阵 2. 矩阵分解(MF) 3. SVD实现矩阵分解(MF) 4. 梯度下降 实现 矩阵分解(MF) 4.1 ...

  2. 【推荐系统】隐语义模型(LFD)与矩阵分解(Matrix Factorization)

    如果需要完整代码可以关注下方公众号,后台回复"代码"即可获取,阿光期待着您的光临~ 文章目录 1.隐语义模型与矩阵分解 2.隐语义模型(Latent Factor Model) 3 ...

  3. 【机器学习的数学基础】(六)矩阵分解(Matrix Decomposition)(上)

    文章目录 4 矩阵分解(Matrix Decompositions)(上) 4.1 行列式与迹 4.2 特征值和特征向量 4 矩阵分解(Matrix Decompositions)(上) 在第2章和第 ...

  4. 用于文档上下文感知推荐的卷积矩阵分解

    论文:Kim D H, Park C, Oh J, et al. Convolutional Matrix Factorization for Document Context-Aware Recom ...

  5. 【机器学习的数学基础】(七)矩阵分解(Matrix Decomposition)(中)

    文章目录 4 矩阵分解(Matrix Decomposition)(中) 4.3 Cholesky分解 4.4 特征分解与对角化 4.5 奇异值分解 4.5.1 几何图解SVD 4.5.2 SVD的构 ...

  6. numpy 矩阵 秩_大规模电商推荐数据分析-基于矩阵分解的召回

    前面两篇文章回顾了我们团队做天池数据比赛<CIKM 2019 EComm AI:用户行为预测>的复赛方案,现在让我们的目光回到初赛.初赛数据组织和复赛一样,只是数据量差异较大.(初赛才2G ...

  7. MF+Matrix Factorization+矩阵分解

    MF+Matrix Factorization+矩阵分解 Matrix Factorization Matrix Decompostion LU分解,QR分解,SVD分解,,,, 非负矩阵分解 概念: ...

  8. 推荐系统——3、原理篇 | 推荐系统之矩阵分解模型

    上一篇我们用一个简单的例子讲述了矩阵分解(Matrix Factorization, MF)是如何做推荐的,但没有深入到算法的细节.如果想编写自己的代码实现MF,那么就需要了解其中的细节了.本文是MF ...

  9. 推荐系统入门(三):矩阵分解MF因子分解机FM(附代码)

    推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 目录 推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 一. 矩阵分解MF 1. 隐含语义分析技术 1.1 隐语义 ...

  10. 原理篇 | 推荐系统之矩阵分解模型

    导语:本系列文章一共有三篇,分别是 <科普篇 | 推荐系统之矩阵分解模型> <原理篇 | 推荐系统之矩阵分解模型> <实践篇 | 推荐系统之矩阵分解模型> 第一篇用 ...

最新文章

  1. 关于outlook 2003 PST文件大小一点说明
  2. mysql怎么维护_Navicat for MySQL 如何管理和维护表
  3. 016 Android之NDK开发
  4. 信息系统项目管理师:第1章:信息化与信息系统-重点汇总
  5. 《XNA高级编程:Xbox 360和Windows》3-6
  6. python之堡垒机(第九天)
  7. php现实的九九乘法,php趣味编程 - php 输出九九乘法
  8. c 运算符重载前置++_C ++运算符重载–综合指南
  9. SCREEN MODULE 逻辑控制
  10. Java静态代理、动态代理以及CGLIB动态代理
  11. 数据库连接池Spring JDBC(JdbcTemplate)
  12. 解决局域网访问共享工具
  13. WPS office根目录在哪?_WPS加载项深入开发代码解析-2
  14. ​【预测模型】基于粒子群算法优化最小二乘支持向量机实现数据分类matlab代码
  15. 关于Video.js 出现的问题 this.el_.vjs_getProperty
  16. Python 运算符(Operators)
  17. TortoiseSVN 下载安装使用
  18. 高性能网络编程-反应堆模型(reactor)
  19. Matlab2017a中帮助文档无法设置为中文的一种解决办法
  20. 台式计算机是移动设备吗,超台式电脑!手机成中国第一大上网终端

热门文章

  1. python中plot是什么意思_讲述python中ubplot的详细用法
  2. MySQL基本数据类型
  3. 剑指21.调整数组顺序使奇数位于偶数前面 python leetcode
  4. 全国大学生物联网设计竞赛作品 | 智慧养鸡小助手
  5. 【5G会话管理】UE IP地址的管理
  6. 【LTE基础】SRVCC(Single Radio Voice Call Continuity 双模单待无线语音呼叫连续性)技术研究背景
  7. 数字逻辑:时序逻辑元件——锁存器
  8. hiberfil.sys彻底删除,释放C盘空间。
  9. 点击改变文本框选择内容,Jquery datatables 重新加载数据
  10. 终面(hr)可能的问题及回答(Java岗--自用)