如何解决主成分分析-SVD U矩阵投影
我有一个我感兴趣的数学问题。主成分分析(PCA)在数学上有多种解决方案。一种方法是使用SVD。
我准备了一个例子。当我绘制U矩阵观测值的相对位置彼此相对完全相同时,我感到很好奇。但是,当我们使用prcom
函数进行PCA分析并使用X矩阵时。
我们可以看到PC1和PC2低维空间上的观测位置与SVD中的U矩阵(相对)相同。缩放只是不同的东西。
我现在要从prcom函数获得与X矩阵中相同的值,我们需要从SVD获得(居中)观测值与VT矩阵的矩阵乘积。
我的问题是,考虑到观测值的相对位置相同,是否真的需要C和VT的阶乘积?
library(tidyverse)
library(datasets)
library(matrixStats)
# Loading The Data
X <- as.data.frame(datasets::USArrests)
# Centering the data - Z-standardization
C <- t(t(X) - colMeans(X))
C <- t(t(C) / colSds(C))
# SVD
SVD_REs <- svd(C)
V <-
SVD_REs %>%
broom::tidy(matrix = 'v') %>%
pivot_wider(names_from = PC,values_from = value,names_prefix = 'PC') %>%
mutate(column = colnames(X)[column])
U <-
SVD_REs %>%
broom::tidy(matrix = 'u') %>%
pivot_wider(names_from = PC,names_prefix = 'PC') %>%
mutate(row = rownames(X)[row])
U %>%
ggplot(aes(PC1,PC2,label = row)) +
geom_point() +
geom_text()
# NOW USE PCA build-in function
PCA_FUN <- prcomp(X,center = T,scale. = T)
# Their relative possition is Same as in U matrix. However,scaling is different
PCA_FUN$x %>%
as.data.frame() %>%
ggplot(aes(PC1,label = rownames(.))) +
geom_point() +
geom_text()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。