ランダム行列の場合、SVDは何も説明すべきではありませんか?私は何を間違えていますか?
完全にランダムデータで構成される2次元行列を作成する場合、PCAおよびSVDコンポーネントは本質的に何も説明しないと予想されます。 代わりに、最初のSVD列がデータの75%を説明するように見えます。これはどのようにできますか?私は何を間違えていますか? プロットは次のとおりです。 Rコードは次のとおりです。 set.seed(1) rm(list=ls()) m <- matrix(runif(10000,min=0,max=25), nrow=100,ncol=100) svd1 <- svd(m, LINPACK=T) par(mfrow=c(1,4)) image(t(m)[,nrow(m):1]) plot(svd1$d,cex.lab=2, xlab="SVD Column",ylab="Singluar Value",pch=19) percentVarianceExplained = svd1$d^2/sum(svd1$d^2) * 100 plot(percentVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD Column",ylab="Percent of variance explained",pch=19) cumulativeVarianceExplained = cumsum(svd1$d^2/sum(svd1$d^2)) * 100 plot(cumulativeVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD column",ylab="Cumulative percent of variance explained",pch=19) 更新 ありがとう@アーロン。修正は、既に述べたように、数値が0を中心とするように行列にスケーリングを追加することでした(つまり、平均は0です)。 m <- scale(m, scale=FALSE) 修正された画像は、ランダムデータを含む行列の場合、最初のSVD列が予想どおり0に近いことを示しています。