1 非稀疏矩阵的矩阵分解

假设我们有各个条目均有值的观测矩阵R,我们希望用低维矩阵U,V的乘积来近似它。目标方程如下:

2 稀疏矩阵的矩阵分解

我们用S记录所有有值的(i,j)点对

预测矩阵的每一个条目如下计算:

那么此时观测矩阵和预测矩阵每一个条目的差距为

此时,目标方程为(只考虑观测矩阵有数值的那些条目):

2.1 梯度下降解法

我们可以使用梯度下降来计算J的偏微分

我们把这些偏微分拼成一个向量,这个向量的维度是 mk+nk维,记这些偏微分组成的向量为

与此同时,我们记这些偏微分对应的U和V的条目组成的 mk+nk维向量维

于是我们有如下的更新方程:

梯度下降方式如下:

我们也可以直接用矩阵运算的方式来实现梯度下降

首先构造偏差矩阵(其中R中 没有数值的那些条目对应的E 为0)

然后我们可以用如下方式更新U,V矩阵

2.1.2 SGD

从上面我们不难发现,更新是评级矩阵中观察条目的误差的线性函数。

更新可以通过其他方式执行,将其分解为与单个观察到的条目(而不是所有条目)中的错误相关联的更小的组件。

换言之,每一次更新我不是要看到所有S中的(i,j),然后再更新;我看到一个(i,j),就利用它所蕴涵的信息进行更新

我们可以在R中一次随机观察到一个条目,并只更新因子矩阵中相关的2·k项,而不是全部(m·k + n·k)项

表示u的第i行,那么我们有:

在实际应用中,SGD的收敛速度比2.1中的方法快,但2.1中的方法 收敛趋势更平稳。

这是因为在后一种情况下,U和V的条目是同时更新的,使用的是所有观察到的条目,而不是单个随机选择的观察到的条目。

这种随机梯度下降的噪声近似有时会影响解的质量和收敛的平滑性。一般情况下,当数据量非常大且计算时间是主要瓶颈时,采用随机梯度下降法SGD更好。

在其他“折衷”方法中,使用了小批量(mini-batch——,其中使用观察到的条目的子集来构造更新。它在解决方案质量和计算效率之间提供了权衡。

3 初始化

另一个问题是如何初始化。例如,可以将矩阵的每一项初始化为(−1,1)中的小数字。

然而,初始化的选择会影响最终解决方案的质量。

可以使用一些启发式方法来提高质量。例如,可以使用一些简单的基于svd的启发式方法来创建一个近似的初始化。 (这个会在基于SVD的推荐系统中介绍)

4 正则化

当评级矩阵R是稀疏的且观测到的条目相对较少时,另一种问题出现了。

在这种情况下,打分数据会很少,这会导致过拟合。(当训练数据有限时,过拟合也是分类中常见的问题。)

解决这个问题的一种常见方法是使用正则化。正则化减少了模型过度拟合的趋势,代价是在模型中引入了一定的偏差。

正则化的思想是不让U和V中的系数值太大,以促进模型稳定性。

于是在之前目标函数的基础上,新增了这一个正则项

这是一种标准的方法,在许多形式的分类和回归中都使用了它。参数λ一般是非负的,它控制正则化项的权值

还是和之前一样,于是正则化的目标函数可以写成

同样可以采用梯度下降进行优化

用矩阵形式可以写成(E也是有观测数值的地方有值,没有观测数值的地方为0)

可以发现这时候U和V的系数 1-αλ 在每一步缩小了 U和V的参数,这就是正则化的作用

同样地,也可以采用 SGD进行优化:

用向量形式表示,则有:

5 增量潜在成分训练 Incremental Latent Component Training

一种变体是增量地训练潜在成分

我们首先用SGD训练所有q=1时候的,(也就是U的第一列和V的第一列),不断迭代直至收敛

 收敛完成后 ,我们计算这两个向量相乘得到的矩阵

然后我们更新观测矩阵R’=R-,之后对q=2做同样的操作

如此往复,直到q=k

然后我们将这k个求出来的矩阵相加,就是我们用增量潜在成分训练得到的预测矩阵

得到的方法提供了所需的矩阵分解,因为总的秩k分解可以表示为k个秩1分解的和:

由于一次优化的变量较少,这种方法可以使收敛速度更快、更稳定

6 交替最小二乘

SGD是一种有效的优化方法。另一方面,它对初始化和选择步长的方式都相当敏感。其他优化方法包括使用交替最小二乘(ALS),它通常更稳定

ALS的思路如下:

(1)固定U,我们通过将这个问题作为一个最小二乘回归问题来求解V的每n行。

比如我们想求解V的第j行,那我们就希望去最小化这是一个的一个最小二乘问题,其中所有的我们目前视为定值常量

于是V中的条目都可以使用最小二乘法来进行求解

由于不同条目之间的最小二乘问题是互相独立的,因此可以并行计算

(2)同样的方法,固定V,求解U

迭代(1)(2)两步,直至收敛

7 使用用户和条目偏差

一种无约束MF的变体能够了解用户和商品偏好。

为了讨论的目的,假设评级矩阵是以均值0为中心的,预处理步骤是从所有条目中减去整个评级矩阵的整体平均μ。利用潜因子模型预测条目后,将μ值加回预测值作为后处理步骤。

因此,在本小节中,我们将简单地假设评级矩阵R已经以这种方式居中,忽略预处理和后处理步骤。

与每个用户i相关联,我们有一个变量oi,它表示用户对商品评级的一般偏差。例如,如果用户i是一个慷慨的人,他倾向于给所有的物品打分,那么变量oi将是一个正的量。另一方面,对于一个坏脾气的人来说,oi的值是负的,因为他对大多数项目的评价都是负面的。

同样,变量pj表示项目j评级的偏差。高度喜欢的项目(如票房大片)的pj值往往更大(正),而几乎所有人都不喜欢的项目的pj值则为负值。

这里所说的模型的工作是以数据驱动的方式来学习oi和pj的值

和原始MF的主要不同是,预测矩阵的第(i, j)个条目的一部分由oi + pj组成,另一部分由潜在因素矩阵乘积的第(i, j)个条目组成。因此,条目(i, j)的评分预测值由下式给出:

于是误差项可以写成

于是整体的目标函数可以改写成

结果表明,这个问题与无约束矩阵分解的区别只是很小的程度。

我们可以增加因子矩阵的大小来合并这些偏差变量,而不是对用户和商品使用单独的偏差变量oi和pj。

我们需要为每个因子矩阵U和V增加两列,以创建大小分别为m × (k + 2)和n × (k + 2)的更大的因子矩阵。

每个因子矩阵的后两列是特殊的,因为它们对应于偏置分量。具体地说,我们有

这样的话,我们进行的时候就会得到

于是我们修改后的目标方程可以写成:

由于问题表述方式的微小变化,只需对梯度下降法进行相应的微小改变。(只是V的第k+1列,U的第k+2列必须永远为1,不进行更新)

7.1 有效的原因

一个自然的问题是,为什么这种方法比无约束矩阵分解执行得更好。

在因子矩阵的最后两列上添加约束只会降低全局解的质量,因为现在是在更小的解空间上寻找最优解。

然而,在许多情况下,添加这些约束会使解决方案产生偏差,同时减少过拟合

换句话说,这种直观约束的添加通常可以提高学习算法对不可见条目的通用性,即使某些观测条目的误差可能更高。

当用户或项目观察到的评级数量很少时,这特别有用。偏见变量为评级添加了一个组件,它对用户或项目都是全局的。当可用的数据有限时,这种全局属性非常有用。

作为一个具体的例子,考虑这样一种情况:用户仅为少量的项目(1或2)提供评级。在这种情况下,许多推荐算法,如基于邻居的方法,都不能为用户提供可靠的预测。另一方面,项目偏差变量的(非个性化)预测将能够给出合理的预测。毕竟,如果一部特定的电影在全球范围内是票房大片,那么相关用户也更有可能欣赏它。偏差变量也将反映这一事实,并将其纳入学习算法。

7.2 只使用用户和项目偏差

事实上,已经证明只使用偏差变量(即k = 0)通常可以提供相当好的评级预测

这意味着很大一部分评级可以用用户打分的慷慨程度和物品的受欢迎程度来解释,而不是用户对物品的任何特定的个性化偏好。

因此,只有用户和物品的偏差被学习,并且通过将用户i和物品j的偏差相加,可以预测出(i,j)条目的baseline评级

可以使用这样的baseline评级来辅助任何现成的协同过滤模型。在应用协作过滤之前,可以简单地从评级矩阵的第(i, j)个有数值条目中减去相应的Bij。这些值在后处理阶段被添加回预测值。减去之后的评级矩阵就只是用户对于特定商品的个性化评价了。

推荐系统笔记:无任何限制的矩阵分解相关推荐

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

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

  2. 推荐系统算法_CUCS | 推荐系统算法简介Matrix Factorization(矩阵分解)

    你是否还沉浸于春节收到各路微信红包的喜悦却发现midterm季悄然来临 每当你考完这一周的midterm准备松一口气时却发现下一周又有新的midterm在等着你 与其复习到头秃,不如打开Amazon或 ...

  3. 推荐系统经典算法之——MF(矩阵分解)

    1.来源 矩阵分解算法(MF)是为了解决协同过滤算法(CF)在以下两点上的不足而提出的. CF处理稀疏矩阵的能力弱. CF中相似度矩阵的维护难度大. e.g. user矩阵为mm,item矩阵为nn, ...

  4. 推荐系统笔记:矩阵分解+基于邻居的模型

    由于其启发式性质,基于邻域的方法通常被认为与其他优化模型具有内在的不同. 尽管如此,结果表明基于邻域的方法也可以嵌入在其他优化模型的上下文中. 这是一个相当方便的框架,因为它为邻域模型与其他优化模型( ...

  5. 推荐系统笔记:基于矩阵分解(总结篇)

    推荐系统笔记:基于潜在因子模型的协同过滤(latent factor model)_UQI-LIUWJ的博客-CSDN博客 推荐系统笔记:无任何限制的矩阵分解_UQI-LIUWJ的博客-CSDN博客 ...

  6. 推荐系统笔记:基于非负矩阵分解的协同过滤

    1 非负矩阵分解 非负矩阵分解 (NMF) 可用于非负的评级矩阵. 这种方法的主要优势不一定是准确性,而是它在理解用户-项目交互方面提供的高度可解释性. 与其他形式的矩阵分解的主要区别在于因子 U 和 ...

  7. 矩阵分解(Matrix-Factorization)无门槛

    本章内容 本章主要介绍矩阵分解常用的三种方法,分别为: 1◯\textcircled{1}1◯特征值分解 2◯\textcircled{2}2◯奇异值分解 3◯\textcircled{3}3◯Fun ...

  8. 推荐系统笔记:基于SVD的协同过滤

    1 奇异值分解 奇异值分解(SVD)是矩阵分解的一种形式,其中U和V的列被约束为相互正交 相互正交的优点是概念之间可以完全独立,并且可以用散点几何解释它们. 然而,这种分解的语义解释通常比较困难,因为 ...

  9. 从原理到落地,七大维度详解矩阵分解推荐算法

    作者 | gongyouliu 编辑丨Zandy 来源 |  大数据与人工智能 ( ID: ai-big-data) 导语:作者在<协同过滤推荐算法>这篇文章中介绍了 user-based ...

最新文章

  1. 学完css3的总结,css3中常见的单位及总结
  2. 巨蟒python全栈开发-第11阶段 ansible_project2
  3. 数据可视化|实验八 实现scatterplot关系图
  4. 【Julia】Julia v1.5.1 更改Pkg存放位置
  5. linux led测试程序,Linux中加入led驱动及测试程序详解
  6. FatMouse’ Trade
  7. python基础(12):Standard Library标准库(包含正则)
  8. 解决 psftp local: unable to open 的问题
  9. matlab输出动态gif图片
  10. GB 4208-93 外壳防护等级(IP代码)
  11. matlab 工具箱 comsol 联,基于MATLAB与COMSOL联合仿真的电磁优化设计
  12. python爬虫爬取微信_Python爬虫爬取微信公众号历史文章全部链接
  13. Lizcst Software Lab 正式入驻新华军软件商城——华商团!
  14. 计算机考研要考java吗_计算机二级考JAVA还是C?
  15. 视频教程-PPT吸金大法 20+万年薪工作总结不用愁-Office/WPS
  16. 最新微信知识付费小程序源码吾爱纯净版+带教程
  17. 平衡企业管理与协作Worktile让工作更简单
  18. 编写HTTP代理中,上一些我的工具方法。
  19. 如何快速找出电脑对应cisco交换机接口的方法
  20. android获取一天的毫秒时间,Android关于获取时间的记录(小结)

热门文章

  1. zsh 自动补全导致命令显示重复
  2. IOS使用通知回调方法
  3. 《算法竞赛进阶指南》打卡-基本算法-AcWing 90. 64位整数乘法:位运算
  4. Leetcode62 DP
  5. Android11还能自定义相机吗,安卓用户又少了一项自由,Android 11不再支持更改默认相机程序...
  6. java.text.dateformat_使用java.text.SimpleDateFormat类进行文本日期和Date日期的转换
  7. html中的input是一个块级元素,input属于什么元素,input是行内块元素吗
  8. android没有捂脸表情,Emoji神器 | 如果你也喜欢[捂脸]表情
  9. 一个页面区分管理者和普通用户如何设计_电商系统:优惠券原型设计说明(二)...
  10. mysql中存储过程另存为_转: MySQL中的存储过程