如何获得非PCA特征向量的向量的“特征值”(解释方差的百分比)?


10

我想了解如何获取数据集的方差百分比,而不是在PCA提供的坐标空间中,而是在稍微不同的一组(旋转)向量上。

在此处输入图片说明

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"))

因此,基本上我知道由PCA给出的数据集沿每个红色轴的方差由特征值表示。但是我怎么能得到等价的方差,总计相同的数量,但是将两个不同的轴投影为绿色,它们是主成分轴的pi / 10旋转。IE给定了从原点开始的两个正交单位矢量,我如何才能沿每个任意(但正交)轴获取数据集的方差,从而考虑所有方差(即“特征值”的总和与PCA)。


Answers:


7

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

k=dk<d

R2S

R2=1Si=1kVar(Xvi)

这只是沿原始尺寸的投影总和与方差之比。

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


R2try[ing] to reconstruct the data from the projectionsVvR2

是的,这是一个很好的观点,也是一个很好的解释
2016年

如果我没有数据矩阵,而只有协方差矩阵,该怎么办?协方差矩阵对角线的总和为我提供了总方差,如果我将PCA应用于该协方差矩阵,则特征值将沿每个新方向给出方差,因此解释的方差为特征值/总方差。但是我的向量不是本征向量?
混淆了

...据我所知,如果我们从协方差矩阵C开始,那么在这种情况下,需要取| Cv_i |。/ sum(diag(C))以获得%方差解释。
混淆了
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.