查看原文
其他

【强基固本】主成分分析(PCA)

“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。

作者:知乎—南山键客

地址:https://www.zhihu.com/people/huang-xin-hao-99

特征提取是模式识别中的核心内容,虽然当今时代深度学习大放异彩,但主成分分析(Principal components analysis,PCA)与线性鉴别分析(Linear Discriminant Analysis,LDA)作为特征提取的经典算法,领悟其核心思想对于入门机器学习十分重要。


01

特征提取
特征提取(或称特征抽取)一般做两方面的工作:一是对原始数据进行某种变换;二是在变换的过程中使不同的类别(或不同样本)具有相对较好的区分性。
一般来说,特征提取的特征维数会低于原始特征,使用特征提取方法可以大大降低原始图像数据的大小,减少存储空间以及提高传输效率。例如一个100×100的图像转化为矢量时维度为10000。如果我们使用恰当的特征提取方法,可以将原始数据缩小为几十维的有效矢量,大大降低了存储和数据传输成本。
那么什么样的特征提取方法才算是“恰当”呢?形象地说,具有强大的“抽象”和“概况”能力、可以从原始数据中提取出最重要特征的特征提取方法才算“恰当”。例如一篇长篇大论的文章,我们可以只用几个关键词对它进行概括,化繁为简。好的特征提取方法就是要对原始数据具有很好的提炼与加工功能,其结果是原始数据的线性或非线性变换


02

主成分分析
主成分分析,又称主分量分析、K-L变换,堪称特征抽取方法中的经典。主成分分析作为一种数学方法和有力的数据分析工具,几乎在所有学科中都有它的身影。一九九零年代,主成分分析引入到人脸识别领域后,随即挂起一阵旋风, 大家对其人脸图像数据的高效特征抽取能力爱不释手,因其不仅将图像数据的维数大大降低,而且还能取得很优的人脸识别效果。另一个例子是美国统计学家斯通利用美国1929-1938 年各年的17项原始国民经济发据(包含雇主补贴、消费资料、生产资料等等),进行主成分分析后发现,主成分分析得出的三个新变量(即原来17个数据的特征抽取结果) 竟然就包含了原数据中97. 4%的信息!
PCA的数学定义是:一个正交化线性变换,把数据变换到一个新的坐标系统中,使得这一数据的任何投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。
以下两篇文章已经将PCA讲得十分通俗,无需赘述,下面对几个重要问题做一下回顾。
https://www.zhihu.com/question/41120789/answer/481966094
https://zhuanlan.zhihu.com/p/32412043
PCA的算法流程:
设有  个  维样本  ,我们的目标是将原始数据降到  维,然后用降维后的数据去完成模式识别任务(例如人脸识别)。
1. 先将原始数据按列组成 行  列矩阵  ,然后 中每一维数据都减去该维的均值得到 。(与对所有的样本进行“中心化”即  ,然后将数据按列组成  行  列矩阵  等效)
2. 计算样本的协方差矩阵  。
3(特征值分解或奇异值分解)求出协方差矩阵的特征值及对应的特征向量。
4. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前  行组成矩阵  。
5.  即为降维到  维后的数据。
核心问题:如何对协方差矩阵进行特征值分解?
关于协方差矩阵的参考资料如下:https://zhuanlan.zhihu.com/p/37609917
协方差矩阵  是一个对称矩阵。
回想我们学过的线性代数内容,对于任意对称矩阵 存在一个特征值分解(eigenvalue decomposition, EVD):
其中,的每一列都是相互正交的特征向量,且是单位向量,满足对角线上的元素是从大到小排列的特征值,非对角线上的元素均为0。
1)特征值分解最大的问题是只能针对方阵,即  的矩阵。而在实际的应用中,我们分解的大部分都不是方阵。2)而且对于一个200×200 的图像矩阵,转换为一个40000维的矢量,其对应的协方差矩为一个40000×40000的矩阵,如此庞大的矩阵进行特征向量计算会耗费巨大的计算资源。
这时候就需要奇异值分解(Singular Value Decomposition, SVD)上场了。
对于一个  的矩阵  ,有:
 其中  是  阶酉矩阵(酉矩阵指的是复数矩阵:  。其中  为  的共轭转置,当元素为实数时  ), 是  阶酉矩阵,  是一个  的矩阵,除了主对角线上的元素以外全为0,主对角线上的元素称为奇异值(  的特征值开根号)。
如何求  ?  的所有特征向量张成一个  的矩阵  ,的所有特征向量张成一个  的矩阵  。
回到PCA:
 
直接对  进行特征值分解,  中最大的  列就是  的最大的  个特征向量,即为所求。
可见,PCA算法可以不用做特征分解而是通过SVD来完成,这个方法在样本量很大的时候很有效。
另外,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上。也就是说,剩下的90%甚至99%的奇异值几乎没有什么作用。因此,我们可以用前  个大的奇异值来近似描述矩阵,此时有
其中  是一个远小于  和  的数,右边的三个矩阵相乘的结果会得到一个接近  的矩阵。
有的文章中写道:
注意到我们的SVD也可以得到协方差矩阵最大的  个特征向量张成的矩阵,但是SVD有个好处,有一些SVD的实现算法可以不用先求出协方差矩阵,也能求出我们的右奇异矩阵  。也就是说,我们的PCA算法可以不用做特征分解,而是做SVD来完成。这个方法在样本量很大的时候很有效。
  • 【一些SVD的实现算法可以不用先求出协方差矩阵】
有网友举例比如power method或者贪心算法,时间所限(并且本人也没有实际需求)所以这里并没有深入研究。
  • 【PCA仅仅使用了我们SVD的右奇异矩阵,没有使用左奇异矩阵,左奇异矩阵可以多行数进行降维,右奇异矩阵可以对列数降维,也就是说SVD既可以对函数降维还可以对列数降维】
PCA使用SVD的右奇异矩阵还是左奇异矩阵根据:  个  维样本  是"横"着放(每个样本作为行向量,所有样本拼成一个  行  列的矩阵,协方差矩阵为  )还是"竖"着放(每个样本作为列向量,所有样本拼成一个  行  列的矩阵,协方差矩阵为 ),并不绝对。
如何选择 
我们通过定义降维后数据包含的信息占原始数据信息的比重来确定  ,也就是根据特征值的贡献率来选取前 个最大的特征向量,即定义一个比重阈值  (  ), 使得:
主成分分析提取出的方差最大的信息到底有什么物理意义?
其最大意义在于方差最大化的约束,将使得提取出的特征最大程度反映原始数据中的信息。
主成分分析的根本手段在于提取样例中体现各自特定的信息,用术语说就是使得所有样例之间差异最大化的信息。
主成分分析在应用中,对原样例进行特征抽取时不同特征维(一个样例的特征抽取结果为一个矢量,该矢量中的每一个元素就叫做该样例的一个特征维)是独立抽取出来的。因此,可以单独地对一个特征维进行分析。
数学上,衡量标量数据之间差异性的最直接方法就是方差。因此,只要使得所有样例被抽取出的同一特征维之间的方差最大,就能满足主成分分析的要求,这很容易量化和实现。


03

PCA与LDA的局限性
PCA可以很好的解除线性相关,但是对于高阶相关性就没有办法了,对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关。另外,PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。
各个主成分特征是原始特征的线性组合,其含义具有一定的模糊性,不如原始样本特征的解释性强。
方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
传统的线性鉴别分析和主成分分析均只作用于对一维数据即矢量数据进行特证抽取,由此带来诸多不便。假如我们要处理的数据是200×200 大小的图像矩阵,那应用这两个方法之前,我们必须把每一个图像转换为一个40000维的矢量。在此基础上,主成分分析对应的协方差矩阵为一个40000×40000的矩阵,这是一个恐怖的数字,无论是计算协方差矩阵还是计算协方差矩阵的特征向量都将耗费巨大的计算资源。面对上述图像矩阵时,线性鉴别分析也存在一样的难题, 而且过之而不及。线性鉴别分析中类间散布矩阵与类内散布矩阵的大小均为40000×40000,而且还需要计算类内散布矩阵的逆矩阵,计算量的巨大可想而知。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“强基固本”历史文章




分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存