matlab pca重构,如何反转PCA并从几个主要组成部分重建原始变量?

PCA计算协方差矩阵的特征向量(“主轴”),并按其特征值(解释的方差量)对它们进行排序。然后可以将居中的数据投影到这些主轴上以产生主要成分(“分数”)。出于降维的目的,可以只保留一个主成分子集,而将其余部分丢弃。(请参阅此处以了解外行对PCA的介绍。)

令为数据矩阵,其中行(数据点)和列(变量或特征)。减去平均矢量后从每一行,我们得到的居中数据矩阵。令为我们要使用的某些特征向量的矩阵;这些通常是特征值最大的特征向量。然后,可以简单地通过给出PCA投影的矩阵(“分数”)。n×pnpXrawXrawn×pn×pnnppμμXXVVp×kp×kkkkkn×kn×kZ=XVZ=XV

下图对此进行了说明:第一个子图显示了一些居中数据(在链接线程的动画中使用的相同数据)及其在第一个主轴上的投影。第二个子图仅显示此投影的值。维度从两个减少到一个:

99faf1800eb67fd7ea2b820f3a56fc1f.png

为了能够从该一个主分量重建原始的两个变量,我们可以使用将其映射回维。实际上,每个PC的值都应与投影所用的向量相同。然后比较子图1和3。结果由。我在上面的第三个子图中显示它。为了获得最终的重建,我们需要在其中加上均值向量:ppV⊤V⊤X^=ZV⊤=XVV⊤X^=ZV⊤=XVV⊤X^rawX^rawμμ

PCA reconstruction=PC scores⋅Eigenvectors⊤+MeanPCA reconstruction=PC scores⋅Eigenvectors⊤+Mean

注意,人们可以直接从第一副区到第三个乘以去与矩阵; 它称为投影矩阵。如果所有的中使用的特征向量,然后是单位矩阵(不执行维数降低,因此,“重建”是完美的)。如果仅使用特征向量的子集,则不是同一性。XXVV⊤VV⊤ppVV⊤VV⊤

这适用于PC空间中的任意点;可以通过映射到原始空间。zzx^=zV⊤x^=zV⊤

丢弃(卸下)领先的PC

有时,人们想要丢弃(删除)一台或几台领先的PC并保留其余的,而不是保留领先的PC并丢弃其余的PC(如上所述)。在这种情况下,所有公式都保持完全相同,但是应该由所有主轴组成,但要丢弃的主轴除外。换句话说,应该始终包括一个人想要保留的所有PC。VVVV

关于PCA相关性的警告

当在相关矩阵(而不是协方差矩阵)上进行PCA时,原始数据不仅以减去为中心, 而且通过将每列除以其标准偏差缩放。在这种情况下,要重建原始数据,需要使用对的列进行缩放,然后才将平均矢量加回去。XrawXrawμμσiσiX^X^σiσiμμ

图像处理实例

这个主题经常出现在图像处理的背景下。考虑一下Lenna-图像处理文献中的标准图像之一(请单击链接查找其来源)。在左下方,我显示了此图像的灰度变体(可在此处找到文件)。512×512512×512

YzKHA.png

我们可以将此灰度图像视为数据矩阵。我对其执行PCA,并使用前50个主要成分计算。结果显示在右侧。512×512512×512XrawXrawX^rawX^raw

还原SVD

PCA与奇异值分解(SVD)密切相关,请参阅

SVD与PCA之间的关系。如何使用SVD执行PCA?更多细节。如果将矩阵进行SVD 运算,因为,则选择一个维矢量,它表示“缩减”空间中的点的维度,然后将其映射回维度,则需要将其与相乘。n×pn×pXXX=USV⊤X=USV⊤kkzzUUkkppS⊤1:k,1:kV⊤:,1:kS1:k,1:k⊤V:,1:k⊤

R,Matlab,Python和Stata中的示例

我将对Fisher Iris数据进行PCA ,然后使用前两个主要成分对其进行重构。我在协方差矩阵上而不是在相关矩阵上进行PCA,即我不在这里缩放变量。但是我仍然必须加平均值。一些软件包,例如Stata,通过标准语法来解决。感谢@StasK和@Kodiologist对代码的帮助。

我们将检查第一个数据点的重构,即:

5.1 3.5 1.4 0.2

Matlab的

load fisheririsX=meas;mu=mean(X);[eigenvectors,scores]=pca(X);nComp=2;Xhat=scores(:,1:nComp)*eigenvectors(:,1:nComp)';Xhat=bsxfun(@plus,Xhat,mu);Xhat(1,:)

输出:

5.083 3.5174 1.4032 0.21353

[R

X=iris[,1:4]mu=colMeans(X)Xpca=prcomp(X)nComp=2Xhat=Xpca$x[,1:nComp]%*%t(Xpca$rotation[,1:nComp])Xhat=scale(Xhat,center=-mu,scale=FALSE)Xhat[1,]

输出:

Sepal.Length Sepal.Width Petal.Length Petal.Width

5.0830390 3.5174139 1.4032137 0.2135317

对于PCA重建图像的R实例,请参见此答案。

蟒蛇

importnumpyasnpimportsklearn.datasets,sklearn.decomposition

X=sklearn.datasets.load_iris().data

mu=np.mean(X,axis=0)pca=sklearn.decomposition.PCA()pca.fit(X)nComp=2Xhat=np.dot(pca.transform(X)[:,:nComp],pca.components_[:nComp,:])Xhat+=muprint(Xhat[0,])

输出:

[ 5.08718247 3.51315614 1.4020428 0.21105556]

请注意,这与其他语言的结果略有不同。那是因为Python的Iris数据集版本包含errors。

斯塔塔

webuse iris,clear

pca sep*pet*,components(2)covariance

predict _seplen _sepwid _petlen _petwid,fit

listin1iris seplen sepwid petlen petwid _seplen _sepwid _petlen _petwid

setosa5.13.51.40.25.0830393.5174141.403214.2135317

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值