专栏首页AI科技大本营的专栏一文帮你梳理清楚:奇异值分解和矩阵分解 | 技术头条

一文帮你梳理清楚:奇异值分解和矩阵分解 | 技术头条

作者 | K. Delphino

译者 | Linstancy

编辑 | Rachel

出品 | AI科技大本营(id:rgznai100)

【导读】在推荐系统的相关研究中,我们常常用到两个相关概念:矩阵分解和奇异值分解。这两个概念是同一种算法吗?两者到底有什么差别?在本文中,作者梳理了两种算法的概念、来源和内容,并进行了比较。通过对相关内容的梳理,作者提出,矩阵分解是推荐系统中最初使用的概念,奇异值分解是对该方法的进一步发展。在现在的讨论中,一般将两种方法统一成为奇异值分解。

在 Andrew Ng 教授的机器学习课程中,介绍推荐系统时经常涉及矩阵分解、奇异值分解等数学知识,这些概念并不是很好理解。在 Andrew Ng 教授的课程提到了一种称为称为 (低因子) 矩阵分解的方法,而在 Google 搜索会得到另一个名称:奇异值分解。网络资源中对于该算法的解释和 Andrew Ng 教授存在差异,但很多人都认为这两个名称指的是同一种算法。为了更好的梳理这两个概念,在本文中,我对两者进行了分别介绍,并对比了它们的不同。

推荐系统

推荐系统 (Recommender Systems, RS) 是一种自动化的针对用户的内容推荐方式,被广泛用于电子商务公司,流媒体服务 (streaming services) 和新闻网站等系统。根据用户的喜好,推荐系统能够投其所好,为用户推荐一些合适的内容,以便减少用户筛选过程中一些不必要的麻烦。

推荐系统并不是一种全新的技术,相关概念最晚在1990年就出现了。事实上,当前的机器学习热潮,一部分要归因于人们对 RS 的广泛关注。 在2006年,Netflix 赞助了一场为电影寻找最佳推荐系统的竞赛,在当时引起了一片轰动,也让推荐系统再次得到了广泛的关注。

矩阵表示

我们可以有很多种方式来向别人推荐一部电影。其中一种效果较好的策略,是将用户对电影的评分看做一个用户 x 电影矩阵,如下所示:

在该矩阵中,问号代表用户未评分的电影。随后,只需要以某种方式预测来用户对电影评分,并向用户推荐他们可能喜欢的电影。

矩阵分解

在 Netflix 举办的比赛上,参赛者 Simon Funk 提出了一个很好的想法,即用户对电影的评分不是随给出的。用户会基于一定的逻辑,针对电影中他所所喜欢的部分 (如特定的女演员或类型) 和不喜欢的情节 (长时间或糟糕的笑话) 赋予不同的权重,并进行加权计算,最后得到一个分数作为该电影的评分。这个过程可以用如下公式表示:

其中 xm 是电影 m 特征值的一个列向量,而 θᵤ 是另一个列向量,表示用户 u 赋予每个电影特征的权重。每个用户都有不同的权重集合,而每个电影的特征也对应不同的特征集合。

事实证明,如果能够任意地修改特征的数量并忽略所缺失的那部分电影评分,那么就可以找到一组权重和特征值,依据这些值所创建新矩阵与原始的评分矩阵是很接近的。这一过程可以通过梯度下降来实现,且类似于线性回归中所使用的梯度下降,只不过我们需要同时优化权重和特征这两组参数。以上文提供的用户-电影矩阵为例,优化后得到的结果将生成如下新的矩阵:

值得注意的是,在大多数真实数据集中,生成的结果矩阵并不会精确地与原始矩阵保持一致。因为在现实生活中,用户不会对通过矩阵乘法和求和等操作对电影进行评分。大多数情况下,用户对电影进行评分只是一种主观性的行为,且可能受到各种外部因素的影响。尽管如此,这里所介绍的方法还是希望通过数学公式来表达用户在电影评分时的主要逻辑。

通过上面的计算,现在我们已经得到了一个近似矩阵,那该如何来预测缺失的电影评级呢?通过回顾上面的计算过程,我们可以发现,为了构建这个新矩阵,这里定义了一个公式来填充矩阵中的所有值,包括原始矩阵中的缺失值。因此,如果想要预测缺失的用户电影评分,这里只需获取该缺失电影的所有特征值,再乘以该用户的所有权重并将所有内容相加,就能得到用户对该电影的评分。因此在这里,如果想要预测用户2对电影1的评级,可以通过以下计算:

为了简化表达式,在这里可以对 θ 和 x 进行分离,并将它们放入各自的矩阵(比如 P 和 Q)。

以上就是 Funk 所提出的矩阵分解方法,也是 Andrew Ng 教授在课上所提到的矩阵分解。该方法在当时 Netflix 竞赛中获得第三名,引起了广泛的关注,并在当前许多应用中仍被使用。

奇异值分解

下面介绍奇异值分解 (Singular Value Decomposition, SVD)。SVD 方法是将一个矩阵分解为三个矩阵的矩阵分解方法,即 A =UΣVᵀ,且三个分解矩阵会具有一些较好的数学特性。

SVD 方法具有广泛的应用,其中之一就是主成分分析(Principal Component Analysis, PCA) ,该方法能够将维度 n 的数据集减少到 k 个维度 (k <n)。

这里不再展开介绍 SVD 方法的详细信息。我们只需要记住,奇异值分解与矩阵分解的处理方式不同。使用SVD 方法会得到三个分解矩阵,而 Funk 提出的矩阵分解方式只创建了两个矩阵。

那为什么在每次搜索推荐系统时总会弹出 SVD 的相关内容呢? Luis Argerich 认为原因在于:

事实上,矩阵分解是推荐系统中首先使用的方法,而 SVD++ 可视为是对它的一种扩展形式。正如 Xavier Amatriain 所说的那样:

而 Wikipedia 在对矩阵分解(推荐系统)的相关条目中也有类似的表述:

最后,简单进行一下总结:

  • 奇异值分解(SVD)是一种相对复杂的数学技术,它将矩阵分解为三个新的矩阵,并广泛应用于当前许多的应用中,包括主成分分析(PCA)和推荐系统(RS)。
  • Simon Funk 在2006年的 Netflix 竞赛中提出并使用了一个非常好的策略,改方法将矩阵分解为两个权重矩阵,并使用梯度下降来找到特征和权重所对应的的最优值。实质上,这是不同于 SVD 方法的另一种技术,将其称为矩阵分解更为合适。
  • 随着这两种方法的广泛应用,研究者并没有严谨地在术语上区分这两种方法,而是统一将其称为 SVD。

原文链接: https://medium.freecodecamp.org/singular-value-decomposition-vs-matrix-factoring-in-recommender-systems-b1e99bc73599

本文分享自微信公众号 - AI科技大本营(rgznai100),作者:爱技术的

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 简单明了,一文入门视觉SLAM

    【导读】SLAM是“Simultaneous Localization And Mapping”的缩写,可译为同步定位与建图。最早,SLAM 主要用在机器人领域...

    AI科技大本营
  • AI一分钟 | 谷歌租下北京 6000 平米写字楼,或将发展AI项目;工信部就个人信息保护约谈百度、支付宝、今日头条

    一分钟AI 今日头条召开算法分享大会,称算法分发并非是把所有决策都交给机器 谷歌计划推出利用AI技术+人工审查的方法来共同消除视频中的不恰当内容 谷歌的智能音...

    AI科技大本营
  • AI 技术讲座精选:数学不好,也可以学习人工智能(六)——巧用数学符号

    【AI100 导读】欢迎阅读《数学不好,也可以学好人工智能》系列的第六篇文章。如果你错过了之前的五部分,一定记得把它们找出来看一下!这篇文章作者会帮你学习数学符...

    AI科技大本营
  • Cholesky分解

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    于小勇
  • Moore-Penrose伪逆

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    于小勇
  • SVD分解及其应用

    SVD起源 对角化概述 SVD SVD应用 图像压缩2 数据去噪 LSA 推荐系统 注意 参考资料 ? SVD可谓线性代数的登峰造极者。 其本质就是找到将任...

    用户1147754
  • 矩阵转置与矩阵相乘

    写这篇博客的原因是为了记录一下矩阵转置与矩阵相乘的实现代码,供日后不时之需。直接原因是今晚(2016.09.13)参加了百度2017校招的笔试(C++岗),里面...

    Dabelv
  • 布尔值数组的状态压缩

    二维矩阵可以不产生一个图结构,直接在二维矩阵上计算。相应地,会设定一个布尔值数组visited[ i ] [ j ],表示某一个位置是否被遍历,true表示被遍...

    我脱下短袖
  • C++ OpenCV基于距离变换与分水岭的图像分割

    图像分割,英文名image segmentation,就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键...

    Vaccae
  • 矩阵求导术(下)

    本文承接上篇 https://zhuanlan.zhihu.com/p/24709748,来讲矩阵对矩阵的求导术。使用小写字母x表示标量,粗体小写字母 表示列向...

    Datawhale

扫码关注云+社区

领取腾讯云代金券