主成分分析 ( Principal Component Analysis , PCA )

合集下载

PCA主成分分析(Principalcomponentsanalysis)

PCA主成分分析(Principalcomponentsanalysis)

PCA主成分分析(Principalcomponentsanalysis)问题1、⽐如拿到⼀个汽车的样本,⾥⾯既有以“千⽶/每⼩时”度量的最⼤速度特征,也有“英⾥/⼩时”的最⼤速度特征,显然这两个特征有⼀个多余。

2、拿到⼀个数学系的本科⽣期末考试成绩单,⾥⾯有三列,⼀列是对数学的兴趣程度,⼀列是复习时间,还有⼀列是考试成绩。

我们知道要学好数学,需要有浓厚的兴趣,所以第⼆项与第⼀项强相关,第三项和第⼆项也是强相关。

那是不是可以合并第⼀项和第⼆项呢?3、拿到⼀个样本,特征⾮常多,⽽样例特别少,这样⽤回归去直接拟合⾮常困难,容易过度拟合。

⽐如北京的房价:假设房⼦的特征是(⼤⼩、位置、朝向、是否学区房、建造年代、是否⼆⼿、层数、所在层数),搞了这么多特征,结果只有不到⼗个房⼦的样例。

要拟合房⼦特征‐>房价的这么多特征,就会造成过度拟合。

4、这个与第⼆个有点类似,假设在 IR 中我们建⽴的⽂档‐词项矩阵中,有两个词项为 “learn”和“study” ,在传统的向量空间模型中,认为两者独⽴。

然⽽从语义的⾓度来讲,两者是相似的,⽽且两者出现频率也类似,是不是可以合成为⼀个特征呢?5、在信号传输过程中,由于信道不是理想的,信道另⼀端收到的信号会有噪⾳扰动,那么怎么滤去这些噪⾳呢?剔除和类标签⽆关的特征,⽐如“学⽣的名字”就和他的“成绩”⽆关,使⽤的是互信息的⽅法。

剔除和类标签有关的,但⾥⾯存在噪声或者冗余的特征。

在这种情况下,需要⼀种特征降维的⽅法来减少特征数,减少噪⾳和冗余,减少过度拟合的可能性。

备注:互信息——指两个事件集合之间的相关性。

两个事件X和Y的互信息定义为:I(X,Y) = H(X) + H(Y) - H(X,Y) 其中 H(X,Y) 是联合熵(Joint Entropy),其定义为:H(X,Y) = - ∑ p(x,y)logp(x,y) 特征降维——去掉可分性不强和冗余的特征PCA 的思想 将 n维特征映射到 k 维上(k<n),这 k 维是全新的正交特征。

主成分分析法

主成分分析法

主成分分析法什么事主成分分析法:主成分分析(principal components analysis , PCA 又称:主分量分析,主成分回归分析法主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。

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

它是一个线性变换。

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

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

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

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

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

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

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

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

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

主成分分析正是适应这一要求产生的,是解决这类题的理想工具同样,在科普效果评估的过程中也存在着这样的问题。

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

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

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

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

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

什么是主成分分析

什么是主成分分析

主成分分析(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年前后完成。

主成分分析 因子分析

主成分分析 因子分析

主成分分析 因子分析主成分分析和因子分析是很重要的统计分析方法。

两者都是用于对一组同质或异质的变量进行数据探索研究的技术,它们都可以提供有价值的结论,增强数据有意义的理解。

1. 主成分分析主成分分析(Principal Component Analysis,简称PCA)是从一大组变量中提取具有代表性的正交变量,组成一个新的变量集合。

PCA通过减少变量数量,减少多变量间相关性带来的重复性,从而提升数据分析的准确性和有效性。

注意减少变量数量不是减少观测样本数量,而是把原先高维度的变量合并成一组较低维度的变量。

PCA算法的基本思想是:它分析原始数据集中的变异,并从中提取主要的变量,然后将这些变量的组合(叫做主成分)用推断法来重新构建原来的数据集,最后能够说明原始变量的结构,对被研究的变量结构有系统的解释。

2. 因子分析因子分析(Factor Analysis,简称FA)是一种用来探索相关变量之间潜在关系的统计分析方法。

这一方法注重的是把一系列的变量映射到一个尽可能少的多个隐变量的过程。

其中,这些隐变量就是“因子”,它们是原来变量的代表性变量,且变量之间有因果或相关的结构关系。

FA的基本思想是,将一组变量之间的复杂的相关关系映射到一组基本关系,即因子上。

然后,当每个变量映射到一个或几个因子上后,只需要解释因子就能够完全解释自变量变化的原因。

常用的因子模型有因子旋转、因子分层、因子波动等。

相比较,主成分分析和因子分析都有各自的专业领域,它们都有不同的数据需求和分析方法,在不同的数据处理中也表现出各自的优势和劣势。

主成分分析处理比较复杂的数据,可以根据原始变量的关系构建视图,但不涉及因果关系的推断;而因子分析可以推导出被研究的变量之间的关系,进而探索或验证其原因。

主成分分析(principal component analysis)

主成分分析(principal component analysis)

一、主成分分析的思想主成分分析是数据处理中常用的降维方法。

我们需要处理的数据往往是高维数据,把它看成是由某个高维分布产生。

高维分布的不同维之间可能具有较强的相关性,这也就为数据降维提供了可能。

为了叙述清楚主成分分析的思想,我们通过二维数据进行叙述,即数据是由随机向量 (X_1,X_2) 产生,并假设X_1=X_2 。

通过该分布得到的样本点如图下所示:如果我们把每个数据点用 (x_1,x_2) 表示,那么,每个数据是二维的。

实际上,容易发现,我们只需要将坐标系进行旋转,旋转到红色坐标系位置,此时,每个数据点在新坐标系下的表示形式为为 (x_1^{'},0) ,由于每个数据点的第二维坐标都是 0 ,所以每个数据点只需要用一个数表示就行了,这样就把数据的维数从二维降到了一维。

接下来考虑不是完全线性关系,但是具有强相关性的情况,如下图所示:在这种情况下,我们不可能通过坐标系的平移与旋转,使所有点都落在一根轴上,即不可能精确地把数据用一维表示。

但是注意到 (X_1,X_2) 仍然有强相关性,我们仍然将坐标轴旋转到红色位置,可以看出,将数据在 x_1^{'} 上的投影近似代表原数据,几乎可以完全反映出原数据的分布。

直观看,如果要将数据投影到某根轴,并用投影来表示原数据,将数据压缩成一维,那么投影到 x_1^{'} 是最好的选择。

因为投影到这跟轴,相比于投影到其他轴,对原数据保留的信息量最多,损失最小。

如何衡量保留的信息量呢?在主成分分析中,我们用数据在该轴的投影的方差大小来衡量,即投影后方差越大(即投影点越分散),我们认为投影到该轴信息保留量最多。

从这种观点看,投影到 x_1^{'} 确实是最好的选择,因为投影到这根轴,可使得投影点最分散。

我们将数据的中心平移到原点(即新坐标轴的原点在数据的中心位置),为了消除单位的影响,我们将数据的方差归一化。

进一步考虑如下数据分布:根据上述,如果要将数据压缩为一维的,那么应该选择 F_1 轴进行投影,如果用该投影表示原数据的损失过大,我们可以再选择第二根轴进行投影,第二根轴应该与 F_1 垂直(保证在两根轴上的投影是不相关的)并且使得数据在该轴上投影方差最大,即图中的 F_2 轴(如果是二维情况,第一根轴确定后,第二根轴就确定了。

什么是主成分分析

什么是主成分分析

什么是主成分分析
主成分分析(Principal Component Analysis,PCA)是一种常用的统计分析方法,主要用于数据降维和特征提取。

通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,这些线性不相关的变量称为主成分。

每个主成分都是原始变量的线性组合,且主成分按照其反映的原始变量的方差大小依次排序。

在实际应用中,主成分分析首先对数据进行标准化处理,然后计算出变量间的协方差矩阵,通过特征值分解或者奇异值分解得到特征值和特征向量。

选取前几个特征值最大的主成分,这些主成分能够解释大部分的方差,从而实现对高维数据的降维处理。

主成分分析有助于简化复杂问题的分析,揭示事物的本质,被广泛应用于多个领域,如经济学、生物学、医学、心理学等。

主成分分析法

主成分分析法

4,主成分分析法主成分分析(Principal Component Analysis,PCA),是一种统计方法。

通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

主成分分析首先是由K.皮尔森(Karl Pearson)对非随机变量引入的,尔后H.霍特林将此方法推广到随机向量的情形。

信息的大小通常用离差平方和或方差来衡量。

②主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。

因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则维数降低的“利”可能抵不过主成分含义不如原始变量清楚的“弊”。

③当主成分的因子负荷的符号有正有负时,综合评价函数意义就不明确。

4.4主成分分析法的运用叶晓枫,王志良,【2】在介绍主成分分析方法的基本思想及计算方法基础上,对水资源调配评价指标进行了降维计算. 结果显示筛选出的指标对原指标具有较好的代表性,简化了水资源评价问题的难度。

傅湘,纪昌明【3】,针对模糊综合评判法在综合评价中存在的主观随意性问题,提出采用主成分分析法进行区域水资源承载能力综合评价。

对各区域的灌溉率、水资源利用率、水资源开发程度、供水模数、需水模数、人均供水量和生态环境用水率达七个主要因索进行了分析;根据主成分分析法的原理,运用少数几个新的综合指标对原来的七个指标所包含的信息进行最佳综合与简化,研究其在各区域水资源开发利用过程中的不同贡献及综合效应。

周莨棋,徐向阳等【4】,针对传统主成分分析法用于水资源综合评价中存在一些问题,包括指标评价中的“线性”问题、无法体现评价指标主观重要性以及评价范围无法确定。

进行了改进,采用改进的极差正规方法对数据进行规格化,用规格化后的数据加入了主观重要性权进行协方差计算,对协方差特征向量采用正负理想点进行检验。

陈腊娇,冯利华等【5】,将主成分分析方法引入到水资源承载力研究中,并以浙江省为例,在现有资料的基础上,利用主成分分析的方法,定量分析影响水资源承载力变化的最主要的驱动因子。

主成分分析法简介

主成分分析法简介

主成份分析法(Principal Component Analysis,PCA )也称主分量分析或矩阵数据分析,是统计分析常用的一种重要的方法,在系统评价、质量管理和发展对策等许多方面都有应用。

它利用数理统计方法找出系统中的主要因素和各因素之间的相互关系,由于系统地相互关系性,当出现异常情况时或对系统进行分析时,抓住几个主要参数的状态,就能把握系统的全局,这几个参数放映了问题的综合的指标,也就是系统的主要因素。

主成分分析法是一种把系统的多个变量转化为较少的几个综合指标的统计分析方法,因而可将多变量的高维空间转化为低维的综合指标问题,能放映系统信息量最大的综合指标为第一主成分,其次为第二主成分。

主成分的个数一般按需放映的全部信息的百分比来决定,几个主成分之间是互不相关的。

主成分分析法的主要作用是:发现隐含于系统内部的结构,找出存在于原有各变量之间的内在联系,并简化变量;对变量样本进行分类,根据指标的得分值在指标轴空间进行分类处理。

主成分分析是数学上对数据降维的一种方法。

其基本思想是设法将原来众多的具有一定相关性的指标X 1,X 2,…,X P (比如p 个指标),重新组合成一组较少个数的互不相关的综合指标F m 来代替原来指标。

那么综合指标应该如何去提取,使其既能最大程度的反映原变量X P 所代表的信息,又能保证新指标之间保持相互无关(信息不重叠)。

设F 1表示原变量的第一个线性组合所形成的主成分指标,即11112121...p p F a X a X a X =+++,由数学知识可知,每一个主成分所提取的信息量可用其方差来度量,其方差Var(F 1)越大,表示F 1包含的信息越多。

常常希望第一主成分F 1所含的信息量最大,因此在所有的线性组合中选取的F 11应该是X 1,X 2,…,X P 的所有线性组合中方差最大的,故称F 1为第一主成分。

如果第一主成分不足以代表原来p 个指标的信息,再考虑选取第二个主成分指标F 2,为有效地反映原信息,F 1已有的信息就不需要再出现在F 2中,即F 2与F 1要保持独立、不相关,用数学语言表达就是其协方差Cov(F 1, F 2)=0,所以F 2是与F 1不相关的X 1,X 2,…,X P 的所有线性组合中方差最大的,故称F 2为第二主成分,依此类推构造出的F 1、F 2、……、F m 为原变量指标X 1,X 2,…,X P 第一、第二、……、第m 个主成分。

主成分分析(principalc...

主成分分析(principalc...

主成分分析(principal components analysis,PCA)又称:主分量分析,主成分回归分析法什么是主成分分析法主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。

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

它是一个线性变换。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

主成分分析法原理

主成分分析法原理

主成分分析法原理主成分分析(Principalcomponentanalysis,简称PCA)是一种实用性强的数据分析方法,它可以从大量复杂的数据中提取出显著的主要成分,从而使得数据的分析变得简单易行。

PCA的基本原理是,从原始的数据中找到一组投影矩阵,使得投影后的数据表现出最大的方差,并尽可能降低投影后数据之间的关联性,从而获得最低的维数。

首先,在讨论PCA之前,我们先要弄清楚什么是降维。

降维是指在保持数据重要性的情况下,将数据从高维空间转换到低维空间的一种过程。

它可以有效降低数据的复杂性,从而使数据分析变得更加简单容易。

PCA就是一种使用降维的数据分析方法,它的工作原理是尽可能保留原始数据中最具有代表性的特征,同时尽可能减少数据之间的冗余。

PCA的过程可以归结为几个步骤。

首先,需要对原始数据进行中心化处理,即减去均值,使得数据的均值变为0,以便下一步计算协方差矩阵。

然后,需要计算数据矩阵的协方差矩阵,即每个变量与其他变量之间的相关性,从而得出每个变量之间的关系。

接下来,需要计算协方差矩阵的特征值和特征向量,只需要保留其中有代表性的前几个特征值,即保留最显著的主成分,同时丢弃具有较低方差的特征值。

最后,将原始数据投影到主成分的基底上,从而获得PCA的结果。

PCA的应用非常广泛,在实际的数据分析中,它可以有效缩小数据量,提取出最重要的特征,并基于降维后的特征进行预测分析。

例如,在预测市场行为中,可以对原始数据使用PCA,从而减少数据的维度,并提取出最显著的特征,从而提高预测的准确性。

另外,在人脸识别中,可以使用PCA,将原始的复杂的图像信息减少到一定数量的主要特征,从而提高识别的准确性。

总之,PCA不仅可以有效的降低数据的维度,提取出最重要的特征,还可以显著提高数据分析和预测的准确性,是实际工作中必不可少的一种数据处理方法。

主成分分析( PCA)

主成分分析( PCA)

主成分分析(PCA)主成分分析(Principal Component Analysis, PCA)是将原本鉴定到的所有代谢物重新线性组合,形成一组新的综合变量,同时根据所分析的问题从中选取2-3个综合变量,使它们尽可能多地反映原有变量的信息,从而达到降维的目的。

同时,对代谢物进行主成分分析还能从总体上反应组间和组内的变异度。

总体样本PCA 分析采用PCA 的方法观察所有各组样本之间的总体分布趋势,找出可能存在的离散样本,综合考虑各种因素(样品数,样品珍贵程度,离散程度)决定离散点的除去与否。

所有样本PCA 得分图见下图(对样本进行两两分析的PCA得分图)。

图1 主成分分析得分图百泰派克采用XCMS 软件对代谢物离子峰进行提取。

将25 个实验样本和QC 样本提取得到的峰,归一化后进行PCA 分析,如图所示QC 样本(黑色)紧密聚集在一起,表明本次试验的仪器分析系统稳定性较好,试验数据稳定可靠,在试验中获得的代谢谱差异能反映样本间自身的生物学差异。

图2 总样品的PCA得分图How to order?关于百泰派克北京百泰派克生物科技有限公司(Beijing Bio-Tech Pack Technology Company Ltd. 简称BTP)成立于2015年,是国家级高新技术企业,业务范围主要围绕蛋白和小分子代谢物检测两大板块,从事蛋白质和小分子代谢物的理化性质分析及结构解析等相关技术服务,为客户提供高性价比、高效率的技术服务。

深耕蛋白鉴定、定量蛋白组(iTRAQ/TMT、label free、DIA/SWATCH)、PRM靶蛋白定量、蛋白和抗体测序、蛋白修饰(二硫键、糖基化、磷酸化、乙酰化、泛素化等)、靶向和非靶向代谢物检测。

百泰派克生物科技检测平台包括:检测分析平台、蛋白质组学分析平台、代谢组学分析平台、蛋白质从头测序平台、生物制药分析平台和流式细胞多因子检测平台。

公司拥有独立的质谱实验室、色谱实验室、细胞培养室和免疫学实验室,以及高分辨率质谱仪和高效液相色谱。

主成分分析法的原理和步骤

主成分分析法的原理和步骤

主成分分析法的原理和步骤
主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,主要用于数据预处理和特征提取。

其原理是通过线性变换将原始数据转换为具有特定性质的新坐标系,使得转换后的坐标系上数据的方差最大化。

主成分分析的步骤如下:
1. 标准化数据:对原始数据进行标准化处理,即对每个特征进行零均值化。

这是为了消除不同量纲的影响。

2. 计算协方差矩阵:计算标准化后的数据的协方差矩阵。

协方差矩阵描述了不同特征之间的相关性。

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

特征值表示新坐标系上每个特征的方差,而特征向量则表示原始特征在新坐标系上的投影。

4. 选择主成分:按照特征值的大小排序,选择前k个特征值对应的特征向量作为主成分。

选择的主成分应该能够解释数据中大部分的方差。

5. 构造新的特征空间:将选择的主成分组合起来,构成新的特征空间。

这些主成分通常被视为数据的“重要”特征,用于表示原始数据。

通过主成分分析,可以将原始数据降维到低维度的子空间上,并且保留了原始数据中的信息。

这样做的好处是可以减少数据维度,简化模型,降低计算复杂度。

同时,通过选择合适的主成分,还可以实现数据的压缩和特征的提取。

主成分分析法-EmpowerStats

主成分分析法-EmpowerStats

主成分分析法主成分分析(Principal Component Analysis,PCA)是将多个变量通过线性变换以选出较少个数重要变量,并尽可能多地反映原来变量信息的一种多元统计分析方法,又称主分量分析。

也是数学上处理降维的一种方法。

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

通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。

最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Var(F1)越大,表示F1包含的信息越多。

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

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

主要作用1. 主成分分析能降低所研究的数据空间的维数。

即用研究m维的Y空间代替p维的X空间(m<p),而低维的Y空间代替高维的X空间所损失的信息很少。

即使只有一个主成分Yl(即 m =1)时,这个Yl仍是使用全部X变量(p个)得到的,例如要计算Yl的均值也得使用全部x 的均值。

在所选的前m个主成分中,如果某个Xi的系数全部近似于零的话,就可以把这个Xi删除,这也是一种删除多余变量的方法。

2. 有时可通过因子负荷aij的结论,弄清X变量间的某些关系。

3. 多维数据的一种图形表示方法。

当维数大于3时不能画出几何图形,多元统计研究的问题大都多于3个变量。

要把研究的问题用图形表示出来是不可能的。

然而,经过主成分分析后,我们可以选取前两个主成分或其中某两个主成分,根据主成分的得分,画出n个样品在二维平面上的分布,由图形可直观地看出各样品在主分量中的地位,进而还可以对样本进行分类处理,可以由图形发现远离大多数样本点的离群点。

主成分分析PrincipleComponentAnalysis

主成分分析PrincipleComponentAnalysis

主成分分析PrincipleComponentAnalysis
⼀、主要思想
利⽤正交变换把可能线性相关变量表⽰的观测数据,转换为由少数⼏个线性⽆关变量(主成分)表⽰的数据。

(重构原始特征空间;线性降维)
要尽可能保留原始数据中的信息,两个思路:最⼤投影⽅差、最⼩投影距离。

完全的⽆监督,只需要通过⽅差来衡量信息量(但也是⼀种局限性)。

各个主成分正交,降维后不同维度特征之间不再有相关性(但失去维度的具体含义)。

⼆、数据矩阵的SVD分解
对样本⽅差矩阵的特征值分解等价于对数据矩阵的SVD分解
也就是说,要⽤ PCA 降维直接对 HX 做 SVD 分解就⾏了
三、主坐标分析
主成分分析是先找到各主成分⽅向,再求原数据在主成分⽅向的坐标(对 P x P 维的样本⽅差矩阵 S = X T X 特征值分解)
主坐标分析是直接求原数据在主成分⽅向的坐标(对 N x N 维的 T = XX T特征值分解,其特征向量就是数据在对应主成分⽅向上的坐标)
四、概率PCA
重构的变量 Z 看作隐变量,从概率⾓度理解PCA。

(属于线性⾼斯模型)
先把 Z,X | Z,X 的分布搞清楚了(假设 Z 和ε服从⾼斯,令X = WZ + µ + ε,则X|Z,X 都服从⾼斯分布,通过 MLE 或者 EM 估计参数 W,µ,σ)。

降维就是求P(Z|X),在给定X的情况下找到概率最⼤的 Z 作为降维的结果。

主成分分析 ( Principal Component Analysis , PCA )

主成分分析 ( Principal Component Analysis , PCA )

主成分分析(Principal Component Analysis ,PCA )主成分分析(Principal Component Analysis ,PCA )是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。

计算主成分的目的是将高维数据投影到较低维空间。

给定n 个变量的m 个观察值,形成一个n ′m 的数据矩阵,n 通常比较大。

对于一个由多个变量描述的复杂事物,人们难以认识,那么是否可以抓住事物主要方面进行重点分析呢?如果事物的主要方面刚好体现在几个主要变量上,我们只需要将这几个变量分离出来,进行详细分析。

但是,在一般情况下,并不能直接找出这样的关键变量。

这时我们可以用原有变量的线性组合来表示事物的主要方面,PCA 就是这样一种分析方法。

PCA 主要用于数据降维,对于一系列例子的特征组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的例子中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。

所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是“精品”,而且计算量也变小了。

对于一个k维的特征来说,相当于它的每一维特征与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个特征在某些维上方差大,而在某些维上方差很小。

例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。

principal component analysis

principal component analysis

principal component analysis
主成分分析(Principal Component Analysis,简称PCA)是数据分析的基础方法,它常用于处理高维数据,通过减少变量的数量,简化数据,使分析变得更加容易。

在互联网认知和机器学习中,PCA非常重要,广泛应用于让模式识别更好地运行。

主成分分析也被称为数据压缩,它把数据从分布式空间变换到一个更紧凑的维度空间中,这使得可以更容易地识别关联性、特征和关系。

PCA可以将高维数据减少到较低维数据,以节约存储空间和减少维度,并且可以有效地节省计算成本,提高计算效率。

PCA的主要原理是把去重和投影的原始高维数据集映射到低维空间中,从多组变量中提取一组有意义的变量。

这个过程中,每个主成分代表了不同变量的不同组合,它们可以从整体上把数据分割成不同的分支,并且可以有效地发现组合特征。

在互联网应用中,PCA可以用于识别和预测用户行为,帮助更好地理解用户习惯、需求和偏好,从而提高网络服务的质量。

例如,PCA可以帮助移动应用程序建立一个智能用户推荐系统,比如Netflix和Amazon Prime;它也可以帮助自动驾驶汽车识别周边环境,如障碍物、车辆和行人等;另外,PCA也可用于诊断聚类和新的内容技术开发等等。

总之,主成分分析对互联网表现以及机器学习发挥了重要作用,它可以帮助更快、更准确地处理大量数据,提高算法的准确性和效率。

主成分分析PCA(Principal Component Analysis)介绍

主成分分析PCA(Principal Component Analysis)介绍

主成分分析PCA一.K-L变换K-L变换是Karhunen-Loeve变换的简称,是一种特殊的正交变换。

它是建立在统计特性基础上的一种变换,有的文献也称其为霍特林(Hotelling)变换,因为他在1933年最先给出将离散信号变换成一串不相关系数的方法。

K-L变换的突出优点是它能去相关性,而且是均方误差(Mean Square Error,MSE)意义下的最佳变换。

下面就简单的介绍一下K-L变换了。

设,随机向量X ∈R n(n阶列向量),它的均值向量为m X,则其协方差矩阵可以表示为C x= E{(X-m x)*(X-m x)T} (2.1)C x是一个n*n阶的实对称阵。

K-L变换定义了一正交变换A ∈R n*n,将X ∈R n的向量映射到用Y ∈R n代表的向量,并且使Y向量中各分量间不相关:Y = A*(X-m x) (2.2)因为Y的各分量间不相关,则其协方差矩阵C y为对角阵,即C y= diag(λ1,λ2,...,λn)而矩阵A总是可以找到的,因为对于实对称阵,总能找到一个正交阵A,使得AC x A T的运算结果为对称阵。

K-L变换中,将A的每一行取为C x的特征向量,并且将这些特征向量按对应的特征值大小进行降序排序,使最大特征值对应的特征向量在A的第一行,而最小特征值对应的特征向量在A的最后一行。

而C y是C x对角化后的结果,所以两个矩阵的特征值是一致的(λ1,λ2,...,λn)。

这样就可以通过矩阵A实现由随机向量X到随机向量Y的K-L变换了,而由X = A T Y +m x (2.3)就可以实现Y反变换到X。

若选择的最大k个特征值对应的k个特征向量,组成k×n 的转换矩阵A,则变换后Y降为k维的,则由Y对X的恢复公式如下:X‘ = A K Y +m x (2.4)这时候C y= diag(λ1,λ2,...,λk),X与X’之间的均方误差可以由下式表达:λk+1+.λk+2...+λn(2.5)上面我们提到了对于特征值λ是从大到小排序的,那么这时候通过式子2.5可以表明通过选择k个具有最大特征值的特征向量来降低误差。

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

主成分分析(Principal Component Analysis ,PCA )主成分分析(Principal Component Analysis ,PCA )是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。

计算主成分的目的是将高维数据投影到较低维空间。

给定n 个变量的m 个观察值,形成一个n ′m 的数据矩阵,n 通常比较大。

对于一个由多个变量描述的复杂事物,人们难以认识,那么是否可以抓住事物主要方面进行重点分析呢?如果事物的主要方面刚好体现在几个主要变量上,我们只需要将这几个变量分离出来,进行详细分析。

但是,在一般情况下,并不能直接找出这样的关键变量。

这时我们可以用原有变量的线性组合来表示事物的主要方面,PCA 就是这样一种分析方法。

PCA 主要用于数据降维,对于一系列例子的特征组成的多维向量,多维向量里的某些元素本身没有区分性,比如某个元素在所有的例子中都为1,或者与1差距不大,那么这个元素本身就没有区分性,用它做特征来区分,贡献会非常小。

所以我们的目的是找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,从而使特征留下的都是“精品”,而且计算量也变小了。

对于一个k维的特征来说,相当于它的每一维特征与其他维都是正交的(相当于在多维坐标系中,坐标轴都是垂直的),那么我们可以变化这些维的坐标系,从而使这个特征在某些维上方差大,而在某些维上方差很小。

例如,一个45度倾斜的椭圆,在第一坐标系,如果按照x,y坐标来投影,这些点的x和y的属性很难用于区分他们,因为他们在x,y轴上坐标变化的方差都差不多,我们无法根据这个点的某个x属性来判断这个点是哪个,而如果将坐标轴旋转,以椭圆长轴为x轴,则椭圆在长轴上的分布比较长,方差大,而在短轴上的分布短,方差小,所以可以考虑只保留这些点的长轴属性,来区分椭圆上的点,这样,区分性比x,y轴的方法要好!所以我们的做法就是求得一个k维特征的投影矩阵,这个投影矩阵可以将特征从高维降到低维。

投影矩阵也可以叫做变换矩阵。

新的低维特征必须每个维都正交,特征向量都是正交的。

通过求样本矩阵的协方差矩阵,然后求出协方差矩阵的特征向量,这些特征向量就可以构成这个投影矩阵了。

特征向量的选择取决于协方差矩阵的特征值的大小。

举一个例子:对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。

求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个10*4的矩阵,这个矩阵就是我们要求的特征矩阵,100*10的样本矩阵乘以这个10*4的特征矩阵,就得到了一个100*4的新的降维之后的样本矩阵,每个特征的维数下降了。

当给定一个测试的特征集之后,比如1*10维的特征,乘以上面得到的10*4的特征矩阵,便可以得到一个1*4的特征,用这个特征去分类。

所以做PCA实际上是求得这个投影矩阵,用高维的特征乘以这个投影矩阵,便可以将高维特征的维数下降到指定的维数。

PCA 的目标是寻找r (r&lt;n )个新变量,使它们反映事物的主要特征,压缩原有数据矩阵的规模。

每个新变量是原有变量的线性组合,体现原有变量的综合效果,具有一定的实际含义。

这r 个新变量称为“主成分”,它们可以在很大程度上反映原来n 个变量的影响,并且这些新变量是互不相关的,也是正交的。

通过主成分分析,压缩数据空间,将多元数据的特征在低维空间里直观地表示出来。

例如,将多个时间点、多个实验条件下的基因表达谱数据(N 维)表示为3 维空间中的一个点,即将数据的维数从RN 降到R3 。

在进行基因表达数据分析时,一个重要问题是确定每个实验数据是否是独立的,如果每次实验数据之间不是独立的,则会影响基因表达数据分析结果的准确性。

对于利用基因芯片所检测到的基因表达数据,如果用PCA 方法进行分析,可以将各个基因作为变量,也可以将实验条件作为变量。

当将基因作为变量时,通过分析确定一组“主要基因元素”,它们能够很好地说明基因的特征,解释实验现象;当将实验条件作为变量时,通过分析确定一组“主要实验因素”,它们能够很好地刻画实验条件的特征,解释基因的行为。

下面着重考虑以实验条件作为变量的PCA 分析方法。

假设将数据的维数从R N 降到R 3 ,具体的PCA 分析步骤如下:(1) 第一步计算矩阵X 的样本的协方差矩阵S :(2) 第二步计算协方差矩阵S的本征向量e1,e2,…,eN 的本征值, i = 1,2,…,N 。

本征值按大到小排序:;(3)第三步投影数据到本征矢张成的空间之中,这些本征矢相应的本征值为。

现在数据可以在三维空间中展示为云状的点集。

对于PCA ,确定新变量的个数r 是一个两难的问题。

我们的目标是减小r ,如果r 小,则数据的维数低,便于分析,同时也降低了噪声,但可能丢失一些有用的信息。

究竟如何确定r 呢?这需要进一步分析每个主元素对信息的贡献。

令代表第i 个特征值,定义第i 个主元素的贡献率为:(8-45)前r 个主成分的累计贡献率为:(8-46)贡献率表示所定义的主成分在整个数据分析中承担的主要意义占多大的比重,当取前r 个主成分来代替原来全部变量时,累计贡献率的大小反应了这种取代的可靠性,累计贡献率越大,可靠性越大;反之,则可靠性越小。

一般要求累计贡献率达到70% 以上。

经过PCA 分析,一个多变量的复杂问题被简化为低维空间的简单问题。

可以利用这种简化方法进行作图,形象地表示和分析复杂问题。

在分析基因表达数据时,可以针对基因作图,也可以针对实验条件作图。

前者称为Q 分析,后者称为R 分析。

1)协方差矩阵2)特征值与特征向量3)贡献率/home/chenlu/pca.htm[java] view plaincopy/* * PrincipalComponents.java *Copyright (C) 2000 University of Waikato, Hamilton, New Zealand * */ package weka.attributeSelection;/** &lt;!-- globalinfo-start --&gt; * Performs a principal components analysis and transformation of the data. Use in conjunction with a Ranker search. Dimensionality reduction is accomplished by choosing enough eigenvectors to account for some percentage of the variance in the original data---default 0.95 (95%). Attribute noise can be filtered by transforming to the PC space, eliminating some of the worst eigenvectors, and then transforming back to the original space. * &lt;p/&gt;&lt;!-- globalinfo-end --&gt; * &lt;!-- options-start --&gt; * Valid options are: &lt;p/&gt; * * &lt;pre&gt; -D * Don't normalize input data.&lt;/pre&gt; * * &lt;pre&gt; -R * Retain enough PC attributes to account * for this proportion of variance in the original data. * (default =0.95)&lt;/pre&gt; * * &lt;pre&gt; -O * Transform through the PC space and * back to the originalspace.&lt;/pre&gt; * * &lt;pre&gt; -A * Maximum number of attributes to include in * transformed attribute names. (-1 = include all)&lt;/pre&gt; * &lt;!-- options-end --&gt; * * @author Mark Hall (mhall@) * @author Gabi Schmidberger (gabi@) *@version $Revision: 5987 $ */ public class PrincipalComponents extends UnsupervisedAttributeEvaluator implements AttributeTransformer, OptionHandler { /** for serialization */ static final long serialVersionUID = 3310137541055815078L; /** The data to transform analyse/transform */ private Instances m_trainInstances;/** Keep a copy for the class attribute (if set) */ private Instances m_trainHeader; /** The header for the transformed data format */ private Instancesm_transformedFormat; /** The header for data transformed back to the original space */ private Instances m_originalSpaceFormat; /** Data has a class set */ private boolean m_hasClass; /** Class index */private int m_classIndex; /** Number of attributes */ private int m_numAttribs; /** Number of instances */ private int m_numInstances; /** Correlation matrix forthe original data */ private double [][] m_correlation;/** Will hold the unordered linear transformations of the (normalized) original data */ private double [][]m_eigenvectors; /** Eigenvalues for the corresponding eigenvectors */ private double [] m_eigenvalues = null;/** Sorted eigenvalues */ private int [] m_sortedEigens;/** sum of the eigenvalues */ private doublem_sumOfEigenValues = 0.0; /** Filters for original data */ private ReplaceMissingValuesm_replaceMissingFilter; private Normalizem_normalizeFilter; private NominalToBinarym_nominalToBinFilter; private Remove m_attributeFilter; /** used to remove the class column if a class column is set */ private Remove m_attribFilter; /** The number of attributes in the pc transformed data */ private intm_outputNumAtts = -1; /** normalize the input data? */ private boolean m_normalize = true; /** the amount of varaince to cover in the original data when retaining the best n PC's */ private double m_coverVariance = 0.95; /** transform the data through the pc space and back to the original space ? */ private booleanm_transBackToOriginal = false; /** maximum numberof attributes in the transformed attribute name */ private int m_maxAttrsInName = 5; /** holds the transposed eigenvectors for converting back to the original space */ private double [][] m_eTranspose; /** * Returns a string describing this attribute transformer * @return a description of the evaluator suitable for * displaying in the explorer/experimenter gui */ public String globalInfo() { return "Performs a principal components analysis and transformation of " "the data. Use in conjunction with a Ranker search. Dimensionality " "reduction is accomplished by choosing enough eigenvectors to " "account for some percentage of the variance in the original data---" "default 0.95 (95%). Attribute noise can be filtered by transforming " "to the PC space, eliminating some of the worst eigenvectors, and ""then transforming back to the original space."; } /** * Returns an enumeration describing the available options.&lt;p&gt; * * @return an enumeration of all the available options. **/ public Enumeration listOptions () { Vector newVector = new Vector(3);newVector.addElement(new Option("/tDon't normalize input data." , "D", 0,"-D")); newVector.addElement(new Option("/tRetain enough PC attributes to account ""/n/tfor this proportion of variance in ""the original data./n""/t(default = 0.95)","R",1,"-R")); newVector.addElement(newOption("/tTransform through the PC space and ""/n/tback to the originalspace." , "O", 0, "-O"));newVector.addElement(new Option("/tMaximum number of attributes to include in ""/n/ttransformed attribute names. (-1 = includeall)" , "A", 1, "-A")); return newVector.elements(); } /*** Parses a given list of options. &lt;p/&gt; * &lt;!-- options-start --&gt; * Valid options are: &lt;p/&gt; ** &lt;pre&gt; -D * Don't normalize input data.&lt;/pre&gt; * * &lt;pre&gt; -R * Retain enough PC attributes to account * for this proportion of variance in the original data. * (default = 0.95)&lt;/pre&gt; * *&lt;pre&gt; -O * Transform through the PC space and* back to the original space.&lt;/pre&gt; * *&lt;pre&gt; -A * Maximum number of attributes to include in * transformed attribute names. (-1 = include all)&lt;/pre&gt; * &lt;!-- options-end --&gt; ** @param options the list of options as an array of strings * @throws Exception if an option is not supported */public void setOptions (String[] options) throws Exception { resetOptions(); String optionString; optionString = Utils.getOption('R', options); if (optionString.length() != 0) { Double temp;temp = Double.valueOf(optionString);setVarianceCovered(temp.doubleValue()); } optionString = Utils.getOption('A', options); if (optionString.length() != 0){ setMaximumAttributeNames(Integer.parseInt(option String)); } setNormalize(!Utils.getFlag('D', options));setTransformBackToOriginal(Utils.getFlag('O', options)); } /** * Reset to defaults */ private void resetOptions() { m_coverVariance = 0.95; m_normalize = true;m_sumOfEigenValues = 0.0; m_transBackToOriginal = false; } /** * Returns the tip text for thisproperty * @return tip text for this property suitable for* displaying in the explorer/experimenter gui */ public String normalizeTipText() { return "Normalize input data."; } /** * Set whether input data will be normalized. * @param n true if input data is to be normalized */ public void setNormalize(boolean n) { m_normalize = n; } /** * Gets whether or not input data is to be normalized * @return true if input data is to be normalized */ public boolean getNormalize() { return m_normalize; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in theexplorer/experimenter gui */ public String varianceCoveredTipText() { return "Retain enough PC attributes to account for this proportion of " "variance."; } /** * Sets the amount of variance to account for when retaining * principal components * @param vc the proportion of total variance to account for */ public void setVarianceCovered(double vc){ m_coverVariance = vc; } /** * Gets the proportion of total variance to account for when * retaining principal components * @return the proportion of varianceto account for */ public double getVarianceCovered() { return m_coverVariance; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in theexplorer/experimenter gui */ public String maximumAttributeNamesTipText() { return "The maximum number of attributes to include in transformed attribute names."; } /** * Sets maximum number of attributes to include in * transformed attribute names.* @param m the maximum number of attributes */public void setMaximumAttributeNames(int m){ m_maxAttrsInName = m; } /** * Gets maximum number of attributes to include in * transformed attribute names. * @return the maximum number of attributes */ public int getMaximumAttributeNames() { return m_maxAttrsInName; } /** * Returns the tip text for this property * @return tip text for this property suitable for * displaying in theexplorer/experimenter gui */ public String transformBackToOriginalTipText() { return "Transform through the PC space and back to the original space. ""If only the best n PCs are retained (by setting varianceCovered&lt; 1) " "then this option will give a dataset in the original space but with " "less attribute noise."; } /** * Sets whether the data should be transformed back to the original * space * @param b true if the data should be transformed back to the * original space */public void setTransformBackToOriginal(boolean b){ m_transBackToOriginal = b; } /** * Gets whether the data is to be transformed back to the original* space. * @return true if the data is to be transformed back to the original space */ public boolean getTransformBackToOriginal() { returnm_transBackToOriginal; } /** * Gets the current settings of PrincipalComponents * * @return an arrayof strings suitable for passing to setOptions() */ public String[] getOptions () { String[] options = newString[6]; int current = 0; if (!getNormalize()) { options[current ] = "-D"; }options[current ] = "-R"; options[current ] = "" getVarianceCovered(); options[current ] = "-A"; options[current ] = "" getMaximumAttributeNames();if (getTransformBackToOriginal()) { options[current ] = "-O"; } while (current &lt; options.length){ options[current ] = ""; } return options; } /** * Returns the capabilities of this evaluator. * * @return the capabilities of this evaluator * @see Capabilities */ public Capabilities getCapabilities() { Capabilities result = super.getCapabilities(); result.disableAll();// attributesresult.enable(Capability.NOMINAL_ATTRIBUTES); result.enable(Capability.NUMERIC_ATTRIBUTES);result.enable(Capability.DATE_ATTRIBUTES);result.enable(Capability.MISSING_VALUES); // class result.enable(Capability.NOMINAL_CLASS); result.enable(Capability.NUMERIC_CLASS);result.enable(Capability.DATE_CLASS);result.enable(Capability.MISSING_CLASS_V ALUES); result.enable(Capability.NO_CLASS); return result; } /** * Initializes principal components and performs the analysis * @param data the instances to analyse/transform * @throws Exception if analysis fails*/ public void buildEvaluator(Instances data) throws Exception { // can evaluator handle data? getCapabilities().testWithFail(data);buildAttributeConstructor(data); } private void buildAttributeConstructor (Instances data) throws Exception { m_eigenvalues = null; m_outputNumAtts = -1; m_attributeFilter = null; m_nominalToBinFilter = null; m_sumOfEigenValues = 0.0; m_trainInstances = new Instances(data); // make a copy of the training data so that we can get the class // column to append to the transformed data (if necessary) m_trainHeader = new Instances(m_trainInstances, 0); //处理缺失值、归一化、类别二值化、删除单值属性或者都为缺失值的属性//mormalize nominaltobin //TODO.... deletedm_numInstances = m_trainInstances.numInstances();m_numAttribs = m_trainInstances.numAttributes(); //计算相关矩阵,得到m_numAttribs * m_numAttribs的方阵fillCorrelation(); double [] d = newdouble[m_numAttribs]; double [][] v = newdouble[m_numAttribs][m_numAttribs]; Matrix corr = new Matrix(m_correlation); //得到特征向量和特征值corr.eigenvalueDecomposition(v, d); m_eigenvectors = (double [][])v.clone(); m_eigenvalues = (double[])d.clone(); // any eigenvalues less than 0 are not worth anything --- change to 0 for (int i = 0; i &lt;m_eigenvalues.length; i ) { if (m_eigenvalues[i] &lt; 0) { m_eigenvalues[i] = 0.0; } }m_sortedEigens = Utils.sort(m_eigenvalues);m_sumOfEigenValues = Utils.sum(m_eigenvalues); }/** * Returns just the header for the transformed data (ie. an empty * set of instances. This is so that AttributeSelection can * determine the structure of the transformed data without actually * having to get all the transformed data through transformedData(). * @return the header of the transformed data. * @throws Exception if the header of the transformed data can't * be determined. */ public Instances transformedHeader() throws Exception { }/** * Gets the transformed training data. * @return the transformed training data * @throws Exception if transformed data can't be returned */ public Instances transformedData(Instances data) throws Exception { }/** * Evaluates the merit of a transformed attribute. This is defined * to be 1 minus the cumulative variance explained. Merit can't * be meaningfully evaluated if the data is to be transformed back * to the original space. * @param att the attribute to be evaluated * @return the merit of a transformed attribute * @throws Exception if attribute can'tbe evaluated */ public double evaluateAttribute(int att) throws Exception { if (m_eigenvalues == null){ throw new Exception("Principal components hasn't been built yet!"); } if (m_transBackToOriginal) { return 1.0; // can't evaluate back in the original space! } // return 1-cumulative variance explained for this transformed att double cumulative = 0.0; for (int i = m_numAttribs - 1; i &gt;= m_numAttribs - att - 1; i--) { cumulative =m_eigenvalues[m_sortedEigens[i]]; } return 1.0 - cumulative / m_sumOfEigenValues; } /** * Fill the correlation matrix */ private void fillCorrelation() { m_correlation = newdouble[m_numAttribs][m_numAttribs]; double [] att1 = new double [m_numInstances]; double [] att2 = new double [m_numInstances]; double corr; for (int i = 0; i &lt; m_numAttribs; i ) { for (int j = 0; j &lt;m_numAttribs; j ) { if (i == j){ m_correlation[i][j] = 1.0; } else { for (int k = 0; k &lt; m_numInstances; k ){ att1[k] =m_trainInstances.instance(k).value(i); att2[k] =m_trainInstances.instance(k).value(j); }corr = Utils.correlation(att1,att2,m_numInstances);m_correlation[i][j] = corr; m_correlation[j][i] = corr; } } } } /** * Main method for testing this class * @param argv should contain the command line arguments to the *evaluator/transformer (see AttributeSelection) */ public static void main(String [] argv) { runEvaluator(new PrincipalComponents(), argv); } }。

相关文档
最新文档