0

文書マトリックスごとの単語の例があります (Landauer and 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()関数を使用してこの行列に対して特異値分解を実行でき、 3 つの行列US、およびがありVます。

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

これらの行列を乗算して、元の行列を返すことができます (わずかなマージンまたはエラーの範囲内で)。

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

また、行列の最初の 2 列とUV行列の最初の 2 列と行Sを取得して、元のデータの最小二乗最適近似を取得することもできます。これは、上記の論文の同じ手順の結果と一致します。

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

この関数が何をしているのかを (できる限り) 理解していることを確認したいと考えており、関数からのものと一致するVと行列を生成することができました。Ssvd()

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しかありません (残りは非常に小さいです)。これらのゼロ固有値の場合、固有ベクトルは、R^12 内の他の固有ベクトルが張る部分空間と直交する部分空間を張る限り、任意です。9~1e-16

現在、デフォルトでは左特異ベクトルsvdのみを計算しますnu=min(n,p)(右固有ベクトルの場合も同様)。ここで、 は入力nの行数で、pは列数です ( を参照?svd)。したがって、9左特異ベクトルのみが得られます。all を生成するには、次12のように呼び出しますsvd

svd(wxd,nu=nrow(wxd))

ただし、これらの固有ベクトルは、その直交部分空間にまたがるように任意に決定されるため、これらの余分な3左特異ベクトルは、再び で見つかったベクトルには対応しません。eigen(AAT)$vectors

一部の符号が変化した理由については、固有ベクトルがスケール ファクターまでしか決定されないことを思い出してください。これらの固有ベクトルは正規化されていますが、係数によって異なる場合があります-1。チェックするには、 の 1 つUを の対応する 1 で割るだけU2です。1すべての s または-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この方程式から、 ifが の固有ベクトルである場合、いくつかのスカラーのAanyも の固有ベクトルであり、固有値が関連付けられていることが明らかです。k * vkAlambda

于 2016-09-09T18:26:40.727 に答える