【问题标题】:Questions about SVD, Singular Value Decomposition关于SVD,奇异值分解的问题
【发布时间】:2021-03-23 17:47:08
【问题描述】:

我不是数学家,所以我需要了解 SVD 的作用和原因,而不是从数学的角度来看它是如何工作的。 (不过我至少了解什么是分解)。

YouTube 上的This guy 给出了对 SVD 的唯一人类解释,即 U 矩阵映射“用户到概念的相关性”Sigma 矩阵定义了每个概念的强度,而 V 映射了“电影到概念的相关性”给定初始矩阵M 在行中有用户,在列中有电影(评分)。

他还提到了两个概念,特别是“科幻”和“浪漫”电影。见下图。

我的问题是:

  1. SVD 如何知道概念的数量。他作为人类提到了两个 - 科幻和浪漫,但实际上产生的矩阵是 3 个概念。 (例如矩阵 U - 带有蓝色标题的矩阵 - 有 3 列而不是 2)。

  2. SVD 到底是如何知道这个概念的。我的意思是,如果我随机打乱列,那么 SVD 如何知道什么是科幻,什么是浪漫。我的意思是,我想没有规则,按列顺序将概念组合在一起。如果科幻电影是第一部也是最后一部呢?而不是初始矩阵 M 中的前 3 列?

  3. U、Sigma 或 V 矩阵的实际用途是什么? (除了可以将它们相乘得到初始矩阵M)

  4. 除了上面提供的人之外,还有任何其他可能的人类解释 SVD,或者它是唯一可能的功能?相关矩阵。

【问题讨论】:

  • 这些都是很好的问题,我可以告诉你已经投入了一些实质性的思考。但是,这不是本论坛的主题;请尝试 stats.stackexchange.com 或 ds.stackexchange.com。简短的回答是,SVD 实际上只是关于线性代数,而这种用心理概念识别一些向量的业务充其量只是一种幻想。就是说,有点用处。我的建议是尝试在任何特定应用程序之外研究 SVD,然后转到应用程序。希望这会有所帮助。
  • @RobertDodier 顺便说一句,确实有一些神奇之处,因为如果我试图洗牌(至少看起来)用户与概念的相关性保持不变,并且概念的强度也保持不变......所以在某些方面,它确实识别了它看起来的概念,即使您根据需要对列进行洗牌..那真是太神奇了。唯一的问题可能是,如果您不知道列中的概念是什么。但从 ML 的角度来看,这并不重要。

标签: math matrix vector


【解决方案1】:

正如 cmets 中所指出的,您可能会在其他地方得到更好的解释。但是,由于问题仍然悬而未决,这是我的 tuppence 价值。

我一直假设 A 是 mxn,其中 m>=n,即 A 的行数多于列数。

首先,SVD 有多种形式,矩阵大小不同。它们都具有以下基本属性:

A = U*S*V'
S is diagonal 
U and V have orthogonal columns (ie U'*U = I, V'*V = I)

从理论的角度来看,也许最有用的是“全脂”svd,其中 U 是 mxm,S 是 mxn,V 是 nxn。然而,这有很多元素对 A 没有真正的贡献。例如 S 是对角线,我们可以写

S = ( S1 )  (where S1 is nxn )
    ( 0  ) 

如果我们把U分成

U = ( U1 U2) (where U1 is mxn and U2 is (mx(m-n)))

那么计算就很简单了

U*S = U1*S1

因此我们可以丢弃 U 的最后 m-n 列和 S 的最后 m-n 行,仍然可以恢复 A。

此外,S1的一些对角元素可能为0;假设事实上它们中的 p

S1 = ( S2 0)
     ( 0  0)

如上为 U 和类似地为 V' 争论,我们实际上可以丢弃除 U 的前 p 列和除 S2 之外的所有 S,以及除 V 的前 p 行之外的所有,仍然恢复 A。

后者是您问题中 SVD('thin')的形式:

U is mxp
S is pxp
V' is pxm

其中 p 是 A 的非零奇异值的数量。这是我对你的 1 的回答。

按照惯例,当您沿对角线向下移动时,S 的元素会减少。为了实现这一点,计算 svd 的例程实际上适用于带有洗牌列的 A 版本。通过将 shuffle 合并到 U 和 V' 输出中,可以取消这种 shuffle。这是我对你的 2 的回答:无论你如何洗牌 A,它实际上都会再次洗牌以确保奇异值沿对角线减少。

我很难回答 3,因为我怀疑我们对“实用”的看法大不相同。

我认为实用的一件事是找到 A 的更简单近似。A 的重构可以写成

A = Sum{ 1<=i<=p | U[i]*S[i]*V[i]' }

其中 S[i] 是 S 的对角线元素,U[i] 是 U 的列,V[i] 是 V 的列

我们可能希望对 A 使用更简单的模型,例如希望将其简化为仅一项。也就是说,我们可能想知道使用更少的“概念”会损失多少。上面的 'thin' svd 已经做到了这一点,因为它丢弃了所有对 A 没有贡献的列。在极端情况下,我们可能想知道如果我们简化为一个概念会得到什么。这个近似值是通过只取上述总和的第一项来找到的。这扩展到了我们想要允许的许多项——q 说——我们只取上面总和的前 q 个项。

对不起,我无法回答 4。

【讨论】:

  • 谢谢你的回答我会检查的。
猜你喜欢
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2015-04-16
  • 2010-10-06
  • 2016-01-10
  • 2014-03-10
  • 1970-01-01
相关资源
最近更新 更多