主成分分析法(PCA)原理和步骤
主成分分析法(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:
具体做法
- 导入所需的模块,除了 TensorFlow,还需要 numpy 进行基本的矩阵计算,用 matplotlib、mpl_toolkit 和 seaborn 绘制图形:
- 加载数据集,此处使用常用的 MNIST 数据集:
- 定义类 TF_PCA,此类初始化如下:
- 定义 fit 函数,计算输入数据的 SVD。定义计算图,以此计算奇异值和正交矩阵 U,self._X 以占位符的形式读入数据 self.data,tf.svd 以递减顺序返回形状为 [...,p] 的奇异值 s(singular_values),然后使用 tf.diag 将奇异值转换为对角矩阵:
- 现在有了 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% 的信息:
- TF_PCA 类已经准备就绪,下面会将 MNIST 的每个输入数据从维度为 784(28×28)减小到每个维度为 3。在这里为了对比效果只保留了 10% 的信息,但通常情况下需要保留大约 80% 的信息:
代码输出如下:
- 绘制三维空间中的 55000 个数据点:
解读分析
前面的代码对 MNIST 图像进行了降维操作。原图的大小为 28×28,利用 PCA 方法把尺寸压缩得更小。通常在图像处理中经常用到降维操作,因为太大的图像尺寸包含大量的冗余数据。
TensorFlow 中的 embeddings 技术可以实现从对象到向量的映射,TensorBoard 中的 Embedding Projector 可以交互式地对模型的 embeddings 进行可视化,并提供了三种降维的方法:PCA、t-SNE 和自定义方式,可以使用 Embeddings Projector 来得到与上面类似的结果。
这需要从
tensorflow.contrib.tensorboard.plugins 中导入 projector,并且通过简单的三个步骤就可以完成:
- 加载数据:
- 新建一个 metadata 文件(用制表符分隔的 .tsv 文件):
- 将
embeddings 保存在 Log_DIR 中:
现在就可以使用 TensorBoard 查看 embeddings 了,通过命令行 tensorboard--logdir=log,在 Web 浏览器中打开 TensorBoard,然后进入 EMBEDDINGS 选项卡。下图显示的就是使用 PCA 方法运算的前三个主成分为轴的 TensorBoard 投影:
主成分分析法(PCA)原理和步骤的更多相关文章
- 主成分分析法PCA原理
PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...
- 【笔记】主成分分析法PCA的原理及计算
主成分分析法PCA的原理及计算 主成分分析法 主成分分析法(Principal Component Analysis),简称PCA,其是一种统计方法,是数据降维,简化数据集的一种常用的方法 它本身是一 ...
- 吴恩达机器学习笔记(八) —— 降维与主成分分析法(PCA)
主要内容: 一.降维与PCA 二.PCA算法过程 三.PCA之恢复 四.如何选取维数K 五.PCA的作用与适用场合 一.降维与PCA 1.所谓降维,就是将数据由原来的n个特征(feature)缩减为k ...
- 【机器学习】主成分分析法 PCA (II)
主成分分析法(PAC)的优化——选择主成分的数量 根据上一讲,我们知道协方差为① 而训练集的方差为②. 我们希望在方差尽可能小的情况下选择尽可能小的K值. 也就是说我们需要找到k值使得①/②的值尽可能 ...
- 特征脸是怎么提取的之主成分分析法PCA
机器学习笔记 多项式回归这一篇中,我们讲到了如何构造新的特征,相当于对样本数据进行升维. 那么相应的,我们肯定有数据的降维.那么现在思考两个问题 为什么需要降维 为什么可以降维 第一个问题很好理解,假 ...
- 【机器学习】主成分分析法 PCA (I)
主成分分析算法是最常见的降维算法,在PCA中,我们要做的是找到一个方向向量,然后我们把所有的数都投影到该向量上,使得投影的误差尽可能的小.投影误差就是特征向量到投影向量之间所需要移动的距离. PCA的 ...
- 主成分分析法(PCA)答疑
问:为什么要去均值? 1.我认为归一化的表述并不太准确,按统计的一般说法,叫标准化.数据的标准化过程是减去均值并除以标准差.而归一化仅包含除以标准差的意思或者类似做法.2.做标准化的原因是:减去均值等 ...
- 主成分分析(PCA)原理及R语言实现
原理: 主成分分析 - stanford 主成分分析法 - 智库 主成分分析(Principal Component Analysis)原理 主成分分析及R语言案例 - 文库 主成分分析法的原理应用及 ...
- 主成分分析(PCA)原理及R语言实现 | dimension reduction降维
如果你的职业定位是数据分析师/计算生物学家,那么不懂PCA.t-SNE的原理就说不过去了吧.跑通软件没什么了不起的,网上那么多教程,copy一下就会.关键是要懂其数学原理,理解算法的假设,适合解决什么 ...
- 降维之主成分分析法(PCA)
一.主成分分析法的思想 我们在研究某些问题时,需要处理带有很多变量的数据,比如研究房价的影响因素,需要考虑的变量有物价水平.土地价格.利率.就业率.城市化率等.变量和数据很多,但是可能存在噪音和冗余, ...
随机推荐
- php图片合成【png图片】
php 图片合成[png图片] 示例代码 <?php header("Content-type:text/html;charset=utf-8"); error_report ...
- git基于master创建本地新分支
应用场景:开发过程中经常用到从master分支copy一个本地分支作为开发分支 步骤: 1.切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout master $ ...
- ubuntu 1804 配置阿里源
以防出错,先备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑元列表文件sudo vim /etc/apt/sources.list ...
- 技术面试问题汇总第001篇:猎豹移动反病毒工程师part1
我在2014年7月1日参加了猎豹移动(原金山网络)反病毒工程师的电话面试,但是很遗憾,由于我当时准备不足,加上自身水平不够,面试官向我提出的很多技术问题我都没能答出来(这里面既有基础类的问题,也有比较 ...
- Windows核心编程 第四章 进程(上)
第4章 进 程 本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进 ...
- Andrew Ng机器学习算法入门(十):过拟合问题解决方法
在使用机器学习对训练数据进行学习和分类的时候,会出现欠拟合和过拟合的问题.那么什么是欠拟合和过拟合问题呢?
- NumPy之:使用genfromtxt导入数据
目录 简介 genfromtxt介绍 多维数组 autostrip comments 跳过行和选择列 简介 在做科学计算的时候,我们需要从外部加载数据,今天给大家介绍一下NumPy中非常有用的一个方法 ...
- Windows进程间通讯(IPC)----共享内存
Windows中同一个EXE文件多次加载过程 Windows中EXE文件加载是基于内存映射文件的. 当EXE文件第一次被加载. 首先系统会先创建一个进程内核对象,并创建一个新的进程地址空间. 系统调用 ...
- [Django框架之路由层匹配、有名 无名分组、反向解析、路由分发、名称空间、伪静态、本地虚拟环境、django版本区别]
[Django框架之路由层匹配.有名 无名分组.反向解析.路由分发.名称空间.伪静态.本地虚拟环境.django版本区别] 路由层 路由即请求地址与视图函数的映射关系,如果把网站比喻成一本书,那路由就 ...
- 网络编程-UDP的服务器和客户端----keep on going never give up
1 //**************************************服务器********************************************** 2 #inclu ...