首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带R的奇异值分解(SVD)

带R的奇异值分解(SVD)
EN

Stack Overflow用户
提问于 2015-11-24 16:08:25
回答 3查看 542关注 0票数 1

SVD与R很好地配合:

代码语言:javascript
复制
A = matrix(1:12,3,4)
A
u = svd(A)$u
v = svd(A)$v
sigma = diag(svd(A)$d)
u %*% sigma %*% t(v)   # = A as desired

但与SVD定理的常用表述不同,v而不是 4x4矩阵(应该是!):

代码语言:javascript
复制
dim(v)   # (4,3)

为什么会这样?

根据这个定理,

  • v应该是格式(4,4),
  • sigma应该是格式(3,4)。 顺便问一下,为了格式(3,4),创建一个diag(svd(A)$d)零填充的最短方式是什么?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-24 16:37:12

要获得完整的UV矩阵,可以使用nu=nv=参数来svd()。若要使用零填充对角线矩阵,请使用nrow=ncol=参数对diag()

代码语言:javascript
复制
A <- matrix(1:12,3,4)
D <- svd(A, nu=nrow(A), nv=ncol(A))
u <- D$u
v <- D$v
sigma <- diag(D$d, nrow=nrow(A), ncol=ncol(A))

## Check that that worked:
dim(u)
# [1] 3 3
dim(v)
# [1] 4 4
dim(sigma)
# [1] 3 4
u %*% sigma %*% t(v)
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12
票数 3
EN

Stack Overflow用户

发布于 2015-11-24 16:32:18

这只是一个不同的惯例,不同的系统/教科书将定义SVD的一种或另一种方式。重要的是幺正性U*U'=I。在这两种惯例中,奇异向量都会使投影中最小二乘距离最小化。

下面是一个理论的发展,它具有与LINPACK和R:https://www.cs.princeton.edu/courses/archive/spring12/cos598C/svdchapter.pdf相同的维度约定

票数 3
EN

Stack Overflow用户

发布于 2015-11-24 16:40:23

第二部分:

代码语言:javascript
复制
diag(c(svd(A)$d,0),nrow=3,ncol=4)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33898482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档