执行主成分分析 (PCA) 后,我想将一个新向量投影到 PCA 空间(即在 PCA 坐标系中找到它的坐标)。
我已经使用 R 语言计算了 PCA prcomp
。现在我应该能够将我的向量乘以 PCA 旋转矩阵。该矩阵中的主成分应该按行还是按列排列?
执行主成分分析 (PCA) 后,我想将一个新向量投影到 PCA 空间(即在 PCA 坐标系中找到它的坐标)。
我已经使用 R 语言计算了 PCA prcomp
。现在我应该能够将我的向量乘以 PCA 旋转矩阵。该矩阵中的主成分应该按行还是按列排列?
只是为了添加到@chl 的精彩答案(+1),您可以使用更轻量级的解决方案:
# perform principal components analysis
pca <- prcomp(data)
# project new data onto the PCA space
scale(newdata, pca$center, pca$scale) %*% pca$rotation
如果您不想保存整个pca
对象以投影newdata
到 PCA 空间,这将非常有用。
好吧,@Srikant 已经给了您正确的答案,因为旋转(或加载)矩阵包含按列排列的特征向量,因此您只需将%*%
新数据的向量或矩阵与 eg 相乘(使用)prcomp(X)$rotation
。但是,请注意在计算 PCA EV 时应用的任何额外的居中或缩放参数。
在 R 中,您可能还会发现该predict()
函数很有用,请参阅?predict.prcomp
。顺便说一句,您只需输入以下内容即可检查新数据的投影是如何实现的:
getS3method("predict", "prcomp")
在 SVD 中,如果 A 是 mxn 矩阵,则右奇异矩阵 V 的前 k 行是 A 的原始列的 k 维表示,其中 k <= n
A = UΣV t
=> A t = VΣ t U t = VΣU t
=> A t U = VΣU t U = VΣ -----------(因为 U 是正交的)
=> A t UΣ - 1 =VΣΣ -1 =V
所以-1
A t的行或 A 的列映射到 V 的列。
如果新的数据进行 PCA 降维的矩阵是 Q,aqxn 矩阵,则使用公式计算-1,结果 R 是期望的结果。R 是一个 n × n 矩阵,R 的前 k 行(可以看作是 ak × n 矩阵)是 Q 在 k 维空间中的列的新表示。
我认为特征向量(即主成分)应该排列成列。