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

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

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

为了能够从该一个主分量重建原始的两个变量,我们可以使用将其映射回维。实际上,每个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

我们可以将此灰度图像视为数据矩阵。我对其执行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

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

  1. matlab中利用princomp实现PCA降维

    matlab中利用princomp实现PCA降维 在matlab中有函数princomp可以实现数据的降维,本文主要说明该函数的用法. PCA的作用: PCA(主成分分析法),主要用来对数据进行降维, ...

  2. matlab 归一化_MATLAB主成分PCA人脸识别深度解析(一)

    前言:人脸识别是一个很经典的课题,围绕它可以做成很多实际应用,比如教室人脸考勤,人脸门禁系统,无人超市购物系统,刷脸支付系统等等.可是,为什么这一切是靠什么进行匹配人脸的呢,怎么那么神奇呢.人脸识别的 ...

  3. MATLAB自带工具箱实现PCA降维代码

    进行PCA降维,环境是MATLAB, 网上找了很多都是介绍PCA原理的,两篇介绍的不错的PCA 原理文章,只是想实现pCA的大可不必看.原理文章1  原理文章2 下面开始介绍用MATLAB自带工具包函 ...

  4. sklearn的pca建模_基于pca和内容的建模,用于英雄推荐英雄联盟

    sklearn的pca建模 Note: All the code for the below can be found here. 注意:以下所有代码均可在此处找到. Previously I wro ...

  5. ggbiplot-最好看的PCA作图:样品PCA散点+分组椭圆+变量贡献与相关

    ggbiplot简介 ggbiplot是一款PCA分析结果可视化的R包工具,可以直接采用ggplot2来可视化R中基础函数prcomp() PCA分析的结果,并可以按分组着色 .分组添加不同大小椭圆. ...

  6. ggbiplot-最好看的PCA作图:样品PCA散点+分组椭圆+主成分丰度和相关

    写在前面 https://github.com/vqv/ggbiplot/blob/master/README.md 前几天在<宏基因组0>微信讨论群看到了有人发了一个上面链接,点开一看居 ...

  7. 主成分分析(Principle Component Analysis)PCA的核心思想是什么?PCA算法的优缺点?增量PCA模型, 随机PCA, 模型、 核化PCA分别是什么?使用时如何选择?

    主成分分析(Principle Component Analysis)PCA的核心思想是什么?增量PCA模型, 随机PCA, 模型. 核化PCA分别是什么?使用时如何选择? 主成分分析(Princip ...

  8. PCA降维算法(内含PCA可视化迷你案例+PCA人脸识别降维案例+PCA逆转降噪案例)

    文章目录 1.sklearn中的降维算法 (1)PCA (2)SVD (3)思考 2.重要参数n_components 3.PCA中的SVD 4.重要接口inverse_transform 5.重要接 ...

  9. python实现pca降维_Python实现PCA降维

    PCA算法 主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,通常用于高维数据集的探索与可视化,还可以用作数据压缩和预处理等.PCA可以把具有相关性 ...

  10. MATLAB对图像左右反转、上下反转、逆时针反转90度、图像平铺

    MATLAB对图像左右反转.上下反转.逆时针反转90度.图像平铺 矩阵操作,想起当初的for循环,我仿佛是个傻子 A=imread('airplane58.tif'); subplot(231),im ...

最新文章

  1. BlueTooth: 蓝牙基础知识进阶——链路控制操作
  2. Silverlight 5的时间表及大量问题
  3. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )
  4. Zend Studio 如何配置本地apache服务器使用xdebug调试php脚本
  5. 郑州学python_郑州Python基础知识点学习之内置类型
  6. Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段
  7. 利用“多说”制作留言板、评论系统
  8. mysql给数据量大的表添加索引的办法
  9. OpenCV与图像处理学习十二——图像形状特征之HOG特征
  10. Linux服务之SSH
  11. JavaScript图片幻灯片显示效果
  12. 突击计划——给定三角形边长,求面积
  13. 帮你快速拿Offer!渣本逆袭大厂面经分享
  14. componentDidUpdate vs componentWillReceiveProps
  15. python持久层框架_python网络爬虫——scrapy框架持久化存储
  16. ai条码插件免安装_Illustrator条形码插件
  17. matlab里面fig文件坐标轴名称单位,MATLAB如何提取fig文件中的xyz坐标值
  18. C#一年级100以内的加减训练
  19. Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)
  20. 第六届360前端星计划_前端代码的自我修养

热门文章

  1. 实操教程|使用计算机视觉的方法在钢铁平面上检测焊接缺陷
  2. Js/jQuery实时监听input输入框值变化
  3. Python网络爬虫第一弹《Python网络爬虫相关基础概念》
  4. 第29月第13天 程序员职业规划
  5. 孩子们各显神通对付 iOS 12「屏幕使用时间」的限制
  6. 371. Sum of Two Integers (Binary)
  7. 【大数据实战】Logstash采集-Kafka-ElasticSearch检索
  8. UIApplication, UIApplicationDelegate,UIApplicationMain的分析
  9. 冒泡排序(数组排序不用Array.Sort)
  10. HDU1465_递推_错排