我想要反转从prcomp计算的PCA以恢复原始数据。
我认为以下内容可行:
pca$x %*% t(pca$rotation)
但事实并非如此。
以下链接显示了如何从PC恢复原始数据,但仅针对使用协方差矩阵上的特征的PCA进行了解释 http://www.di.fc.ul.pt/~jpn/r/pca/pca.html
prcomp不会以这种方式对PC进行计算。
“计算是通过(居中和可能缩放的)数据矩阵的奇异值分解完成的,而不是通过在协方差矩阵上使用特征来完成的。” -prcomp
答案 0 :(得分:14)
prcomp
将使变量居中,因此您需要添加减去的均值
t(t(pca$x %*% t(pca$rotation)) + pca$center)
如果pca$scale
为TRUE
,您还需要重新缩放
t(t(pca$x %*% t(pca$rotation)) * pca$scale + pca$center)
答案 1 :(得分:0)
我希望这也会有所帮助。
let process_args argv =
let (result, _) =
((default_settings, "-f"), argv)
||> Array.fold (fun (state, setting) elem ->
// (snip rest of function)