最近在 3d face 模型生成研究中,经常使用PCA,所以就把PCA的学习记录了下来。主成分分析(PCA, Principal Component Analysis)为我们提供了一种压缩数据的方式,我们也可以将它看作学习数据表示的无监督学习算法。PCA学习一种比原始维度更低的表示,也学习了一种元素之间没有线性相关的表示。我们知道一个经典的无监督学习任务就是找到数据的最佳表示。最佳表示可以是在比本身表示的信息更简单或者更易访问受到一些惩罚火或限制的情况下,尽可能多地保留原始数据的信息。那么PCA就为我们提供了这样一种方法。
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。
我们有样本X和样本Y,那么可以得到样本X的均值:
样本X方差:
由以上的基础公式我们可以得出以下的结论:
协方差为正时,说明X和Y是正相关关系;协方差为负时,说明X和Y是负相关关系;协方差为0时,说明X和Y是相互独立,互不相关。Cov(X,X)就是X的方差。当样本是n维数据时,它们的协方差实际上是协方差矩阵(对称方阵)。例如,对于3维数据(x,y,z),计算它的协方差就是:
其实协方差矩阵和散度矩阵关系密切,散度矩阵就是协方差矩阵乘以(总数据量-1)。因此它们的 特征值 和 特征向量 是一样的。这里值得注意的是,散度矩阵是 SVD奇异值分解 的一步,因此PCA和SVD是有很大联系
其中,λ是特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。
其中,Q是矩阵A的特征向量组成的矩阵,而矩阵Σ则是一个对角阵,对角线上的元素就是特征值。
假设A是一个mn的矩阵,那么得到的U是一个 mm 的方阵,U里面的正交向量被称为左奇异向量。Σ是一个 mn 的矩阵,Σ除了对角线其它元素都为0,对角线上的元素称为奇异值。 Vt (t在右上角)是v的转置矩阵,是一个 nn 的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会将Σ上的值按从大到小的顺序排列。
降到k维
注:这里除或不除样本数量n或n-1,其实对求出的特征向量没有影响。
的特征值与特征向量。
注:为什么使用:
降到k维
,当样本数多、样本特征数也多的时候,这个计算还是很大的。当我们用到SVD分解协方差矩阵的时候,SVD有两个好处:
对照就会发现,结果是不一样的。sklearn中的PCA是通过svd_flip函数实现的,sklearn对奇异值分解结果进行了一个处理,因为 ui σi vi=(-ui) σi (-vi) ,也就是u和v同时取反得到的结果是一样的,而这会导致通过PCA降维得到不一样的结果(虽然都是正确的)。具体了解可以自己分析一下sklearn中关于PCA的源码。
对于PCA可以做什么,对应于不同的业务,有不同的使用场景。
例如我最早接触时,用来分析2D人脸的矩阵化后里面的主要成分,提取出关键的维度,使用低维度的矩阵来表示人脸的特征。
当然对应于其他的数据,也是可以使用PCA的,例如在一个向量化好的用户信息矩阵中,需要提取出关键的维度来作为特征描写。所以他的使用场景就类似于他的名字,分析矩阵里面的主要成分,但是维度具体取多少,需要按照自己的数据来计算,也许需要多次的验证。
主成分分析PCA是将多指标重新组合成一组新的无相关的几个综合指标,是根据实际需要从中选取尽可能少的综合指标,以达到尽可能多地反应原指标信息的分析方法。由于这种方法的第一主成分在所有的原始变量中方差最大,因而综合评价函数的方差总不会超过第一主成分的方差,所以该方法有一定的缺陷,且提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),所以在变量较少时就不太适合先用主成分筛选变量,这个视数据情况而定
主成分分析实现步骤:
1、原始数据标准化,消除变量量纲不同的影响;
2、计算相关系数矩阵,计算特征值和对应的特征向量;
3、计算贡献率和累计贡献率。
疑问解答:
1计算特征值的含义?
PCA的本质是对角化协方差矩阵,后对一个n x n的对称协方差矩阵分解求特征值和特征向量,就会产生n个n维正交基,每个正交基对应一个特征值,吧矩阵投影在这n个基上,此时的特征值的横就表示在该基上的投影长度,特征值越大,说明矩阵对应的特征向量上的方差越大,样本点越离散,越容易区分,包含的信息量越多
2主成分系数
根据主成分系数判断主成分主要依赖的几个变量,根据主要依赖变量总结该主成分(综合指标)代表的性质
3主成分得分
主成分得分其实就是降维之后数据,可对降维之后的主成分得分进行聚类分析,得到相似的类别群体
spss的主成分分析主要应用在因子分析里,目的是将原来很多的因素,通过他们内在的相关分析,整合成新的一个或多个相对独立的综合因素,来代表原来散乱的因素。
例如我们测量客户满意度设计了10个题目,那数据收集完后,就可以通过因子分析,来看看这10个题目是否能综合成几个因素。通过spss的主成分分析,就可以得出相应结果。
结果可能是其中5个题目的相关显著,可以通过一个因素来归纳这5个因素,另外3个、 2个也可以分别组成一个,而且主成分对应的特征值大于1,这样就最后就可以通过3个综合因素来研究和分析客户满意度了。
主成分分析可以理解为一种数据的处理理论,也可以理解为一种应用方法。而因子分析则可以理解为一种应用方法,因为做因子分析采用的比较多的就是用主成分分析的方法来浓缩因子。
所以其实所谓的区别只不过是在学科研究当中存在的,因为同属于统计学的理论,所以一定要找出两者的区别来。但是如果你只是应用的话,那就没必要考虑两者有什么区别。
主成分分析,是考察多个变量间相关性一种多元统计方法,研究如何通过少数几个主成分来揭示多个变量间的内部结构,即从原始变量中导出少数几个主成分,使它们尽可能多地保留原始变量的信息,且彼此间互不相关通常数学上的处理就是将原来P个指标作 线性组合 ,作为新的综合指标。 最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的 方差 来表达,即Var (F1)越大,表示F1包含的信息越多。 因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。
主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
在实际课题中,为了全面分析问题,往往提出很多与此有关的变量(或因素),因为每个变量都在不同程度上反映这个课题的某些信息。
主成分分析首先是由K皮尔森(Karl Pearson)对非随机变量引入的,尔后H霍特林将此方法推广到随机向量的情形。信息的大小通常用离差平方和或方差来衡量。
本文记录的目的是方便自己学习和复习,有误之处请谅解,欢迎指出。
主成分分析(Principal Component Analysis,PCA)是中最常用的降维算法之一,也可以用于数据压缩、去除冗余信息、消除噪声等方面。PCA的目的是找出一组低维数据来代表原高维数据,且保留原始数据中的主要信息。例如有m个数据集,n维特征,我们希望将n维特征降低到d维,而且让损失的信息尽可能小,具体怎么做呢?
首先通过PCA找出第1个新坐标使得原始数据中方差最大;然后找出第2个新坐标与第1个坐标正交平面使得方差最大;再找出第3个坐标与1,2坐标正交平面使得方差最大,以此类推,得到d个新维度特征。
直接一点:就是求出样本集的协方差矩阵 的前d个特征值对应的特征向量,组成矩阵 ,然后对每个样本 进行变换 。
1)特征去中心化,即每个维度特征减去其均值:
2)计算协方差矩阵
3) 对协方差矩阵进行特征值分解
4)取前d个最大的特征值对应的特征向量组成矩阵 。
5)对每个样本数据进行变换,
6)得到降维后的数据
假定现有10个二维数据集 (25,24), (05,07), (22,29), (19,22), (31,30), (23, 27), (2, 16), (1, 11), (15, 16), (11, 09) ,需要用PCA降到1维。
首先样本去中心化,这里样本的均值为 (181, 191) ,所有的样本减去这个 均值 向量后,即中心化后的数据集为 (069, 049), (-131, -121), (039, 099), (009, 029), (129, 109), (049, 079), (019, -031), (-081, -081), (-031, -031), (-071, -101) 。
求协方差矩阵:
求出特征值为 (00490833989, 128402771) ,对应的特征向量分别为:
由于最大的k=1个特征值为128402771,对应的特征向量为 。这也就是特征矩阵 。
对每个数据样本进转换 得到降维后的数据 (-0827970186, 177758033, -0992197494, -0274210416, -167580142, -0912949103, 00991094375, 114457216, 0438046137, 122382056)
什么是主成分分析法
主成分分析法: 英文全名 Principal Component Analysis 简称 PCA ,由名字就可以看出来,这是一个挑重点分析的方法。主成分分析 法是通过 恰当 的数学变换 ,使新变量—— 主成分成为原变量 的线性 组合 ,并选 取少数 几个在变差总信息量中 比例较 大的主成分来分析 事物 的一种方法 。 主成分在变差信息量中的比例越大 , 它在综合评价 中的作用就越大
思想: 整体思想就是化繁为简,抓住问题关键,也就是降维思想。当然,既然是抓住关键,那么自然就是以牺牲精度为代价。
解决问题: 因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。 在用统计方法研究多变量问题时,变量太多会增加计算量和分析问题的复杂性。
人们希望在进行定量分析过程中,涉及的变量较少,得到的信息量较多。为了尽可能的减少冗余和噪音,一般情况可以从相关变量中选择一个,或者把几个相关变量综合为一个变量作为代表,用少数变量来代表所有变量。
原理: 因为评估所涉及的众多变量之间既然有一定的相关性,就必然存在着起支配作用的因素。根据这一点,通过对原始变量和相关矩阵的内部结构的关系研究 ,找出影响目标变量某一要素的几个综合指标,使综合指标为原来变量的线性拟合。 这样,综合指标不仅保留了原始变量的主要信息,且彼此间不相关,又比原始变量具有某些更优越的性质,使得我们在研究复杂目标变量评估问题时,容易抓住主要矛盾。
形象理解
比如,某学籍数据,有两列 M 和 F ,其中M 列的取值是如果学生为男性,则取值为 1 如果为女性,则取值为 0 。F 列,如果为男性则取值为 0 否则取值为一。 由这两种关系可以知道,这两列数据是强相关的。只要保留一列,就能够完全还原另外一列。 当然,不要局限于数据删除,还有数据转换,删除可以理解为在此方法中的一种方式。
当然,上述情况在真实数据中是不可能出现的。这里只是借此介绍一下这种思维。真实情况中, 我们需要考虑删除哪一列信息可以使得损失最小?或者是通过变换数据就能使得损失信息更小?又如何度量信息的丢失量?原始数据的处理降维有哪些步骤?
坐标示例:
我们来看下面这张图,这是一个椭圆的点阵。椭圆上面有一个长轴和一个短轴。现在我们要表示点阵的主要变化趋势,就可以以长短轴(或者平行于长短轴)构建新的坐标系。在极端的情况下,短轴变成了一个点,那么长轴就能代表这个点阵的趋势和特点。这样,一个二维数据,就变成了一维。
基础知识储备
内积与投影:
内积运算,将两个向量映射为一个实数。其几何意义就是 向量 A ,在向量 B 的投影长度。(下图是以二维向量为例,多维空间依然是如此。)
上式中,B 为单位向量
基 :
同样以上图 B为例,B向量为(3,2)其表示的其实为在 X 轴的投影值为3 ,在Y轴的投影值 为 2 。这其实加入了一个隐含信息,就是本坐标轴 分别是以 X Y轴为方向的单位向量。这里的 X Y 轴其实就是我们所提到的 基。只不过一般默认为 (1,0)和(0,1)
所以呢,要描述一组向量,首先是要确定一组基。然后求这个向量在这组基中的投影即可。对基的要求是线性无关,并不一定非要正交。但是因为正交基有较好的性质,所以一般情况我们都是用正交基。
基变换
上面我们了解了基的原理。如果同样把(3,2)放到新基里面描述,那就是把向量和新基相乘即可。
如果是在描述中,有多个基呢?那就是与基阵相乘。
如何实现降维
上面的思路,我们都清楚了。那么我们如何通过基变换来降维呢?这里我们来举个例子。假设我们有一个矩阵如下。
为了处理方面,我们现在把每个字段都减去字段平均值,那么就变成了如下所示
表示在坐标上如下图
那么,我们现在想用一维坐标来表示,而且要求尽可能的保留原来的信息,我们需要如何选择方向(基)呢?(二维降一维)
思路就是,希望投影后的值尽可能的分散,避免重合。
协方差:
在概率论与统计学中,协方差用于衡量两个随机变量的联合变化程度。而方差则是协方差的一种特殊情况,即变量与自身的协方差。
期望:在概率论和统计学中,一个离散性随机变量的期望值(或数学期望,亦简称期望,物理学中称为期待值)是试验中每次可能的结果乘以其结果概率的总和。比如骰子的期望值为 1 1/6 +21/6 + …+ 61/6 = 35
协方差公式为:
其中,E(X) = u E(Y) = v
协方差表示的是两个变量的总体的误差 ,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。如果X 与Y 是统计独立的,那么二者之间的协方差就是0
流程和步骤
第一步:标准化
把输入数据集变量的范围标准化,以使它们中的每一个均可以大致成比例的分析。简单说,就是要把存在较大差异的数据转变为可比较的数据。比如把 0-100 的变量转化为 0-1 的变量。这一步一般可以通过减去平均值,再除以每个变量值的标准差来完成。标准差公式如下
那么常用的标准化指标变量公式可为
第二步:协方差矩阵计算
这一步的目的是:了解输入数据集的变量是如何相对于平均值变化的。或者换句话说,是为了查看它们之间是否存在任何关系。因为有时候,变量间高度相关是因为它们包含大量的信息。因此,为了识别这些相关性,我们进行协方差矩阵计算。
协方差矩阵是p×p对称矩阵(其中p是维数),其所有可能的初始变量与相关联的协方差作为条目。
好了,现在我们知道协方差矩阵只不过是一个表,汇总了所有可能配对的变量间相关性。下面就是计算协方差矩阵的特征向量和特征值,以筛选主要成分。
第三步:计算协方差矩阵的特征向量和特征值,用以识别主成分
特征向量和特征值都是线性代数概念,需要从协方差矩阵计算得出,以便确定数据的主成分。开始解释这些概念之前,让我们首先理解主成分的含义
主成分是由初始变量的线性组合或混合构成的新变量。该组合中新变量(如主成分)之间彼此不相关,且大部分初始变量都被压缩进首个成分中。所以,10维数据会显示10个主成分,但是PCA试图在第一个成分中得到尽可能多的信息,然后在第二个成分中得到尽可能多的剩余信息,以此类推。
例如,假设你有一个10维数据,你最终将得到的内容如下面的屏幕图所示,其中第一个主成分包含原始数据集的大部分信息,而最后一个主成分只包含其中的很少部分。因此,以这种方式组织信息,可以在不丢失太多信息的情况下减少维度,而这需要丢弃携带较少信息的成分。
在这里,方差和信息间的关系是,线所承载的方差越大,数据点沿着它的分散也越大,沿着线的散点越多,它所携带的信息也越多。简单地说,只要把主成分看作是提供最佳角度来观察和评估数据的新轴,这样观测结果之间的差异就会更明显。
协方差矩阵的特征向量实际上是方差最多的轴的方向(或最多的信息),我们称之为主成分。通过特征值的顺序对特征向量进行排序,从最高到最低,你就得到了按重要性排序的主成分。
第四步:特征向量
正如我们在上一步中所看到的,计算特征向量并按其特征值依降序排列,使我们能够按重要性顺序找到主成分。在这个步骤中我们要做的,是选择保留所有成分还是丢弃那些重要性较低的成分(低特征值),并与其他成分形成一个向量矩阵,我们称之为特征向量。
因此,特征向量只是一个矩阵,其中包含我们决定保留的成分的特征向量作为列。这是降维的第一步,因为如果我们选择只保留n个特征向量(分量)中的p个,则最终数据集将只有p维。
第五步:沿主成分轴重新绘制数据
在前面的步骤中,除了标准化之外,你不需要更改任何数据,只需选择主成分,形成特征向量,但输入数据集时要始终与原始轴统一(即初始变量)。
这一步,也是最后一步,目标是使用协方差矩阵的特征向量去形成新特征向量,将数据从原始轴重新定位到由主成分轴中(因此称为主成分分析)。这可以通过将原始数据集的转置乘以特征向量的转置来完成。
优缺点
优点:化繁为简,降低了计算量。
缺点:一定程度上损失了精度。并且只能处理“线性问题”,这是一种线性降维技术、
总结
假设我们拿到了一份数据集,有m个样本,每个样本由n个特征(变量)来描述,那么我们可以按照以下的步骤进行降维:
1、将数据集中的每个样本作为列向量,按列排列构成一个n行m列的矩阵;
2、将矩阵的每一个行向量(每个变量)都减去该行向量的均值,从而使得新行向量的均值为0,得到新的数据集矩阵X;
3、求X的协方差矩阵,并求出协方差矩阵的特征值λ和单位特征向量e;
4、按照特征值从大到小的顺序,将单位特征向量排列成矩阵,得到转换矩阵P,并按PX计算出主成分矩阵;
5、用特征值计算方差贡献率和方差累计贡献率,取方差累计贡献率超过85%的前k个主成分,或者想降至特定的k维,直接取前k个主成分。
参考文章: https://blogcsdnnet/Murray_/article/details/79945148
参考文章: https://wwwcnblogscom/Luv-GEM/p/10765574html
参考文章: https://wwwssffxcom/wangzhanjianshe/40715html
欢迎分享,转载请注明来源:品搜搜测评网