Jika saya membuat matriks 2-D yang seluruhnya terdiri dari data acak, saya berharap komponen PCA dan SVD pada dasarnya tidak menjelaskan apa-apa.
Sebaliknya, sepertinya kolom SVD pertama muncul untuk menjelaskan 75% dari data. Bagaimana ini bisa terjadi? Apa yang saya lakukan salah?
Ini plotnya:
Berikut adalah kode 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)
Memperbarui
Terima kasih @ Harun. Cara mengatasinya, seperti yang Anda catat, adalah menambahkan penskalaan ke matriks sehingga angkanya berpusat di sekitar 0 (artinya rata-rata adalah 0).
m <- scale(m, scale=FALSE)
Berikut adalah gambar yang dikoreksi, menunjukkan matriks dengan data acak, kolom SVD pertama mendekati 0, seperti yang diharapkan.
Jawaban:
PC pertama menjelaskan bahwa variabel tidak terpusat di sekitar nol. Melakukan penskalaan pertama atau memusatkan variabel acak Anda di sekitar nol akan memiliki hasil yang Anda harapkan. Misalnya, salah satu dari ini:
sumber
Saya akan menambahkan jawaban yang lebih visual untuk pertanyaan Anda, melalui penggunaan perbandingan model nol. Prosedur secara acak mengocok data di setiap kolom untuk mempertahankan varians keseluruhan sementara kovarians antara variabel (kolom) hilang. Ini dilakukan beberapa kali dan distribusi nilai singular yang dihasilkan dalam matriks acak dibandingkan dengan nilai asli.
Saya menggunakan
prcomp
alih-alihsvd
untuk dekomposisi matriks, tetapi hasilnya serupa:Perbandingan model nol dilakukan pada matriks berpusat di bawah ini:
Berikut ini adalah boxplot dari matriks permutasi dengan kuantil 95% dari setiap nilai singular yang ditunjukkan sebagai garis padat. Nilai asli PCA
m
adalah titik. yang semuanya terletak di bawah garis 95% - Dengan demikian amplitudo mereka tidak dapat dibedakan dari derau acak.Prosedur yang sama dapat dilakukan pada versi yang tidak terpusat
m
dengan hasil yang sama - Tidak ada nilai tunggal yang signifikan:Sebagai perbandingan, mari kita lihat dataset dengan dataset non-acak:
iris
Di sini, nilai tunggal pertama adalah signifikan, dan menjelaskan lebih dari 92% dari total varians:
sumber