0

我有一个逐个文档矩阵的示例单词(来自 Landauer 和 Dumais,1997 年):

wxd <- matrix(c(1,1,1,0,0,0,0,0,0,0,0,0,
            0,0,1,1,1,1,1,0,1,0,0,0,
            0,1,0,1,1,0,0,1,0,0,0,0,
            1,0,0,0,2,0,0,1,0,0,0,0,
            0,0,0,1,0,1,1,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,1,0,0,
            0,0,0,0,0,0,0,0,0,1,1,0,
            0,0,0,0,0,0,0,0,0,1,1,1,
            0,0,0,0,0,0,0,0,1,0,1,1)
          ,12, 9)
rownames(wxd) <- c("human", "interface", "computer", "user", "system", 
               "response", "time", "EPS", "survey", "trees", "graph", "minors")
colnames(wxd) <- c(paste0("c", 1:5), paste0("m", 1:4))

我可以使用该函数对该矩阵执行奇异值分解,svd()并具有三个矩阵USV

SVD <- svd(wxd)
U <- SVD$u
S <- diag(SVD$d)
V <- SVD$v

我可以将这些矩阵相乘并返回我的原始矩阵(在一些小的余量或误差内):

U %*% S %*% t(V)

我还可以取和 矩阵的前两列UV矩阵的前两列和行,S以获得原始数据的最小二乘最佳近似值。这与我上面提到的论文中相同过程的结果相符:

U[ , 1:2] %*% S[1:2, 1:2] %*% t(V[ , 1:2])

我想确保我了解这个函数在做什么(尽我所能),并且我已经能够生成VS矩阵以匹配来自svd()函数的矩阵:

ATA <- t(wxd) %*% wxd
V2 <- eigen(ATA)$vectors

S2 <- sqrt(diag(eigen(ATA)$values))

但是,U我生成的矩阵对于前 9 列具有相同的绝对值,然后再添加 3 列。该矩阵的某些元素与函数中的U矩阵具有不同的符号:Usvd()

AAT <- wxd %*% t(wxd)
U2 <- eigen(AAT)$vectors

所以我的问题是,为什么U矩阵与我尝试从头开始计算时不同?

4

1 回答 1

2

wxd等级为9. 因此,您AAT只有9非零特征值(其余的非常小~1e-16)。对于那些零特征值,特征向量是任意的,只要它们跨越与 R^12 中其他特征向量跨越的子空间正交的子空间。

现在,默认情况下svd只计算nu=min(n,p)左奇异向量(与右特征向量类似),其中n是行p数,是输入中的列数(参见 参考资料?svd)。因此,您只会得到9左奇异向量。要生成 all 12,请调用svd

svd(wxd,nu=nrow(wxd))

然而,那些额外的3左奇异向量将不对应于eigen(AAT)$vectors再次找到的那些,因为这些特征向量被任意确定以跨越该正交子空间。

至于为什么某些符号发生了变化,回想一下,特征向量只能根据比例因子确定。尽管这些特征向量是归一化的,但它们可能相差-1. 要检查只需将一个 fromU与相应的一个 from分开U2。你应该得到所有1s 或-1s 的列:

U[,1:9]/U2[,1:9]
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,]    1   -1    1   -1    1   -1    1    1    1
## [2,]    1   -1    1   -1    1   -1    1    1    1
## [3,]    1   -1    1   -1    1   -1    1    1    1
## [4,]    1   -1    1   -1    1   -1    1    1    1
## [5,]    1   -1    1   -1    1   -1    1    1    1
## [6,]    1   -1    1   -1    1   -1    1    1    1
## [7,]    1   -1    1   -1    1   -1    1    1    1
## [8,]    1   -1    1   -1    1   -1    1    1    1
## [9,]    1   -1    1   -1    1   -1    1    1    1
##[10,]    1   -1    1   -1    1   -1    1    1    1
##[11,]    1   -1    1   -1    1   -1    1    1    1
##[12,]    1   -1    1   -1    1   -1    1    1    1

更新以解释为什么特征向量仅由比例因子确定

这可以从特征向量的定义中看出。来自维基百科

在线性代数中,线性变换的特征向量或特征向量是一个非零向量,当该线性变换应用于它时,它不会改变其方向。

在有限维向量空间中,线性变换是将向量与方阵相乘A,因此定义是(这是我希望 SO 支持 LaTeX 降价的地方,因为这不是代码中的方程;即*矩阵- 在这里相乘):

A * v = lambda * v

这被称为矩阵的特征值方程A,其中lambda是与特征向量 相关联的特征值v。从这个等式可以清楚地看出,如果v是 的特征向量,A那么任何k * v标量k的特征向量也是A具有相关特征值的特征向量lambda

于 2016-09-09T18:26:40.727 回答