PCA主成分分析学习总结

在这里插入图片描述

大概主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA,下面我们就对PCA的原理做一个总结。

首先考虑一个问题:对于正交属性空间中的样本点,如何用一个超平面(直线的高维推广)对所有样本进行恰当的表达?

可以想到,若存在这样的超平面,那么它大概具有这样的性质:

  • 最近重构性:样本点到这个超平面的距离足够近
  • 最大可分性:样本点在这个超平面上的投影能尽可能的分开

基于最近重构性和最大可分性能分别得到主成分分析的两种等价推到,我们这里主要考虑最大可分性,并且一步一步推到出最终PCA。

1.PCA最大可分性的思想

PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体的,假如我们的数据集是 n维的,共有 m 个数据 (x_{1},x_{2},...,x_{m}) 。我们希望将这 m 个数据的维度从 n 维降到 n' 维,希望这 mn' 维的数据集尽可能的代表原始数据集。我们知道数据从 n 维降到 n' 维肯定会有损失,但是我们希望损失尽可能的小。那么如何让这 n' 维的数据尽可能表示原来的数据呢?

我们先看看最简单的情况,也就是 n=2n'=1 ,也就是将数据从二维降维到一维。数据如下图。我们希望找到某一个维度方向,它可以代表这两个维度的数据。图中列了两个向量方向, u_1u_2 ,那么哪个向量可以更好的代表原始数据集呢?

从直观上也可以看出, u_1u_2 好,这就是我们所说的最大可分性。

2.基变换

一般来说,欲获得原始数据新的表示空间,最简单的是对原始数据进行线性变换(基变换):

Y=PX

其中 Y 是样本在新空间的表达, P 是基向量, X 是原始样本。我们可知选择不同的基可以对一组数据给出不同的表示,同时当基的数量少于原始样本本身的维数则可达到降维的效果,矩阵表示如下:

\begin{pmatrix} p_1 \\ p_2 \\ \vdots \\ p_R \end{pmatrix} \begin{pmatrix} a_1 & a_2 & \cdots & a_M \end{pmatrix} = \begin{pmatrix} p_1a_1 & p_1a_2 & \cdots & p_1a_M \\ p_2a_1 & p_2a_2 & \cdots & p_2a_M \\ \vdots & \vdots & \ddots & \vdots \\ p_Ra_1 & p_Ra_2 & \cdots & p_Ra_M \end{pmatrix}

其中p_i\in\{p_1,p_2,...,p_R\}p_i\in\mathbb{R}^{1*N} 是一个行向量,表示第i个基;a_j\in\{a_1,a_2,...a_M\}a_i\in\mathbb{R}^{N*1} 是一个列向量,表示第j个原始数据记录。特别要注意的是,这里 R 可以小于 N ,而 R 决定了变换后数据的维数。也就是说,我们可以将一个 N 维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。从原本 X\in\mathbb{R}^{N*M} 降维到 Y\in\mathbb{R}^{R*M}因此这种矩阵相乘的表示也可以表示降维变换。

最后,上述分析同时给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。很多同学在学线性代数时对矩阵相乘的方法感到奇怪,但是如果明白了矩阵相乘的物理意义,其合理性就一目了然了。

3.方差

那么考虑,如何选择一个方向或 者基才是最优的?观察下图

周志华《机器学习》插图

我们将所有的点分别向两条直线做投影,基于前面PCA最大可分思想,我们要找的方向是降维后损失最小,可以理解为投影后的数据尽可能的分开,那么这种分散程度可以用数学上的方差来表示,方差越大数据越分散。方差公式如下:

Var(a) = \frac{1}{m}\sum_{i=1}^{m}{​{(a_i-\mu)}^2}

对数据进行了中心化后(可以方便后面的操作):

Var(a) = \frac{1}{m}\sum_{i=1}^{m}{​{a_i}^2}

现在我们已经知道了以下几点:

  • 对原始样本进行(线性变换)基变换可以对原始样本给出不同的表示
  • 基的维度小于数据的维度可以起到降维的效果
  • 对基变换后新的样本求其方差,选取使其方差最大的基

那么在下面我们来考虑一个新的问题


上面我们导出了优化目标,但是这个目标似乎不能直接作为操作指南(或者说算法),因为它只说要什么,但根本没有说怎么做。所以我们要继续在数学上研究计算方案。


4.协方差

从二维降到一维可以使用方差最大来选出能使基变换后数据分散最大的方向(基),但如果遇到高维的变换,当完成第一个方向(基)选择后,第二个投影方向应该与第一个“几乎重合在一起”,这显然是没有用的,因此要有其它的约束条件。我们希望两个字段尽可能表示更多的信息,使其不存在相关性。

数学上用协方差表示其相关性:

Cov(a,b) = \frac{1}{m}\sum_{i=1}^{m}a_i b_i

Cov(a,b)=0 时,表示两个字段完全独立,这也是我们的优化目标。

5.协方差矩阵

我们想达到的目标与字段内方差及字段间协方差有密切关系,假如只有 ab 两个字段,那么我们将它们按行组成矩阵 X ,表示如下:

X=\left( \begin{matrix} a_1&a_2&...&a_m\\ b_1&b_2&...&b_m\\ \end{matrix}\right)

然后我们用 X 乘以 X 的转置,并乘上系数 \frac{1}{m} :

\frac{1}{m}XX^\top=\left( \begin{matrix} \frac{1}{m}\sum_{i=1}^{m}{a_i^2}&\frac{1}{m}\sum_{i=1}^{m}{a_i b_i}\\ \frac{1}{m}\sum_{i=1}^{m}{a_i b_i}&\frac{1}{m}\sum_{i=1}^{m}{b_i ^2}\\ \end{matrix}\right)

可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差,而其它元素是 ab 的协方差,然后会发现两者被统一到了一个矩阵的。

6.协方差矩阵对角化

我们的目标是使 \frac{1}{m}\sum_{i=1}^{m}a_i b_i = 0 ,根据上述推倒,可以看出我们的优化目标 C=\frac{1}{m}XX^\top 等价于协方差矩阵对角化。即除对角线外的其它元素( 如 \frac{1}{m}\sum_{i=1}^{m}a_i b_i )化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。这样说可能还不是很明晰,我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:

设原始数据矩阵 X 对应的协方差矩阵为 C ,而 P 是一组基按行组成的矩阵,设 Y=PX ,则 YXP 做基变换后的数据。设 Y 的协方差矩阵为 D ,我们推导一下 DC 的关系:

D = \frac{1}{m}YY^\top

 =\frac{1}{m}(PX)(PX)^\top

= \frac{1}{m}PX X^\top P^\top

= P(\frac{1}{m}X X^\top) P^\top

=PCP^\top

=P\left( \begin{matrix} \frac{1}{m}\sum_{i=1}^{m}{a_i^2}&\frac{1}{m}\sum_{i=1}^{m}{a_i b_i}\\ \frac{1}{m}\sum_{i=1}^{m}{a_i b_i}&\frac{1}{m}\sum_{i=1}^{m}{b_i ^2}\\ \end{matrix}\right)P^\top

可见,我们要找的 P 不是别的,而是能让原始协方差矩阵对角化的 P 。换句话说,优化目标变成了寻找一个矩阵 P ,满足PCP^\mathsf{T}是一个对角矩阵,并且对角元素按从大到小依次排列,那么 P 的前 K 行就是要寻找的基,用 P 的前 K 行组成的矩阵乘以 X 就使得 XN 维降到了 K 维并满足上述优化条件。

我们希望的是投影后的方差最大化,于是我们的优化目标可以写为:

\max_{P}\ tr(PCP^\top)

s.t. \ \ PP^\top=I

利用拉格朗日函数可以得到:

J(P)=tr(PCP^\top)+\lambda(PP^\top-I)

P 求导有 CP^\top+\lambda P^\top = 0 ,整理下即为:

CP^\top=(-\lambda) P^\top

于是,只需对协方差矩阵 C 进行特征分解,对求得的特征值进行排序,再对 P^\top=(P_1, P_2,...,P_R) 取前 K 列组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。

7.PCA算法流程

从上面两节我们可以看出,求样本 x_in' 维的主成分其实就是求样本集的协方差矩阵 \frac{1}{m}XX^\top 的前 n' 个特征值对应特征向量矩阵 P ,然后对于每个样本 x_i ,做如下变换 y_i=Px_i ,即达到降维的PCA目的。

下面我们看看具体的算法流程:

输入: n 维样本集 X=(x_1,x_2,...,x_m) ,要降维到的维数 n' .

输出:降维后的样本集 Y

1.对所有的样本进行中心化 x_i=x_i-\frac{1}{m}\sum_{j=1}^{m}x_j

2.计算样本的协方差矩阵C=\frac{1}{m}XX^\mathsf{T}

3.求出协方差矩阵的特征值及对应的特征向量

4.将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

5.Y=PX即为降维到k维后的数据

注意:

有时候,我们不指定降维后的 n' 的值,而是换种方式,指定一个降维到的主成分比重阈值 t 。这个阈值t在 (0,1] 之间。假如我们的 n 个特征值为 \lambda_1\geq\lambda_2\geq...\geq\lambda_n ,则n'可以通过下式得到:

\frac{\sum_{i=1}^{n'}\lambda_i}{\sum_{i=1}^{n}\lambda_i}\geq t


8.PCA算法总结

这里对PCA算法做一个总结。作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。

PCA算法的主要优点有:

  • 仅仅需要以方差衡量信息量,不受数据集以外的因素影响。 
  • 各主成分之间正交,可消除原始数据成分间的相互影响的因素。
  • 计算方法简单,主要运算是特征值分解,易于实现。

PCA算法的主要缺点有:

  • 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
  • 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。


继续阅读

在PCA降维过程中,当进行协方差矩阵上求解特征值时,如果面对维度高达 10000*10000,可想而知耗费的计算量程平方级增长。面对这样一个难点,从而引出奇异值分解(SVD),利用SVD不仅可以解出PCA的解,而且无需大的计算量。

Betten:奇异值分解(SVD)原理zhuanlan.zhihu.com图标


PCA(主成分分析)和LDA(线性判别分析)有很多的相似点,其本质是要将初始样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

Betten:LDA线性判别分析zhuanlan.zhihu.com图标


参考资料

Pattern Recognition and Machine Learning

《机器学习》

主成分分析(Principal components analysis)-最大方差解释


Betten:机器学习面试干货精讲zhuanlan.zhihu.com图标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术动态 | 大规模中文概念图谱CN-Probase正式发布

本文转载自公众号知识工场。 历时多年的研发,复旦大学知识工场实验室正式推出大规模中文概念图谱——CN-Probase,用于帮助机器更好的理解人类语言。概念图谱中包含实体(比如“刘德华”)、概念(比如“演员”&#xff09…

生产Docker应用重启排查经历

一、现象描述 近期,生产云平台监控发生Docker应用重启次数过多事故报警,经观察发现某些Docker应用不定期地出现重启现象,已严重影响服务正常提供 生产应用重启的判断条件:健康检查连续3次检查不通过 生产健康检查间隔时间设置为…

【Java】深入理解Java线程

1 相关概念 并发:两个或多个事件在同一时间段内发生【多个任务交替执行】 并行:两个或多个事件在同一时刻发生【多个任务同时执行】 进程:进入内存的程序 内存:所有应用程序都要进入到内存中执行 临时存储RAM 线程:进…

机器学习——多元线性回归分析(multiple regression)及应用

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/loveliuzz/article/details/78006493 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_vi…

肖仰华 | 知识图谱研究的回顾与展望

本文转载自公众号知识工场。 本文整理自2017年10月19日肖仰华教授在知识图谱前沿技术课程&#xff08;华东师范大学站&#xff09;所做的报告&#xff0c;报告的题目为《知识图谱研究的回顾与展望》。 大家好&#xff0c;很多人在对知识图谱的研究或者落地方面都表现出了极大的…

Java应用性能调优工具介绍及实践

一、背景 &#xff08;1&#xff09;、随着微服务架构的逐渐推广&#xff0c;一个大型的单个应用程序被拆分为数个微服务系统&#xff0c;这为研发人员的本地调试跟踪带来困难 &#xff08;2&#xff09;、在微服务架构中&#xff0c;由于业务的复杂性&#xff0c;常常一个业务…

Google、MS和BAT教给我的面试真谛

大家好呀&#xff0c;我是「小鹿鹿鹿」&#xff0c;我又来啦&#xff5e;&#xff5e;趁大家还有依稀印象赶紧乘热打铁&#xff5e;&#xff5e;这次聊一聊关于面试的一些小想法&#xff0c;希望和大家交流交流&#xff5e;&#xff5e;虽然资历尚浅&#xff0c;但是也面过不少…

AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法

导读&#xff1a;词向量算法是自然语言处理领域的基础算法&#xff0c;在序列标注、问答系统和机器翻译等诸多任务中都发挥了重要作用。词向量算法最早由谷歌在2013年提出的word2vec&#xff0c;在接下来的几年里&#xff0c;该算法也经历不断的改进&#xff0c;但大多是仅适用…

甲子光年 | 为什么知识图谱终于火了?

本文转载自公众号甲子光年。如果知识是人类进步的阶梯&#xff0c;知识图谱就是AI进步的阶梯。作者&#xff5c;金丝猴编辑&#xff5c;甲小姐设计&#xff5c;孙佳栋微信&#xff5c;甲子光年 (ID:jazzyear)“知识图谱”相较于AI其他分支&#xff0c;似乎是最后一个热起来的赛…

Java多线程并发编程

一、线程池 1.1、什么是线程池 线程池是一种多线程的处理方式&#xff0c;利用已有线程对象继续服务新的任务&#xff08;按照一定的执行策略&#xff09;&#xff0c;而不是频繁地创建销毁线程对象&#xff0c;由此提高服务的吞吐能力&#xff0c;减少CPU的闲置时间。具体组成…

Step-by-step to Transformer:深入解析工作原理(以Pytorch机器翻译为例)

大家好&#xff0c;我是青青山螺应如是&#xff0c;大家可以叫我青青&#xff0c;工作之余是一名独立摄影师。喜欢美食、旅行、看展&#xff0c;偶尔整理下NLP学习笔记&#xff0c;不管技术文还是生活随感&#xff0c;都会分享本人摄影作品&#xff0c;希望文艺的技术青年能够喜…

知识图谱与智能问答基础理解

什么是知识图谱&#xff1f; 知识图谱本质上是语义网络&#xff0c;是一种基于图的数据结构&#xff0c;由节点(Point)和边(Edge)组成。在知识图谱里&#xff0c;每个节点表示现实世界中存在的“实体”&#xff0c;每条边为实体与实体之间的“关系”。知识图谱是关系的最有效的…

鲍捷 | 知识图谱从 0 级到 10 级简化版

本文转载自公众号&#xff1a;文因学堂。文因学以前写过几个进阶指南&#xff0c;可能都太难&#xff0c;不接地气。这里重新写一个更实事求是、更便于工程落地的版本0级&#xff1a;掌握正则表达式、SQL、JSON和一门支持if-then-else的高级语言 —— 是的&#xff0c;这些不是…

Java并发优化思路

一、并发优化 1.1、Java高并发包所采用的几个机制 &#xff08;1&#xff09;、CAS&#xff08;乐观操作&#xff09; jdk5以前采用synchronized&#xff0c;对共享区域进行同步操作&#xff0c;synchronized是重的操作&#xff0c;在高并发情况下&#xff0c;会引起线…

他与她,一个两年前的故事

“ 有没有那个Ta&#xff0c;值得你一生去守护”1她能力出众&#xff0c;业务能力无人能出其左右&#xff1b;他资质平庸&#xff0c;扮演一个很不起眼的角色&#xff1b;她国色天香&#xff0c;是整个公司上上下下关注的焦点&#xff1b;他其貌不扬&#xff0c;甚至很多人根本…

科普 | 知识图谱相关的名词解释

知识图谱&#xff08;Knowledge Graph&#xff09;是谷歌于2012年提出。企业通常出于商业目的去设计新的概念和名词。但每一个概念的提出都有其历史渊源和本质内涵。下面列举了知识图谱相关的几个概念&#xff0c;并简要阐明了它们与知识图谱的关系和区别。Knowledge Base&…

搜索引擎核心技术与算法 —— 倒排索引初体验

今天开启一个新篇章——智能搜索与NLP。本篇章将由羸弱菜鸡小Q和大家一同学习与智能搜索相关的知识和技术&#xff0c;希望能和大家一同学习与进步&#xff0c;冲鸭&#xff01;&#xff01;这里首先区分两个概念&#xff1a;搜索和检索检索&#xff1a;数据库时代的概念&#…

微服务设计原则和解决方案

一、微服务架构演进过程 近年来我们大家都体会到了互联网、移动互联带来的好处&#xff0c;作为IT从业者&#xff0c;在生活中时刻感受互联网好处的同时&#xff0c;在工作中可能感受的却是来自自互联网的一些压力&#xff0c;那就是我们传统企业的IT建设也是迫切需要转型&…

技术动态 | 知识可视化,连接和探究知识之间的联系!

本文转载自公众号&#xff1a;东湖大数据交易中心。大数据百人会线上沙龙 第八期3月1日晚八点&#xff0c;大数据百人会沙龙第八期主讲嘉宾——北京知珠传媒科技有限公司CEO郝庆一先生&#xff0c;分享他对可视化的理解&#xff0c;以及连接知识、探究知识之间的关系。1可视化…

潜在语义分析原理以及python实现代码!!!!

在Wiki上看到的LSA的详细介绍&#xff0c;感觉挺好的&#xff0c;遂翻译过来&#xff0c;有翻译不对之处还望指教。 原文地址&#xff1a;http://en.wikipedia.org/wiki/Latent_semantic_analysis 前言 浅层语义分析&#xff08;LSA&#xff09;是一种自然语言处理中用到的方法…