将 PCA 应用于协方差矩阵
Applying PCA to a covariance matrix
我在理解过程中的某些步骤时遇到一些困难。他们获取坐标数据,找到协方差矩阵,应用 PCA,然后简而言之从每个特征值的平方根中提取标准差。我正在尝试重现这个过程,但我卡在了步骤上。
采取的步骤
数据集由一个矩阵 R 组成,其中包含巴黎坐标 (x(i),y(i)),i=1,..., N 的 N 是记录的实例总数。我们将PCA应用于R输入数据集的协方差矩阵,得到如下变量:
a) 新坐标系的主成分,特征向量u和v,以及
b) 对应于每个主成分解释的总可变性的特征值(λ1 和 λ2)。
使用这些变量,为每个项目创建了图形表示。两个正交段以坐标数据的平均值为中心。段的方向由 PCA 的特征向量驱动,每个段的长度定义为均值附近的一个标准偏差(σ1 和 σ2),通过提取每个特征值 λ1 和 λ2 的平方根计算得出。
我的脚步
#reproducable data
set.seed(1)
x<-rnorm(10,50,4)
y<-rnorm(10,50,7)
# Note my data is not perfectly distirbuted in this fashion
df<-data.frame(x,y) # this is my R matrix
covar.df<-cov(df,use="all.obs",method='pearson') # this is my covariance matrix
pca.results<-prcomp(covar.df) # this applies PCA to the covariance matrix
pca.results$sdev # these are the standard deviations of the principal components
# which is what I believe I am looking for.
这是我卡住的地方,因为我不确定我是在尝试获取 sdev
输出形式 prcomp()
还是应该先缩放我的数据。它们的规模都相同,所以我看不出有什么问题。
我的第二个问题是如何提取 x
和 y
方向的标准偏差?
您不将 prcomp 应用于协方差矩阵,而是对数据本身进行。
result= prcomp(df)
如果缩放是指规范化或标准化,那会在执行 prcomp() 之前发生。有关该过程的更多信息,请参阅该过程的介绍 link:pca on R。这可以引导您了解基础知识。要获取 sdev,请使用结果对象上的摘要
summary(result)
result$sdev
您没有将 prcomp 应用于协方差矩阵。 scale=T 将 PCA 基于相关矩阵,将 F 基于协方差矩阵
df.cor = prcomp(df, scale=TRUE)
df.cov = prcomp(df, scale=FALSE)
我在理解过程中的某些步骤时遇到一些困难。他们获取坐标数据,找到协方差矩阵,应用 PCA,然后简而言之从每个特征值的平方根中提取标准差。我正在尝试重现这个过程,但我卡在了步骤上。
采取的步骤
数据集由一个矩阵 R 组成,其中包含巴黎坐标 (x(i),y(i)),i=1,..., N 的 N 是记录的实例总数。我们将PCA应用于R输入数据集的协方差矩阵,得到如下变量:
a) 新坐标系的主成分,特征向量u和v,以及
b) 对应于每个主成分解释的总可变性的特征值(λ1 和 λ2)。
使用这些变量,为每个项目创建了图形表示。两个正交段以坐标数据的平均值为中心。段的方向由 PCA 的特征向量驱动,每个段的长度定义为均值附近的一个标准偏差(σ1 和 σ2),通过提取每个特征值 λ1 和 λ2 的平方根计算得出。
我的脚步
#reproducable data
set.seed(1)
x<-rnorm(10,50,4)
y<-rnorm(10,50,7)
# Note my data is not perfectly distirbuted in this fashion
df<-data.frame(x,y) # this is my R matrix
covar.df<-cov(df,use="all.obs",method='pearson') # this is my covariance matrix
pca.results<-prcomp(covar.df) # this applies PCA to the covariance matrix
pca.results$sdev # these are the standard deviations of the principal components
# which is what I believe I am looking for.
这是我卡住的地方,因为我不确定我是在尝试获取 sdev
输出形式 prcomp()
还是应该先缩放我的数据。它们的规模都相同,所以我看不出有什么问题。
我的第二个问题是如何提取 x
和 y
方向的标准偏差?
您不将 prcomp 应用于协方差矩阵,而是对数据本身进行。
result= prcomp(df)
如果缩放是指规范化或标准化,那会在执行 prcomp() 之前发生。有关该过程的更多信息,请参阅该过程的介绍 link:pca on R。这可以引导您了解基础知识。要获取 sdev,请使用结果对象上的摘要
summary(result)
result$sdev
您没有将 prcomp 应用于协方差矩阵。 scale=T 将 PCA 基于相关矩阵,将 F 基于协方差矩阵
df.cor = prcomp(df, scale=TRUE)
df.cov = prcomp(df, scale=FALSE)