浅谈对主成分分析

合集下载

主成分分析

主成分分析

引言:主成分分析也称主分量分析,是由霍特林于1933 年首先提出的。

主成分分析是利用降维的思想,在损失很少信息的前提下,把多个指标转化为几个综合指标的多元统计方法。

通常把转化生成的综合指标称为主成分,其中每个主成分都是原始变量的线性组合,且各个主成分之间互不相关,使得主成分比原始变量具有某些更优越的性能。

这样在研究复杂问题时就可以只考虑少数几个主成分而不至于损失太多信息,从而更容易抓住主要矛盾,揭示事物内部变量之间的规律性,同时使得问题得到简化,提高分析效率。

本文用主成分分析的方法对某市14 家企业的经济效益进行分析。

[1] 在处理涉及多个指标问题的时候,为了提高分析的效率可以不直接对p 个指标构成的P维随机向量X=(X1, X2, X3, , Xp)进行分析,而是先对向量x进行线性变换,形成少数几个新的综合变量,使得个综合变量之间相互独立且能解释原始变量尽可能多的信息,这样在意损失很少部分信息为代价的前提下,达到简化数据结构,提高分析效率的目的。

主成分的基本思想就是在保留原始变量尽可能多的前提下达到降维的目的,从而简化问题的复杂性并抓住问题的主要矛盾。

而这里对于随机变量X1,X2,X3,……,Xp而言,其协方差矩阵或相关矩阵正是对各变量离散程度与变量之间的相关程度的信息的反映,而相关矩阵不过是将原始变量标准化后的协方差矩阵我们所说的保留原始变量尽可能多的信息,也就是指生成的较少的综合变量 (主成分)的方差和尽可能接近原始变量方差的总和。

因此在实际求解主成分的时候,总是从原始变量的协方差矩阵或相关矩阵的结构分析入手。

一般来说从原始变量的协方差矩阵出发求得的主成分与从原始变量的相关矩阵出发求得的主成分是不同的本文我们用从原始变量的相关矩阵出发求得的主成分进行分析。

[5]一、材料与方法1.1数据材料表1 14 家企业的利润指标的统计数据1.2分析方法本文采用多元统计学方法,选取14家企业作为样本收集每家企业的8个不同的利润指标,利用spss统计软件做主成分分析,给出载荷阵,并通过载荷阵给出主成分系数表,写出主成分表达式以此给出14个企业的得分值,最后根据主成分构造一个综合性评价指标,对14个企业进行综合排名。

主成分分析讲解范文

主成分分析讲解范文

主成分分析讲解范文下面我们来具体讲解主成分分析的步骤和原理:1.数据预处理在进行主成分分析之前,需要对原始数据进行预处理,包括去除噪声、处理缺失值和标准化等操作。

这些操作可以使得数据更加准确和可靠。

2.计算协方差矩阵协方差矩阵是衡量各个变量之间相关性的指标。

通常,我们会对数据进行标准化处理,使得各个变量具有相同的尺度。

然后,计算标准化后的数据的协方差矩阵。

3.计算特征值和特征向量通过对协方差矩阵进行特征分解,可以得到特征值和特征向量。

其中,特征值表示新坐标系中的投影方差,特征向量表示新坐标系的方向。

4.选择主成分根据特征值的大小,我们可以按照降序的方式选择主成分。

选取一部分较大的特征值所对应的特征向量,即可得到相应的主成分。

这些主成分是原始数据中最重要的成分。

5.生成投影数据通过将原始数据投影到选取的主成分上,即可得到降维后的数据。

每个样本在各个主成分上的投影即为新的特征值。

6.重构数据在需要恢复原始数据时,可以通过将降维后的数据乘以选取的主成分的转置矩阵,再加上原始数据的均值,即可得到近似恢复的原始数据。

主成分分析在实际应用中有很广泛的用途。

首先,它可以用于数据的降维,使得复杂的数据集可以在低维空间中进行可视化和分析。

其次,它可以用于数据的简化和压缩,减少数据存储和计算的成本。

此外,主成分分析还可以用于数据的特征提取和数据预处理,辅助其他机器学习和统计分析方法的应用。

然而,主成分分析也有一些限制和注意事项。

首先,主成分分析假设数据具有线性关系,对于非线性关系的数据可能失效。

其次,主成分分析对于离群值敏感,需要对离群值进行处理。

另外,主成分分析得到的主成分往往是原始数据中的线性组合,不易解释其具体含义。

总之,主成分分析是一种常用的降维数据分析方法,通过寻找新的投影空间,使得数据的方差最大化,实现数据的降维和简化。

它可以应用于数据可视化、数据压缩和特征提取等方面,是数据分析和机器学习中常用的工具之一、在应用主成分分析时,需要注意数据的预处理和对主成分的解释和理解。

主成分分析

主成分分析

一、主成分分析基本原理概念:主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法。

从数学角度来看,这是一种降维处理技术。

思路:一个研究对象,往往是多要素的复杂系统。

变量太多无疑会增加分析问题的难度和复杂性,利用原变量之间的相关关系,用较少的新变量代替原来较多的变量,并使这些少数变量尽可能多的保留原来较多的变量所反应的信息,这样问题就简单化了。

原理:假定有 n 个样本,每个样本共有p 个变量,构成一个n ×p 阶的数据矩阵,x11x12 x1px21 x22 x2p Xxn 1xn2xnp记原变量指标为x1,x2,,,xp ,设它们降维处理后的综合指标,即新变量为 z1,z2,z3,,,zm(m ≤p),则z 1l11x 1 l 12x 2l1p xpz 2 l 21x1 l22x2l2p xp ............ z mlm1x 1 l m2x 2lmp xp系数lij 的确定原则:①zi 与zj (i ≠j ;i ,j=1,2,,,m )相互无关;②z 是x 1 ,x ,,,x 的一切线性组合中方差最大者,z 是与z 不相关的x ,x ,,,1 2P2 1 1 2 xP 的所有线性组合中方差最大者;zm 是与z1,z2,,,, zm -1都不相关的x1,x ,,x P ,的所有线性组合中方差最大者。

2新变量指标z1,z2,,,zm 分别称为原变量指标x1,x2,,,xP 的第1,第2,,,第m 主成分。

从以上的分析可以看出,主成分分析的实质就是确定原来变量xj (j=1,2 ,,,p )在诸主成分zi (i=1,2,,,m )上的荷载lij (i=1,2,,,m ;j=1,2,,,p )。

从数学上可以证明,它们分别是相关矩阵m个较大的特征值所对应的特征向量。

二、主成分分析的计算步骤1、计算相关系数矩阵r11 r12 r1 pr21 r22 r2 pRrp1 rp2 rpprij(i,j=1,2,,,p)为原变量xi与xj的相关系数,rij=rji,其计算公式为n(x ki x i)(x kj x j)r ijk1n n(x ki2(x kj x j)2 x i)k1k12、计算特征值与特征向量解特征方程I R0,常用雅可比法(Jacobi)求出特征值,并使其按大小顺序排列1 2 p0;p 分别求出对应于特征值i的特征向量e i(i1,2,L,p),要求ei=1,即e ij21j1其中e ij表示向量e i的第j 个分量。

主成分分析概要

主成分分析概要

什么是主成分分析法主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。

在统计学中,主成分分析(principal components analysis,PCA)是一种简化数据集的技术。

它是一个线性变换。

这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。

主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。

这是通过保留低阶主成分,忽略高阶主成分做到的。

这样低阶成分往往能够保留住数据的最重要方面。

但是,这也不是一定的,要视具体应用而定。

[编辑]主成分分析的基本思想在实证问题研究中,为了全面、系统地分析问题,我们必须考虑众多影响因素。

这些涉及的因素一般称为指标,在多元统计分析中也称为变量。

因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。

在用统计方法研究多变量问题时,变量太多会增加计算量和增加分析问题的复杂性,人们希望在进行定量分析的过程中,涉及的变量较少,得到的信息量较多。

主成分分析正是适应这一要求产生的,是解决这类题的理想工具。

同样,在科普效果评估的过程中也存在着这样的问题。

科普效果是很难具体量化的。

在实际评估工作中,我们常常会选用几个有代表性的综合指标,采用打分的方法来进行评估,故综合指标的选取是个重点和难点。

如上所述,主成分分析法正是解决这一问题的理想工具。

因为评估所涉及的众多变量之间既然有一定的相关性,就必然存在着起支配作用的因素。

根据这一点,通过对原始变量相关矩阵内部结构的关系研究,找出影响科普效果某一要素的几个综合指标,使综合指标为原来变量的线性拟合。

这样,综合指标不仅保留了原始变量的主要信息,且彼此间不相关,又比原始变量具有某些更优越的性质,就使我们在研究复杂的科普效果评估问题时,容易抓住主要矛盾。

主成分分析【可编辑全文】

主成分分析【可编辑全文】
沿着xl轴方向或x2轴方向都具有较大的离散性,其离散 的程度可以分别用观测变量xl的方差和x2的方差定量地 表示。显然,如果只考虑xl和x2中的任何一个,那么包 含在原始数据中的经济信息将会有较大的损失。
• 如果我们将xl 轴和x2轴先平移,再同时 按逆时针方向旋转角度,得到新坐标轴Fl和 F2。Fl和F2是两个新变量。
• 如果变量分组较有规则,则从特征向量各 分量数值作出组内组间对比分析。
主成分分析的一般步骤
6. 解释各个主成分的含义 7. 进行其他分析
利用SPSS进行主成分分析的步骤
1. 指标数据的标准化。
可以利用“Descriptive statistics” 中的“Descriptives”进行标准化。
这种由讨论多个指标降为少数几个综合指 标的过程在数学上就叫做降维。主成分分析通 常的做法是,寻求原指标的线性组合Fi。其中, Xi 是经过标准化后的变量。
F1 u11X1 u21X 2 u p1X p F2 u12 X1 u22 X 2 u p2 X p
Fp u1p X1 u2 p X 2 u pp X p
4. 确 定 主 成 分 Fi 的 表 达 式 : 将 表 “Component Matrix”(初始因子载荷 阵)中的第i列向量除以第i个特征根的平方 根,得到第i个主成分Fi的变量系数向量。
5. 对主成分Fi进行解释。
• x1:数学 • x2:物理 • x3:化学 • x4:语文 • x5:历史 • x6:英语
满足如下的条件:
每个主成分的系数平方和为1。即
u2 1i
u2 2i
u
2 pi
1
主成分之间相互独立,即无重叠的信息。即
Cov(Fi,Fj) 0,i j,i,j 1, 2, ,p 主成分的方差依次递减,重要性依次递减,即

什么是主成分分析

什么是主成分分析

主成分分析(principal component analysis, PCA)如果一组数据含有N个观测样本,每个样本需要检测的变量指标有K个, 如何综合比较各个观测样本的性质优劣或特点?这种情况下,任何选择其中单个变量指标对本进行分析的方法都会失之偏颇,无法反映样本综合特征和特点。

这就需要多变量数据统计分析。

多变量数据统计分析中一个重要方法是主成份分析。

主成分分析就是将上述含有N个观测样本、K个变量指标的数据矩阵转看成一个含有K维空间的数学模型,N个观测样本分布在这个模型中。

从数据分析的本质目的看,数据分析目标总是了解样本之间的差异性或者相似性,为最终的决策提供参考。

因此,对一个矩阵数据来说,在K维空间中,总存在某一个维度的方向,能够最大程度地描述样品的差异性或相似性(图1)。

基于偏最小二乘法原理,可以计算得到这个轴线。

在此基础上,在垂直于第一条轴线的位置找出第二个最重要的轴线方向,独立描述样品第二显著的差异性或相似性;依此类推到n个轴线。

如果有三条轴线,就是三维立体坐标轴。

形象地说,上述每个轴线方向代表的数据含义,就是一个主成份。

X、Y、Z轴就是第1、2、3主成份。

由于人类很难想像超过三维的空间,因此,为了便于直观观测,通常取2个或者3个主成份对应图进行观察。

图(1)PCA得到的是一个在最小二乘意义上拟合数据集的数学模型。

即,主成分上所有观测值的坐标投影方差最大。

从理论上看,主成分分析是一种通过正交变换,将一组包含可能互相相关变量的观测值组成的数据,转换为一组数值上线性不相关变量的数据处理过程。

这些转换后的变量,称为主成分(principal component, PC)。

主成分的数目因此低于或等于原有数据集中观测值的变量数目。

PCA最早的发明人为Karl Pearson,他于1901年发表的论文中以主轴定理(principal axis theorem)衍生结论的形式提出了PCA的雏形,但其独立发展与命名是由Harold Hotelling于1930年前后完成。

主成分的三大原则

主成分的三大原则

主成分的三大原则
主成分分析是一种常用的数据分析方法,它能够从复杂的数据中提取出最重要的信息,并将其转化为更简洁、易于理解的形式。

主成分分析的三大原则为:维度压缩、信息最大化和无关性。

维度压缩是主成分分析的核心原则之一。

在现实生活中,我们经常面临的问题往往涉及多个变量,而这些变量之间可能存在一定的相关性。

主成分分析通过将原始变量转化为一组新的综合变量,从而实现对数据维度的压缩。

这样做的好处在于,可以简化问题的复杂度,提高数据的处理效率。

信息最大化也是主成分分析的重要原则之一。

主成分分析的目标是找到能够解释数据变异最大的综合变量。

这意味着,主成分分析会尽可能地保留原始数据中的信息,以便更好地解释数据的特征和变异。

通过信息最大化,我们可以更好地理解数据的本质和规律,从而做出更准确的预测和决策。

无关性是主成分分析的另一个重要原则。

在主成分分析中,我们希望通过线性组合的方式构建新的综合变量,使得它们之间尽可能地无关。

这样做的目的是为了排除原始变量之间的多重共线性,从而使得分析结果更加稳定和可靠。

通过保持综合变量之间的无关性,我们可以更好地理解数据的结构和特点,进而做出更合理的分析和解释。

主成分分析的三大原则为维度压缩、信息最大化和无关性。

这些原则帮助我们从复杂的数据中提取出最重要的信息,并将其转化为更简洁、易于理解的形式。

通过遵循这些原则,我们可以更好地理解和应用主成分分析方法,从而提高数据分析的效果和准确性。

带你认识主成分分析法

带你认识主成分分析法

带你认识主成分分析法在研究某些问题时,需要处理带有很多变量的数据。

变量和数据虽然很多,但可能存在噪音和冗余。

然而,主成分分析法可以用少数变量来代表所有的变量,用来解释研究者所要研究的问题,化繁为简,抓住关键,也就是降维思想。

在研究某些问题时,需要处理带有很多变量的数据。

比如,研究房价的影响因素,需要考虑的变量有物价水平、土地价格、利率、就业率等。

变量和数据很多,但可能存在噪音和冗余,因为这些变量中有些是相关的,那么就可以从相关的变量中选择一个,或者将几个变量综合为一个变量,作为代表。

用少数变量来代表所有的变量,用来解释所要研究的问题,就能化繁为简,抓住关键,这也就是降维的思想。

主成分分析法(Principal Component Analysis,PCA)就是一种运用线性代数的知识来进行数据降维的方法。

它将多个变量转换出少数几个不相关的变量来,但转换后的变量能比较全面地反映整个数据集。

这是因为数据集中的原始变量之间存在一定的相关关系,可用较少的综合变量来表达各原始变量之间的信息。

具体来看,在数学变换中保持变量的总方差不变,使第一变量具有最大的方差,称为第一主成分,第二变量的方差次大且和第一变量不相关,称为第二主成分。

依次类推,i个变量就有i个主成分。

主成分分析法的核心思想是降维,而降维的基础是变量之间的相关性。

主成分分析法不要求所有变量都相关,但部分变量之间的相关性比较大才能满足降维的条件,否则强制对不相关的变量进行降维,主成分分析法就失去了实际意义。

因此,对于价格内在影响因素相关度较强的期货品种,用主成分分析法进行分析研究是比较合适的,而对于影响因素相关度较弱的期货品种不适合。

那么主成分分析法是如何降维的呢?从坐标变换的角度来获得一个感性的认识。

在短轴上,观测点数据的变化比较小,如果把这些点垂直地投影到短轴上,那么有很多点的投影会重合,这相当于很多数据点的信息没有被充分利用到。

而在长轴上,观测点的数据变化比较大。

主成分分析

主成分分析

x12 x22 M xn 2
L x1 p L x2 p M L xnp
主成分分析的概念(续)
由于实测的变量间存在一定的相关关系, 由于实测的变量间存在一定的相关关系, 因此有可能用较少数的综合指标分别综 合存在于各变量中的各类信息, 合存在于各变量中的各类信息,而综合 指标之间彼此不相关, 指标之间彼此不相关,即各指标代表的 信息不重叠。综合指标称为主成分( 信息不重叠。综合指标称为主成分(提 取几个因子),一般有两种方法: ),一般有两种方法 取几个因子),一般有两种方法: 特征值>1 特征值 累计贡献率>0.8 累计贡献率
0.198 99.015
0.049 100.000
Component Matrix(a) Component 1 X1 X2 X3 X4 X5 .808 .814 -.791 .101 .846 2 -.487 .397 .479 .977 .415
由此可建立第一、二主成分(即两个新的综合指标) 由此可建立第一、二主成分(即两个新的综合指标) Z1=0.808X1+0.814X2-0.791X3+0.101X4+0.846X5; Z2=-0.487X1+0.397X2+0.479X3+0.977X4+0.415X5;
主成分分析的基本思想
主成分分析是研究如何通过原来变量的少数几个线性 组合来解释原来变量绝大多数信息的一种多元统计方法. 组合来解释原来变量绝大多数信息的一种多元统计方法 既然研究某一个问题涉及的众多变量之间有一定的相 关性,就必然存在着起支配作用的共同因素 根据这一点 关性 就必然存在着起支配作用的共同因素,根据这一点 就必然存在着起支配作用的共同因素 根据这一点, 通过对原始变量相关矩阵或协方差矩阵内部结构关系的 研究,利用原始变量的线性组合形成几个综合指标 主成分 研究 利用原始变量的线性组合形成几个综合指标(主成分 利用原始变量的线性组合形成几个综合指标 主成分) 在保留原始变量主要信息的前提下起到降维与简化问题 的作用,从而在研究复杂问题时抓住主要矛盾 的作用 从而在研究复杂问题时抓住主要矛盾. 从而在研究复杂问题时抓住主要矛盾

主成分分析

主成分分析
p 2 p 2 ik

§11.3 总体主成分的推导及性质
性质5

i 1
p
ii
( Fk , X i ) k
2
(k 1,, p)
此性质说明:上表中Fk对应的每一列关于各变量相关系数的加 权平方和为λk即Var(Fk)。
§11.3 总体主成分的推导及性质
§11.4 有关问题的讨论
(一)从协差阵出发还是从相关阵出发求主成分
根据旋转变换的公式:
F1 x1 cos x2 sin F2 x1 sin x2 cos
F1 cos F2 sin sin x1 cos x2
旋转变换的目的是为了使得n个样品点在Fl轴方向 上的离 散程度最大,即Fl的方差最大。变量Fl代表了 原始数据的绝大 部分信息,在研究某问题时,即使不
i ai uia
i 1 p
p
i (ai )(ai )
i 1
p
2 i (a i ) i 1
p
所以, aa 1 ( ai ) 2 =1 ( aU )( aU ) 1aUU a 1aa 1
i 1
而且,当a u1时,有 u1 u1 ( i i i )u1 u1
不直接由其协差阵出发而应该考虑将数据标准化。
原始数据标准化处理后倾向于各个指标的作用在主成分的构成中相等。
数据标准化的过程实际上就是抹杀原始变量离散程度差异的过程,标准化
后各变量方差相等均等于1,而实际上方差也是对数据信息的重要概括形 式,即对原始数据进行标准化后抹杀了一部分重要信息,因此才使得标准 化后各变量在对主成分构成中的作用趋于相等。

主成分分析方法

主成分分析方法

的。
主成分分析的基本原理
为了克服上述困难,就需要进行降维
处理,即用较少的几个综合指标来代
替原来较多的变量指标,而且使这些
较少的综合指标既能尽量多地反映原
来较多指标所反映的信息,同时它们
之间又是彼此独立的。Fra bibliotek主成分分析的基本原理
这些综合指标(即新变量)应如何选
取?
最简单的形式就是取原来变量指标的
主成分分析的基本原理
这样决定的新变量指标z1,
z2,…,zm分别称为原变量指 标x1,x2,…,xp的第一,第 二,…,第m主成分。
主成分分析的基本原理
其中,z1在总方差中占的比例最大,
z2,z3,…,zm的方差依次递减。
在实际问题的分析中,常挑选前几
个最大的主成分,这样既减少了变 量的数目,又抓住了主要矛盾,简 化了变量之间的关系。
但是数据量也太多。为了不使信息丢 失,常常需要进行多波段运算,以致 占用大量的机时和硬盘空间。
遥感图的主成分变换
考虑到多光谱图像中各个波段之间
具有相关性,我们可以通过变换, 设法减少各种信息之间的冗余度, 达到降低数据量,但同时保留主要 信息的目的。
主要的变换方法就是主成分变换。
遥感图的主成分变换
主成分分析的基本原理


在上式中,系数lij由下列原则来决定:
(1) zi与zj(i≠j;i,j = 1,2,…,m )相互无关;

(2) z1是x1,x2,…,xp的一切线性组合中方差 最大者;z2是与z1不相关的x1,x2,…,xp的所 有线性组合中方差最大者;……;zm是与z1, z2,……,zm-1都不相关的x1,x2,…,xp的所 有线性组合中方差最大者。

浅析主成分分析法及案例分析

浅析主成分分析法及案例分析

浅析主成分分析法及案例分析主成分分析的原理:主成分分析的目标是找到一组线性变量,它们能够最大程度地解释原始数据中的变化。

第一个主成分与数据具有最大的差异,而随后的主成分则与第一个主成分正交(即无相关性),并且在特征解释方面具有最大的差异。

主成分是对原始数据的线性组合,其中具有最大方差的成分被称为第一个主成分,次大方差的成分被称为第二个主成分,依此类推。

主成分分析的步骤:1.标准化数据:如果原始数据的变量具有不同的单位和尺度,我们需要对数据进行标准化,以确保每个变量对主成分的贡献是公平的。

2.计算协方差矩阵:协方差矩阵显示了原始数据中变量之间的相关性。

它可以通过计算每个变量之间的协方差来得到。

3.计算特征向量和特征值:通过对协方差矩阵进行特征分解,我们可以得到一组特征向量和特征值。

特征向量表示主成分的方向,而特征值表示每个主成分的解释方差。

4.选择主成分:根据特征值的大小,我们可以选择前k个主成分作为降维后的新变量,其中k是我们希望保留的维度。

这样就可以将原始数据投影到所选的主成分上。

主成分分析的案例分析:假设我们有一份包含多个变量的数据集,例如身高、体重、年龄和收入。

我们希望通过主成分分析来降低数据的维度,以便更好地理解数据集。

首先,我们需要标准化数据,以确保每个变量具有相同的权重。

接下来,我们计算协方差矩阵,得到变量之间的相关性。

然后,我们进行特征值分解,得到一组特征向量和特征值。

通过观察特征值的大小,我们可以选择前几个主成分,例如前两个主成分。

最后,我们将原始数据集投影到选定的主成分上,得到降维后的数据集。

这样,我们可以用两个主成分来表示原始数据集的大部分变异,并且可以更容易地分析数据集中的模式和关系。

总结:通过主成分分析,我们可以将高维度的数据转换为更低维度的数据,从而更好地理解和分析数据集。

它可以帮助我们发现数据中的隐藏模式和关系,提取出对数据变异具有最大贡献的特征。

在实际应用中,主成分分析常用于数据降维、数据可视化、特征选择等领域。

主成分分析的基本思想和应用

主成分分析的基本思想和应用

主成分分析的基本思想和应用主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维方法,通过保留数据集中的主要特征分量,将高维数据映射到低维空间中,从而实现对数据集的简化。

本文将详细介绍主成分分析的基本思想和应用。

一、基本思想主成分分析的基本思想是将数据集中的多个变量通过线性变换转换为几个线性不相关的变量,这几个变量称为主成分。

在转换过程中,主成分能够最大化数据的方差,从而保留数据集中的主要信息。

通过这种方式,我们可以将高维数据降到较低维度,实现对数据集的简化。

二、数学原理主成分分析的数学原理可以概括为以下几个步骤:1.数据标准化:对数据集进行标准化处理,使得每个变量的均值为0,标准差为1。

2.计算协方差矩阵:根据标准化后的数据计算协方差矩阵,表示数据集中各个变量之间的相关性。

3.计算特征值和特征向量:对协方差矩阵进行特征分解,得到一组特征值和对应的特征向量。

4.选择主成分:根据特征值的大小,降序排列特征值,并选择前k个最大的特征值对应的特征向量作为主成分。

5.形成新的数据集:将原始数据集投影到新的空间中,使得新空间中的数据线性无关,从而实现数据降维。

三、应用主成分分析在许多领域都有广泛的应用,下面列举几个典型的例子:1. 图像处理在图像处理领域,主成分分析可以用于图像降维和图像压缩。

通过保留图像中的主要特征分量,可以将高维的图像数据降到较低维度,从而减少数据量,提高计算效率。

此外,主成分分析还可以用于图像去噪和图像增强等任务。

2. 机器学习在机器学习领域,主成分分析常用于特征提取和特征选择。

通过降维,可以减少模型训练过程中的计算复杂度,提高模型的预测性能。

此外,主成分分析还可以用于数据可视化,将高维数据映射到二维或三维空间中,便于观察数据之间的关系。

3. 金融领域在金融领域,主成分分析可以用于风险管理和资产定价。

通过分析金融市场中的多个变量,提取主要的风险因素,可以帮助投资者更好地理解和预测市场走势。

主成分分析

主成分分析

主成分的几何解释
主成分分析用数学模型表达,即对X进行 正交变换,在几何上就是作一个坐标旋 转。因此,主成分分析在二维空间中有 明显的几何意义。 假设共有n个样品,每个样品都测量了两 个指标(X1,X2),它们大致分布在一 个椭圆内:
事实上,散点的分布总有可 能沿着某一个方向略显扩张, 这个方向就把它看作椭圆的 长轴方向。显然,在坐标系 x1Ox2中,单独看这n个点的 分量X1和X2,它们沿着x1方 向和x2方向都具有较大的离 散性,其离散的程度可以分 分 别用的X1方差和X2的方差测 定。如果仅考虑X1或X2中的 任何一个分量,那么包含在 另一分量中的信息将会损失, 因此,直接舍弃某个分量不 是“降维”的有效办法。
Y1 = T1′ X 。
第一主成分的约束条件
第二主成分为, 第二主成分为,满足 T2′T2 = 1 ,且 Cov(Y2 , Y1 ) = Cov(T2′ X, T1′ X) = 0 , 使得 D(Y2 ) = T2′ ΣT2 达到最大的 Y2 = T2′ X 。 一般情形, 主成分为, 一般情形,第 k 主成分为,满足 Tk ′Tk = 1 , 到最大的 Yk = Tk ′ X 。 ,使得 且 Cov(Yk , Yi ) = Cov(Tk ′ X, Ti′ X) = 0 ( i < k ) 使得 D(Yk ) = Tk ′ ΣTk 达 ,
在这p个新变量Y中可以找到m个(m<p) 的变量(y1,y2,…,ym)能解释原始数据 中大部分方差所包含的信息。此时我们 将原始的p个变量X缩减为m个新变量y, 通过m个新变量来传递原始变量的大部 分信息,同时缩减了数据的维数。
如何找到新变量Y及正交阵T
之前说过,这一组新的变量y1,y2,…,yp 要充分反映原变量的信息,且相互独立。 信息能否反映充分,我们用变量的离异 程度来衡量,即标准差或方差。因此寻 找主成分Y的问题转化为,在保证新变量 y1,y2,…,yp相互独立的条件下,求某一 个线性组合T,使D(Y)达到最大。

对主成分分析法运用中十个问题的解析

对主成分分析法运用中十个问题的解析

对主成分分析法运用中十个问题的解析一、本文概述主成分分析法(Principal Component Analysis, PCA)是一种广泛应用于数据降维和特征提取的统计方法。

它通过正交变换将原始数据转换为新的坐标系,使得新坐标系中的各坐标轴(主成分)上的数据互不相关,并且按照方差大小依次排列。

这样,原始数据的大部分信息就可以由少数几个主成分来表示,从而实现数据降维和特征提取的目的。

然而,在应用主成分分析法时,我们常常会遇到一些问题,这些问题可能会影响分析结果的有效性和可靠性。

本文旨在对主成分分析法运用中常见的十个问题进行解析,帮助读者更好地理解和应用这一方法。

通过本文的阐述,读者将能够掌握主成分分析法的核心原理,了解其在应用中可能遇到的问题,以及如何解决这些问题,从而提高数据分析的准确性和效率。

二、数据预处理问题主成分分析(PCA)是一种广泛使用的无监督学习方法,用于从多元数据集中提取关键信息。

然而,在使用PCA之前,对数据进行适当的预处理是至关重要的,因为它可以显著影响PCA的结果。

以下是关于PCA运用中常见的十个数据预处理问题及其解析:缺失值处理:数据集中经常存在缺失值,这些缺失值在进行PCA之前必须进行处理。

一种常见的方法是用均值、中位数或众数来填充缺失值,或者完全删除含有缺失值的行或列。

选择哪种方法取决于数据的性质和分析的目标。

数据标准化:PCA对数据的尺度非常敏感。

因此,通常需要对数据进行标准化处理,即减去均值并除以标准差,以使每个特征的均值为0,标准差为1。

这样,PCA将不再受到特征尺度的影响。

异常值处理:异常值可能会对PCA的结果产生显著影响。

因此,在进行PCA之前,需要对数据进行检查,并决定如何处理异常值。

一种常见的做法是使用IQR(四分位距)来识别并删除或处理异常值。

数据转换:在某些情况下,对数据进行适当的转换可以提高PCA的效果。

例如,对于偏态分布的数据,可以使用对数转换或Box-Cox转换来使其更接近正态分布。

对主成分分析法的认识

对主成分分析法的认识

对主成分分析法的认识一.主成分分析法定义主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。

在实证问题研究中,为了全面、系统地分析问题,我们必须考虑众多影响因素。

这些涉及的因素一般称为指标,在多元统计分析中也称为变量。

因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。

在用统计方法研究多变量问题时,变量太 多会增加计算量和增加分析问题的复杂性,人们希望在进行定量分析的过程中,涉及的变量较少,得到的信息量较多。

二.主成分分析法方法实现。

一个主成分不足以代表原来的n 个变量,因此需要寻找第二个乃至第三、第四主成分,第二个主成分不应该再包含第一个主成分的信息,统计上的描述就是让这两个主成分的协方差为零,几何上就是这两个主成分的方向正交。

具体确定各个主成分的方法如下:设i z 表示第i 个主成分,i = 1,2,…,n ,可设11111221221122221122n n n nm m m mn nz c x c x c x z c x c x c x z c x c x c x =+++⎧⎪=+++⎪⎨⎪⎪=+++⎩ 其中对每一个i ,均有222121i i ip c c c +++=且12(,,,)i i ip c c c 使得1()Var Z 的值达到最大;21222(,,,)p c c c 不仅垂直于11121(,,,)p c c c ,而且使2()Var Z 的值达到最大;31323(,,,)p c c c 同时垂直于11121(,,,)p c c c 和21222(,,,)p c c c ,并使3()Var Z )的值达到最大。

1)对原始数据进行标准化处理表1 原始数据标准化处理样本\指标x1x2…xn1 Y11 Y12 Y1n 2 Y21 Y22 … Y2n 3Y31Y32 … Y3n …… mYm1 Ym2…Ymn标准化为:jjij ij S Y Y X -=第j 个指标的样本均值:()n j Y m Y mi ijj ,,2,111⋅⋅⋅==∑=第j 个指标的样本方差:()()n j Y Y m S mi j ij j,,2,111122⋅⋅⋅=--=∑=经标准化处理后可得标准化矩阵:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=mn m m n n X X X X X X X X X X 212222111211 2)计算相关系数矩阵R计算标准化后的每两个指标间的相关系数,得到相关系数矩阵R ,即n 个指标的协方差矩阵。

主成分分析的概念及基本思想主成分分析PrincipleComponent

主成分分析的概念及基本思想主成分分析PrincipleComponent

1、主成分分析的概念及基本思想主成分分析(Principle Component Analysis, PCA)是最为常用的特征提取方法,被广泛应用到各领域,如图像处理、综合评价、语音识别、故障诊断等。

它通过对原始数据的加工处理,简化问题处理的难度并提高数据信息的信噪比,以改善抗干扰能力。

主成分概念首先由Karl parson在1901年引进,不过当时只是对非随机变量进行讨论,1933年Hotelling将这个概念推广到随机向量。

在实际问题中,研究多指标(变量)问题是经常遇到的,然而在多数情况下,不同指标之间是有一定相关性。

由于指标较多并且指标之间有一定的相关性,势必增加了分析问题的复杂性。

主成分分析就是设法将原来众多具有一定相关性的指标(比如p个指标),重新组合成一组新的相互无关的综合指标来代替原来指标。

通常数学上的处理就是将原来p个指标作线性组合,作为新的综合指标,但是这种线性组合,如果不加限制,则可以有很多,我们应该如何去选取呢?如果将选取的第一个线性组合即第一个综合指标记为F1,自然希望F1尽可能多的反映原来指标的信息,这里的“信息”用什么来表达?最经典的方法就是用F1的方差来表达,即Var(F1)越大,表示F1包含的信息越多。

因此在所有的线性组合中所选取的F1应该是方差最大的,故称F1为第一主成分。

如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,为了有效地反映原来信息,F1已有的信息就不需要再出现在F2中,用数学语言表达就是要求Cov(F1,F2)=0 ,称F2为第二主成分,依此类推可以构造出第三,四,…,第p个主成分。

不难想象这些主成分之间不仅不相关,而且它们的方差依次递减。

因此在实际工作中,就挑选前几个最大主成分,虽然这样做会损失一部分信息,但是由于它使我们抓住了主要矛盾,并从原始数据中进一步提取了某些新的信息。

因而在某些实际问题的研究中得益比损失大,这种既减少了变量的数目又抓住了主要矛盾的做法有利于问题的分析和处理。

关于主成分分析的五个问题

关于主成分分析的五个问题

主成分分析是一种多元分析中最常见的降维和赋权方法。

然而,在实际的应用中,许多人在没有搞清楚方法的意义时就大胆使用,很有点好分析不求甚解的味道。

要知道这样的行为不仅害人而且害己。

所谓害人,就是害了阅读你报告的人;所谓害己,就是你会一而再,再而三的犯错。

第一问:为什么要降维?在实际分析问题时,研究者往往选择很多的指标。

这些指标之间经常会存在一定程度的线性相关,这样就会导致信息的重叠。

直白说就是用多个指标分析一个问题,由于某些指标反映的是问题的同一方面,这样如果把全部指标都同等地纳入模型,就会导致结果失真。

例如衡量学生成绩时,成绩表里有语文、数学、物理、化学。

可是化学老师勤快,一学期测验过好多次,所以这里就有多个化学成绩。

那么计算总分的时候,如果不把几个化学成绩降维成一个化学成绩,就会由于信息的重叠导致结果失真。

第二个问题:线性相关就一定是信息重叠吗?这个不一定吧。

我们举个例子。

比如:要衡量经济发展的影响因素,理论上讲,刺激经济发展的三驾马车是投资、消费和出口,那么我们用于衡量经济发展程度是不是就把这三个指标主成分一下?肯定不是。

正确的做法应该是这三个相加,纵然他们之间可能存在相关,甚至是高度相关,也不能使用主成分。

因为这种相关不是信息的重叠。

所以这里记住一点,线性相关并不意味着信息重叠。

第三个问题:降维一定要用主成分吗?这个答案更容易回答,相信很多人都会说否。

但实际中却一直这么操作。

因为觉得其他降维方法不会呀,而且主成分貌似很高深,用它倍有面子。

其实,实际中使用主成分是因为从主观上没有办法删减变量,如果主观上就能区别出哪些是核心原因,哪些不是,直接将不是的删了就行了,没必要搞个神秘的主成分来把问题复杂化。

要知道主成分使用时,第一步是标准化,这样一来很多指标的意义就模糊了。

这种删减指标的降维方法估计人人都会,可实际中统计专业的达人们却不屑使用。

总觉得用这个方法太没面子了。

所以这里再强调点,使用方法是为了有效解决问题。

主成分分析的基本原理及优点

主成分分析的基本原理及优点

.主成分分析的基本原理及优点主成分分析方法也被称为主分量分析,一个对象往往是多要素的复杂系统,而太多的变量无疑会增加分析问题的难度和复杂性,利用原变量之间的相互关系,用较小的新变量代替原来较多的变量,利用降维的思想,把多指标转化为少数几个综合指标。

在实证问题研究中,为了全面、系统地分析问题,我们必须考虑众多指标,在多元统计分析中也称为变量。

因为每个变量都在不同程度上反映了所研究问题的某些信息,并且变量之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。

在用统计方法研究多变量问题时,变量太多会增加计算量和增加分析问题的复杂性,人们希望在进行定量分析的过程中,涉及的变量较少,得到的信息量较多。

主成分分析是适应这一要求产生的一种数学变换方法,它把给定的一组相关变量通过线性变换转成另一组不相关的变量,这些新的变量按照方差依次递减的顺序排列。

在数学变换中保持变量的总方差不变,使第一变量具有最大的方差,称为第一主成分,第二变量的方差次大,并且和第一变量不相关,称为第二主成分,依次类推。

主成分在方差贡献率中的比例越大,它在综合评价中的作用就越大。

当前k个主成分的方差累积贡献率超过85%,可认为这k个主成分可以反映足够的信息量,可以用来解决实证问题[7]。

主成分分析的目的是通过分析原来较多可观察指标所反映的个体信息,提取出较少的几项综合性指标,它们互不相干,并且能最大限度的反映出原来较多指标所反映的信息,进而用较少的几项综合性指标来刻画个体。

因子分析法:在各个领域的科学研究中往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。

多变量大样本无疑会为科学研究提供丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在大多数情况下,许多变量之间可能存在相关性而增加了问题分析的复杂性。

由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息,而综合指标之间彼此不相关,即各指标代表的信息不重叠。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识。

本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会。

主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换。

PCA方法最著名的应用应该是在人脸识别中特征提取及数据维,我们知道输入200*200大小的人脸图像,单单提取它的灰度值作为原始特征,则这个原始特征将达到40000维,这给后面分类器的处理将带来极大的难度。

著名的人脸识别Eigenface算法就是采用PCA算法,用一个低维子空间描述人脸图像,同时用保存了识别所需要的信息。

下面先介绍下PCA算法的本质K-L 变换。

1、K-L变换(卡洛南-洛伊(Karhunen-Loeve)变换):最优正交变换∙一种常用的特征提取方法;∙最小均方误差意义下的最优正交变换;∙在消除模式特征之间的相关性、突出差异性方面有最优的效果。

离散K-L变换:对向量x(可以想象成M维=width*height 的人脸图像原始特征)用确定的完备正交归一向量系u j展开:这个公式由来我想应该是任一n维欧式空间V均存在正交基,利用施密特正交化过程即可构建这个正交基。

现在我们希望用d个有限项来估计向量x,公式如下:计算该估计的均方误差如下:要使用均方误差最小,我们采用Langrange乘子法进行求解:因此,当满足上式时,取得最小值。

即相关矩阵R的d个特征向量(对应d个特征值从大到小排列)为基向量来展开向量x时,其均方误差最小,为:总结下,K-L变换的方法:对相关矩阵R的特征值由大到小进行排队,则均方误差最小的x近似于:矩阵形式:上式两边乘以U的转置,得因此,我们可以看出相关矩阵R是一个实对称矩阵(或者严谨的讲叫正规矩阵),正规矩阵有什么特点呢??学过《矩阵分析》的朋友应该知道:若矩阵R是一个实对称矩阵,则必定存在正交矩阵U,使得R相似于对角形矩阵,即:因此,我们可以得出这样一个结论:降维后的系数向量y的相关矩阵是对角矩阵,即通过K-L变换消除原有向量x 的各分量间的相关性,从而有可能去掉那些带有较少信息的分量以达到降低特征维数的目的。

2、主成分分析(PCA)主成分分析(PCA)的原理就是将一个高维向量x,通过一个特殊的特征向量矩阵U,投影到一个低维的向量空间中,表征为一个低维向量y,并且仅仅损失了一些次要信息。

也就是说,通过低维表征的向量和特征向量矩阵,可以基本重构出所对应的原始高维向量。

在人脸识别中,特征向量矩阵U称为特征脸(eigenface)空间,因此其中的特征向量u i进行量化后可以看出人脸轮廓,在下面的实验中可以看出。

以人脸识别为例,说明下PCA的应用。

设有N个人脸训练样本,每个样本由其像素灰度值组成一个向量x i,则样本图像的像素点数即为x i的维数,M=width*height ,由向量构成的训练样本集为。

该样本集的平均向量为:平均向量又叫平均脸。

样本集的协方差矩阵为:求出协方差矩阵的特征向量u i和对应的特征值,这些特征向量组成的矩阵U就是人脸空间的正交基底,用它们的线性组合可以重构出样本中任意的人脸图像,(如果有朋友不太理解这句话的意思,请看下面的总结2。

)并且图像信息集中在特征值大的特征向量中,即使丢弃特征值小的向量也不会影响图像质量。

将协方差矩阵的特征值按大到小排序:。

由大于的对应的特征向量构成主成分,主成分构成的变换矩阵为:这样每一幅人脸图像都可以投影到构成的特征脸子空间中,U的维数为M×d。

有了这样一个降维的子空间,任何一幅人脸图像都可以向其作投影,即并获得一组坐标系数,即低维向量y,维数d×1,有朋友可能不太理解,第一部分讲K-L变换的时候,求的是相关矩阵的特征向量和特征值,这里怎么求的是协方差矩阵?其实协方差矩阵也是:,可以看出其实用代替x就成了相关矩阵R,相当于原始样本向量都减去个平均向量,实质上还是一样的,协方差矩阵也是实对称矩阵。

总结下:1、在人脸识别过程中,对输入的一个测试样本x,求出它与平均脸的偏差,则在特征脸空间U的投影,可以表示为系数向量y:U的维数为M×d,的维数为M×1,y的维数d×1。

若M为200*200=40000维,取200个主成分,即200个特征向量,则最后投影的系数向量y维数降维200维。

2、根据1中的式子,可以得出:这里的x就是根据投影系数向量y重构出的人脸图像,丢失了部分图像信息,运行环境为:WindowsXP+QT+OpenCV2.3.1。

部分函数说明如下:Mat Mat::reshape(int cn, int rows=0) const该函数是改变Mat的尺寸,即保持尺寸大小=行数*列数*通道数不变。

其中第一个参数为变换后Mat的通道数,如果为0,代表变换前后通道数不变。

第二个参数为变换后Mat的行数,如果为0也是代表变换前后通道数不变。

但是该函数本身不复制数据。

void Mat::convertTo(OutputArray m, int rtype, double alpha=1, double beta=0 ) const该函数其实是对原Mat的每一个值做一个线性变换。

参数1为目的矩阵,参数2为目d矩阵的类型,参数3和4变换的系数,看完下面的公式就明白了:PCA::PCA(InputArray data, InputArray mean, int flags,int maxComponents=0)该构造函数的第一个参数为要进行PCA变换的输入Mat;参数2为该Mat的均值向量;参数3为输入矩阵数据的存储方式,如果其值为CV_PCA_DATA_AS_ROW则说明输入Mat的每一行代表一个样本,同理当其值为CV_PCA_DATA_AS_COL时,代表输入矩阵的每一列为一个样本;最后一个参数为该PCA计算时保留的最大主成分的个数。

如果是缺省值,则表示所有的成分都保留。

Mat PCA::project(InputArray vec) const该函数的作用是将输入数据vec(该数据是用来提取PCA特征的原始数据)投影到PCA主成分空间中去,返回每一个样本主成分特征组成的矩阵。

因为经过PCA处理后,原始数据的维数降低了,因此原始数据集中的每一个样本的维数都变了,由改变后的样本集就组成了本函数的返回值。

下面由一个图说明:Mat PCA::backProject(InputArray vec) const一般调用backProject()函数前需调用project()函数,因为backProject()函数的参数vec就是经过PCA投影降维过后的矩阵dst。

因此backProject()函数的作用就是用vec来重构原始数据集(关于该函数的本质就是上面总结2的公式)。

由一个图说明如下:另外PCA类中还有几个成员变量,mean,eigenvectors, eigenvalues等分别对应着原始数据的均值,协方差矩阵的特征值和特征向量。

实验结果:实验是用4个人人脸图像,其中每个人分别有5张,共计20张人脸图片。

用这些图片组成原始数据集来提取他们的PCA主特征脸。

该20张图片如下所示:软件运行结果:实验中保留4个特征向量作为人脸图像的正交基底,运行结果如下:其中第一行的3张人脸分别为20张原图中的3张,这里取的是3个不同人的。

第二行中显示的3张人脸重构的人脸图像,可以看出由于只取了4个特征向量作为正交基底,因此重构后的人脸图像一些细节会丢失。

如果增加保留的特征向量个数,则能较好的重构出人脸图像。

第3行的人脸图为取的原始数据协方差矩阵特征向量的最前面3个,因此这3个人脸为最具代表人脸特征的3个PCA人脸特征。

实验主要部分代码:pcaface.h1#ifndef PCAFACE_H2#define PCAFACE_H3 #include <opencv2/core/core.hpp>4 #include <opencv2/highgui/highgui.hpp>5 #include <opencv2/imgproc/imgproc.hpp>67using namespace cv;89 #include <QDialog>1011namespace Ui {12class PCAFace;13}1415class PCAFace : public QDialog16{17 Q_OBJECT1819public:20explicit PCAFace(QWidget *parent = 0);21 ~PCAFace();2223 Mat normalize(const Mat& src);242526protected:27void changeEvent(QEvent *e);2829private slots:30void on_startButton_clicked();3132void on_closeButton_clicked();3334private:35 Ui::PCAFace *ui;36 Mat src_face1, src_face2, src_face3;37 Mat project_face1, project_face2, project_face3;38 Mat dst;39 Mat pca_face1, pca_face2, pca_face3;40 vector<Mat> src;41int total;42};4344#endif// PCAFACE_Hpcaface.cpp1 #include "pcaface.h"2 #include "ui_pcaface.h"3 #include <QString>4 #include <iostream>5 #include <stdio.h>67using namespace std;89 PCAFace::PCAFace(QWidget *parent) :10 QDialog(parent),11 ui(new Ui::PCAFace)12{13 ui->setupUi(this);14 src_face1 = imread("./images/1.pgm", 0);1516//下面的代码为设置图片显示区域自适应图片的大小17 ui->face1Browser->setFixedHeight(src_face1.rows+1);18 ui->face1Browser->setFixedWidth(src_face1.cols+1);19 ui->face2Browser->setFixedHeight(src_face1.rows+1);20 ui->face2Browser->setFixedWidth(src_face1.cols+1);21 ui->face3Browser->setFixedHeight(src_face1.rows+1);22 ui->face3Browser->setFixedWidth(src_face1.cols+1);2324 ui->face4Browser->setFixedHeight(src_face1.rows+1);25 ui->face4Browser->setFixedWidth(src_face1.cols+1);26 ui->face5Browser->setFixedHeight(src_face1.rows+1);27 ui->face5Browser->setFixedWidth(src_face1.cols+1);28 ui->face6Browser->setFixedHeight(src_face1.rows+1);29 ui->face6Browser->setFixedWidth(src_face1.cols+1);3031 ui->face7Browser->setFixedHeight(src_face1.rows+1);32 ui->face7Browser->setFixedWidth(src_face1.cols+1);33 ui->face8Browser->setFixedHeight(src_face1.rows+1);34 ui->face8Browser->setFixedWidth(src_face1.cols+1);35 ui->face9Browser->setFixedHeight(src_face1.rows+1);36 ui->face9Browser->setFixedWidth(src_face1.cols+1);3738for(int i = 1; i <= 15; i++)39 {40 stringstream ss;41string num;42 ss<<i; //将整数i读入字符串流43 ss>>num; //将字符串流中的数据传入num,这2句代码即把数字转换成字符44string image_name = ("./images/" + num + ".pgm");//需要读取的图片全名45 src.push_back(imread(image_name, 0));46 }47 total= src[0].rows*src[0].cols;48}4950 PCAFace::~PCAFace()51{52 delete ui;53}5455void PCAFace::changeEvent(QEvent *e)56{57 QDialog::changeEvent(e);58switch (e->type()) {59case QEvent::LanguageChange:60 ui->retranslateUi(this);61break;62default:63break;64 }65}6667//将Mat内的内容归一化到0~255,归一化后的类型为但通道整型68 Mat PCAFace::normalize(const Mat& src) {69 Mat srcnorm;70 cv::normalize(src, srcnorm, 0, 255, NORM_MINMAX, CV_8UC1);71return srcnorm;72}737475void PCAFace::on_startButton_clicked()76{77//先显示3张原图78 ui->face1Browser->append("<img src=./images/1.pgm>");79 ui->face2Browser->append("<img src=./images/7.pgm>");80 ui->face3Browser->append("<img src=./images/14.pgm>");8182//mat数组用来存放读取进来的所有图片的数据,其中mat的每一列对应1张图片,该实现在下面的for函数中83 Mat mat(total, src.size(), CV_32FC1);84for(int i = 0; i < src.size(); i++)85 {86 Mat col_tmp = mat.col(i);87 src[i].reshape(1, total).col(0).convertTo(col_tmp, CV_32FC1,1/255.);88 }89int number_principal_compent = 4; //保留最大的主成分数9091//构造pca数据结构92 PCA pca(mat, Mat(), CV_PCA_DATA_AS_COL, number_principal_compent);939495//pca.eigenvectors中的每一行代表输入数据协方差矩阵一个特征向量,且是按照该协方差矩阵的特征值进行排序的96 pca_face1 = normalize(pca.eigenvectors.row(0)).reshape(1, src[0].rows); //第一个主成分脸97 imwrite("./result/pca_face1.jpg", pca_face1);//显示主成分特征脸198 ui->face7Browser->append("<img src=./result/pca_face1.jpg>");99100 pca_face2 = normalize(pca.eigenvectors.row(1)).reshape(1, src[0].rows); //第二个主成分脸101 imwrite("./result/pca_face2.jpg", pca_face2);//显示主成分特征脸2102 ui->face8Browser->append("<img src=./result/pca_face2.jpg>");103104 pca_face3 = normalize(pca.eigenvectors.row(2)).reshape(1, src[0].rows); //第三个主成分脸105 imwrite("./result/pca_face3.jpg", pca_face3);//显示主成分特征脸3106 ui->face9Browser->append("<img src=./result/pca_face3.jpg>");107108//将原始数据通过PCA方向投影,即通过特征向量的前面几个作用后的数据,因此这里的dst的尺寸变小了109 dst = pca.project(mat);110111//通过方向投影重构原始人脸图像112 project_face1 = normalize(pca.backProject(dst).col(1)).reshape(1,src[0].rows);113 imwrite("./result/project_face1.jpg", project_face1);114 ui->face4Browser->append("<img src=./result/project_face1.jpg>");115116 project_face2 = normalize(pca.backProject(dst).col(7)).reshape(1,src[0].rows);117 imwrite("./result/project_face2.jpg", project_face2);118 ui->face5Browser->append("<img src=./result/project_face2.jpg>");119120 project_face3 = normalize(pca.backProject(dst).col(14)).reshape(1,src[0].rows);121 imwrite("./result/project_face3.jpg", project_face3);122 ui->face6Browser->append("<img src=./result/project_face3.jpg>"); 123}124125void PCAFace::on_closeButton_clicked()126{127 close();128 }实验的工程代码可以在上面的那个链接下载,环境搭建可以参考我之前写个一个文章。

相关文档
最新文档