Bagaimana cara mendapatkan "nilai eigen" (persentase dari varian yang dijelaskan) dari vektor yang bukan vektor eigen PCA?

10

Saya ingin memahami bagaimana saya bisa mendapatkan persentase varians dari kumpulan data, bukan di ruang koordinat yang disediakan oleh PCA, tetapi terhadap serangkaian vektor (rotasi) yang sedikit berbeda.

masukkan deskripsi gambar di sini

set.seed(1234)
xx <- rnorm(1000)
yy <- xx * 0.5 + rnorm(1000, sd = 0.6)
vecs <- cbind(xx, yy)
plot(vecs, xlim = c(-4, 4), ylim = c(-4, 4))
vv <- eigen(cov(vecs))$vectors
ee <- eigen(cov(vecs))$values
a1 <- vv[, 1]
a2 <- vv[, 2]
theta = pi/10
rotmat <- matrix(c(cos(theta), sin(theta), -sin(theta), cos(theta)), 2, 2)
a1r <- a1 %*% rotmat
a2r <- a2 %*% rotmat
arrows(0, 0, a1[1], a1[2], lwd = 2, col = "red")
arrows(0, 0, a2[1], a2[2], lwd = 2, col = "red")
arrows(0, 0, a1r[1], a1r[2], lwd = 2, col = "green3")
arrows(0, 0, a2r[1], a2r[2], lwd = 2, col = "green3")
legend("topleft", legend = c("eigenvectors", "rotated"), fill = c("red", "green3"))

Jadi pada dasarnya saya tahu bahwa varian dataset sepanjang masing-masing sumbu merah, yang diberikan oleh PCA, diwakili oleh nilai eigen. Tetapi bagaimana saya bisa mendapatkan varian yang setara, dengan jumlah yang sama, tetapi memproyeksikan dua sumbu yang berbeda dalam warna hijau, yang merupakan rotasi oleh pi / 10 dari sumbu komponen utama. IE memberikan dua vektor unit ortogonal dari asalnya, bagaimana saya bisa mendapatkan varians dari dataset sepanjang masing-masing sumbu acak (tapi ortogonal) ini, sehingga semua varians diperhitungkan (yaitu "nilai eigen" sama dengan yang ada pada PCA).

Thomas Browne
sumber
Sangat terkait: stats.stackexchange.com/questions/8630 .
amoeba

Jawaban:

7

Xnd{v1,...,vk}viVar(Xvi)

k=dk<d

R2S

R2=1Si=1kVar(Xvi)

Ini hanya rasio dari jumlah penjumlahan dari proyeksi dan jumlah penjumlahan di sepanjang dimensi asli.

R2ix(i)ViVp(i)=x(i)Vk<dx^(i)=p(i)VT

E=1nx(i)x^(i)2

R2MSEVartotalR2=1MSE/VartotalES

R2=1ES

SR2

R2k=dR2k<dR2

pengguna20160
sumber
R2try[ing] to reconstruct the data from the projectionsVvR2
Ya, itu poin yang bagus dan penjelasan yang bagus
user20160
Bagaimana jika saya tidak memiliki matriks data, tetapi hanya matriks kovarians? Jumlah diagonal dari matriks kovarians memberi saya total varians, dan jika saya menerapkan PCA ke matriks kovarians, nilai eigen akan memberikan varians di sepanjang setiap arah baru, sehingga varians yang dijelaskan adalah nilai eigen / total varians. Tapi apa vektor saya bukan vektor eigen?
Bingung
... Sejauh yang saya tahu, jika kita mulai dengan matriks kovarians C , maka dalam hal ini kita perlu mengambil | Cv_i | / sum (diag ( C )) untuk mendapatkan penjelasan% varians.
Bingung