私は手でSVDを実行しようとしています:
m<-matrix(c(1,0,1,2,1,1,1,0,0),byrow=TRUE,nrow=3)
U=eigen(m%*%t(m))$vector
V=eigen(t(m)%*%m)$vector
D=sqrt(diag(eigen(m%*%t(m))$values))
U1=svd(m)$u
V1=svd(m)$v
D1=diag(svd(m)$d)
U1%*%D1%*%t(V1)
U%*%D%*%t(V)
しかし、最後の行は戻りませんm
。どうして?それはこれらの固有ベクトルの兆候と関係があるようです...または手順を誤解しましたか?
stats.stackexchange.com/search?q=svd+signを参照してください。
—
whuber
SVDでは記号は重要ではないと繰り返し言われます...このように
—
失敗した統計学者2017
@Amoeba明確にしていただきありがとうございます。私はコードよりも英語の質問に焦点を合わせていました。Failedstatistician:何を実行するかを確認
—
whuber
D=diag(c(-1,1,1)*sqrt(eigen(m%*%t(m))$values))
し、平方根(および正規化された固有ベクトル)は符号までしか定義されていないことを覚えておいてください。詳細については、に変更m
しm <- matrix(-2,1,1)
て、へ,1,1)
の各呼び出しの最後に含めてくださいdiag
。これは、同じ問題を作成する例ですが、非常に単純なので、問題の性質が完全に明らかになります。
とった。ありがとうございました!ベクトルc(-1、1、1)を決定する一般的なルールはありますか?または、2つの分解の兆候をどのように関連付ける必要がありますか?
—
failedstatistician 2017
@whuberのトリックは
—
アメーバ
c(-1,1,1)
機能しますが、そのD
ように定義されているため、特異な値は得られません。定義上、特異値はすべて正でなければなりません。兆候をリンクする方法の問題U
とV
良いです、と私は答えを持っていません。なぜSVDをしないのですか?:-)