主成分分析法(PCA)原理和步骤

主成分分析(Principal Component Analysis,PCA)是一种多变量统计方法,它是最常用的降维方法之一,通过正交变换将一组可能存在相关性的变量数据,转换为一组线性不相关的变量,转换后的变量被称为主成分。

可以使用两种方法进行 PCA,分别是特征分解或奇异值分解(SVD)。

准备工作

PCA 将 n 维输入数据缩减为 r 维,其中 r<n。简单地说,PCA 实质上是一个基变换,使得变换后的数据有最大的方差,也就是通过对坐标轴的旋转和坐标原点的平移,使得其中一个轴(主轴)与数据点之间的方差最小,坐标转换后去掉高方差的正交轴,得到降维数据集。

这里使用 SVD 方法进行 PCA 降维,假定有 p×n 维数据样本 X,共有 p 个样本,每行是 n 维,p×n 实矩阵可以分解为:

这里,正交阵 U 的维数是 p×n,正交阵 V 的维数是 n×n(正交阵满足:UUT=VTV=1),Σ 是 n×n 的对角阵。接下来,将 Σ 分割成 r 列,记作 Σr;利用 U 和 V 便能够得到降维数据点 Yr

具体做法

  1. 导入所需的模块,除了 TensorFlow,还需要 numpy 进行基本的矩阵计算,用 matplotlib、mpl_toolkit 和 seaborn 绘制图形:

  1. 加载数据集,此处使用常用的 MNIST 数据集:                                                                                                                                                       
  2. 定义类 TF_PCA,此类初始化如下:                                                                                                     
  3. 定义 fit 函数,计算输入数据的 SVD。定义计算图,以此计算奇异值和正交矩阵 U,self._X 以占位符的形式读入数据 self.data,tf.svd 以递减顺序返回形状为 [...,p] 的奇异值 s(singular_values),然后使用 tf.diag 将奇异值转换为对角矩阵:                                                                                                                                      
  4. 现在有了 sigma 矩阵、正交矩阵 U 和奇异值,下面定义 reduce 函数来计算降维数据。该方法需要 n_dimensions 和 keep_info 两个输入参数之一,n_dimensions 参数表示在降维数据中保持的维数,keep_info 参数表示保留信息的百分比(0.8意味着保持 80% 的原始数据)。该方法创建一个计算图,对 sigma 矩阵进行分割并计算降维数据集 YrTF_PCA 类已经准备就绪,下面会将 MNIST 的每个输入数据从维度为 784(28×28)减小到每个维度为 3。在这里为了对比效果只保留了 10% 的信息,但通常情况下需要保留大约 80% 的信息:TF_PCA 类已经准备就绪,下面会将 MNIST 的每个输入数据从维度为 784(28×28)减小到每个维度为 3。在这里为了对比效果只保留了 10% 的信息,但通常情况下需要保留大约 80% 的信息:
  5.       TF_PCA 类已经准备就绪,下面会将 MNIST 的每个输入数据从维度为 784(28×28)减小到每个维度为 3。在这里为了对比效果只保留了 10% 的信息,但通常情况下需要保留大约 80% 的信息:                                                                                                                                                 

代码输出如下:

  1. 绘制三维空间中的 55000 个数据点:

解读分析

前面的代码对 MNIST 图像进行了降维操作。原图的大小为 28×28,利用 PCA 方法把尺寸压缩得更小。通常在图像处理中经常用到降维操作,因为太大的图像尺寸包含大量的冗余数据。

TensorFlow 中的 embeddings 技术可以实现从对象到向量的映射,TensorBoard 中的 Embedding Projector 可以交互式地对模型的 embeddings 进行可视化,并提供了三种降维的方法:PCA、t-SNE 和自定义方式,可以使用 Embeddings Projector 来得到与上面类似的结果。

这需要从
tensorflow.contrib.tensorboard.plugins 中导入 projector,并且通过简单的三个步骤就可以完成:

  1. 加载数据:                                                                                                                                           
  2. 新建一个 metadata 文件(用制表符分隔的 .tsv 文件):                                                                                                                                  

  3. embeddings 保存在 Log_DIR 中:



    现在就可以使用 TensorBoard 查看 embeddings 了,通过命令行 tensorboard--logdir=log,在 Web 浏览器中打开 TensorBoard,然后进入 EMBEDDINGS 选项卡。下图显示的就是使用 PCA 方法运算的前三个主成分为轴的 TensorBoard 投影:

主成分分析法(PCA)原理和步骤的更多相关文章

  1. 主成分分析法PCA原理

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  2. 【笔记】主成分分析法PCA的原理及计算

    主成分分析法PCA的原理及计算 主成分分析法 主成分分析法(Principal Component Analysis),简称PCA,其是一种统计方法,是数据降维,简化数据集的一种常用的方法 它本身是一 ...

  3. 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA)

    主要内容: 一.降维与PCA 二.PCA算法过程 三.PCA之恢复 四.如何选取维数K 五.PCA的作用与适用场合 一.降维与PCA 1.所谓降维,就是将数据由原来的n个特征(feature)缩减为k ...

  4. 【机器学习】主成分分析法 PCA (II)

    主成分分析法(PAC)的优化——选择主成分的数量 根据上一讲,我们知道协方差为① 而训练集的方差为②. 我们希望在方差尽可能小的情况下选择尽可能小的K值. 也就是说我们需要找到k值使得①/②的值尽可能 ...

  5. 特征脸是怎么提取的之主成分分析法PCA

    机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...

  6. 【机器学习】主成分分析法 PCA (I)

    主成分分析算法是最常见的降维算法,在PCA中,我们要做的是找到一个方向向量,然后我们把所有的数都投影到该向量上,使得投影的误差尽可能的小.投影误差就是特征向量到投影向量之间所需要移动的距离. PCA的 ...

  7. 主成分分析法(PCA)答疑

    问:为什么要去均值? 1.我认为归一化的表述并不太准确,按统计的一般说法,叫标准化.数据的标准化过程是减去均值并除以标准差.而归一化仅包含除以标准差的意思或者类似做法.2.做标准化的原因是:减去均值等 ...

  8. 主成分分析(PCA)原理及R语言实现

    原理: 主成分分析 - stanford 主成分分析法 - 智库 主成分分析(Principal Component Analysis)原理 主成分分析及R语言案例 - 文库 主成分分析法的原理应用及 ...

  9. 主成分分析(PCA)原理及R语言实现 | dimension reduction降维

    如果你的职业定位是数据分析师/计算生物学家,那么不懂PCA.t-SNE的原理就说不过去了吧.跑通软件没什么了不起的,网上那么多教程,copy一下就会.关键是要懂其数学原理,理解算法的假设,适合解决什么 ...

  10. 降维之主成分分析法(PCA)

    一.主成分分析法的思想 我们在研究某些问题时,需要处理带有很多变量的数据,比如研究房价的影响因素,需要考虑的变量有物价水平.土地价格.利率.就业率.城市化率等.变量和数据很多,但是可能存在噪音和冗余, ...

随机推荐

  1. linux下安装并使用msgfmt命令

    msgfmt安装方法: sudo apt-get install gettext 编码 po 文件为 mo 文件: msgfmt -o test.mo test.po mo 文件反编码成 po文件: ...

  2. Shell-日志按天切割

    1.创建shell脚本: #!/bin/bash apphome=/apppath if [ ! -d $apphome ]; then exit 0 fi cp $apphome/app.log $ ...

  3. hdu1353 小暴力

    题意:       题意是给你一个数,然后你有0.25,0.1,0.05,0.01的四种面额若干,让你求出最小的钱币纸张. 思路:       对于这种题目要自己观察两样东西,一个是四种面额之间的关系 ...

  4. Python中os模块、csv模块和xlrd模块的使用

    目录 os模块的使用 open("test.txt","mode") 读取文件中的内容 f.read() f.readline(size) f.readline ...

  5. ADB调试工具的使用

    ADB(Android Debug Bridge)安卓调试桥,ADB工具是可以方便调试安卓应用的工具. ADB的安装 下载ADB工具,解压, 将ADB工具的目录加入系统环境变量中,打开CMD窗口,输入 ...

  6. 分解uber依赖注入库dig-源码分析

    上一篇帖子 分解uber依赖注入库dig-使用篇 把如何使用dig进行代码示例说明,这篇帖子分析dig的源码,看他是如何实现依赖注入的. dig实现的中心思想:所有传入Provide的函数必须要有除e ...

  7. CentOS运行多个Tomcat操作步骤

    一:修改环境变量 在/et/profile文件追加以下内容 # tomcat1 env ( 第一个tomcat 的环境变量) export CATALINA_HOME=/usr/local/apach ...

  8. Power BI官方客户案例2021

    微软商业应用峰会Power BI客户案例,今年的客户案例相比前2年不同,主要是大客户,基本都是行业Top公司. 选取零售,医药制造,教育,医疗IT等行业龙头.沃尔玛,拜耳,滑铁卢大学的分享内容非常棒, ...

  9. 高性能MySQL-索引

    创建索引-高效索引 1.1 索引初体验 1.1.1 介绍 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 索引的作用是做数据的快速检 ...

  10. 服务治理演进剖析 & Service Mesh、 xDS核心原理梳理

    基于XDS协议实现控制面板与数据面板通信分享 基于这段时间在同程艺龙基础架构部的蹲坑,聊一聊微服务治理的核心难点.历史演进.最新动态, 以上内容属自我思考,不代表同程艺龙技术水准.如理解有偏差.理解不 ...