主成分分析法matlab实现,实例演示
主成分分析PCA(含有详细推导过程以及案例分析matlab版)
主成分分析法(PCA)
在实际问题中,我们经常会遇到研究多个变量的问题,而且在多数情况下,多个变量之间常常存在一定的相关性。由于变量个数较多再加上变量之间的相关性,势必增加了分析问题的复杂性。如何从多个变量中综合为少数几个代表性变量,既能够代表原始变量的绝大多数信息,又互不相关,并且在新的综合变量基础上,可以进一步的统计分析,这时就需要进行主成分分析。
I. 主成分分析法(PCA)模型
(一)主成分分析的基本思想
主成分分析是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关。这种将把多个变量化为少数几个互相无关的综合变量的统计分析方法就叫做主成分分析或主分量分析。
主成分分析所要做的就是设法将原来众多具有一定相关性的变量,重新组合为一组新的相互无关的综合变量来代替原来变量。通常,数学上的处理方法就是将原来的变量做线性组合,作为新的综合变量,但是这种组合如果不加以限制,则可以有很多,应该如何选择呢?如果将选取的第一个线性组合即第一个综合变量记为1F ,自然希望它尽可能多地反映原来变量的信息,这里“信息”用方差来测量,即希望)(1F Var 越大,表示1F 包含的信息越多。因此在所有的线性组合中所选取的1F 应该是方差最大的,故称1F 为第一主成分。如果第一主成分不足以代表原来p 个变量的信息,再考虑选取2F 即第二个线性组合,为了有效地反映原来信息,1F 已有的信息就不需要再出现在2F 中,用数学语言表达就是要求0),(21=F F Cov ,称2F 为第二主成分,依此类推可以构造出第三、四……第p 个主成分。
主成分分析 MATLAB代码
%主成分分析(第一套方法)%数据标准化并计算相关系数load C:\Users\Administrator\Desktop\cities2003 %调出保存的数据data=[data(:,1),data(:,2),data(:,3),365-data(:,4)];mv=mean(data); %计算各变量的均值st=std(data); %计算各变量的标准差[n,m]=size(data); %计算矩阵的函数和列数X=(data-mv(ones(n,1),:))./st(ones(n,1),:); %原始数据集体标准化X%基于标准化数据计算相关系数的三种方法R=X'*X/(n-1); %计算相关系数矩阵R=cov(X); %计算相关系数矩阵R=corrcoef(X); %计算相关系数矩阵R%主成分分析的完整计算过程[U,V]=eig(R); %计算特征向量和特征值矩阵E=transpose(rot90(U)); %将特征向量矩阵P旋转90度再转置G=rot90(rot90(V)); %将对角矩阵旋转180度eigv=diag(G); %提取角矩阵的对角线元素per=100*eigv/sum(eigv); %计算方差贡献百分比Cum=cumsum(per); %计算方差贡献累计百分比C=sqrtm(G); %将对角矩阵对角线元素化为平方根A=-E*C; %计算载荷矩阵(转换为负值)Co1=A(:,1).^2; %提取1个主成分的公因子方差Co2=Co1+A(:,2).^2; %提取2个主成分的公因子方差Co3=Co2+A(:,3).^2; %提取3个主成分的公因子方差Co4=Co3+A(:,4).^2; %提取4个主成分的公因子方差Comm=[Co1,Co2,Co3,Co4]; %将4个公因子方差向量合并为一个矩阵H=A(:,1:2); %提取第一、第二主成分的载荷Z=X*(-E); %计算主成分得分(转换为负值)stdr=std(Z); %计算主成分得分的标准差F=Z./stdr(ones(n,1),:); %主成分得分集体标准化f=F(:,1:2); %提取第一、第二主成分的标准化得分E,G,Cum,Co2,H,f %输出常用结果%一些图形的绘制%特征值分布的折线图figure(1); %创造第一个图形窗口plot(eigv,'rO'); %绘制特征值的散点图xlabel('Component number'); %横轴标签(成分数)ylabel('Eigenvalue'); %纵轴标签(特征值)hold on %保持图形plot(eigv,'g-'); %将特征值的散点连接起来hold off %第一次绘图结束%主成分
主成分分析法实例
主成分分析法实例
PCA的基本思想是将原始数据在坐标系下进行变换,使得各个坐标轴
之间的相关性最小化。在变换后的坐标系中,第一个主成分表示数据中方
差最大的方向,第二个主成分表示与第一个主成分正交且方差次大的方向,以此类推。因此,保留前k个主成分就可以达到降维的目的。
下面我们通过一个实例来详细介绍PCA的应用过程。
假设我们有一个二维数据集,其中包含了500个样本点,每个样本点
具有两个特征。我们首先需要对数据进行标准化处理,即对每个特征进行
零均值化和单位方差化,这可以通过下面的公式实现:
\[x_j' = \frac{x_j - \overline{x_j}}{\sigma_j}\]
其中,\(x_j\)表示第j个特征的原始值,\(\overline{x_j}\)表示
第j个特征的均值,\(\sigma_j\)表示第j个特征的标准差。通过标准化
处理后,我们可以得到一个均值为0,方差为1的数据集。
接下来,我们计算数据集的协方差矩阵。协方差矩阵可以帮助我们衡
量变量之间的相关性,它的第i行第j列的元素表示第i个特征与第j个
特征的协方差。
\[Cov(X) = \frac{1}{n-1}(X - \overline{X})^T(X -
\overline{X})\]
其中,X是一个n行m列的矩阵,表示数据集,\(\overline{X}\)是
一个n行m列的矩阵,表示X的每一列的均值。
协方差矩阵可以通过求解数据集的散布矩阵来得到,散布矩阵的定义
如下:
\[Scatter(X) = (X - \overline{X})^T(X - \overline{X})\]
主成分分析PCA(含有详细推导过程以与案例分析matlab版)
主成分分析法(PCA)
在实际问题中,我们经常会遇到研究多个变量的问题,而且在多数情况下,多个变量之间常常存在一定的相关性。由于变量个数较多再加上变量之间的相关性,势必增加了分析问题的复杂性。如何从多个变量中综合为少数几个代表性变量,既能够代表原始变量的绝大多数信息,又互不相关,并且在新的综合变量基础上,可以进一步的统计分析,这时就需要进行主成分分析。
I. 主成分分析法(PCA)模型
(一)主成分分析的基本思想
主成分分析是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关。这种将把多个变量化为少数几个互相无关的综合变量的统计分析方法就叫做主成分分析或主分量分析。
主成分分析所要做的就是设法将原来众多具有一定相关性的变量,重新组合为一组新的相互无关的综合变量来代替原来变量。通常,数学上的处理方法就是将原来的变量做线性组合,作为新的综合变量,但是这种组合如果不加以限制,则可以有很多,应该如何选择呢?如果将选取的第一个线性组合即第一个综合变量记为1F ,自然希望它尽可能多地反映原来变量的信息,这里“信息”用方差来测量,即希望)(1F Var 越大,表示1F 包含的信息越多。因此在所有的线性组合中所选取的1F 应该是方差最大的,故称1F 为第一主成分。如果第一主成分不足以代表原来p 个变量的信息,再考虑选取2F 即第二个线性组合,为了有效地反映原来信息,1F 已有的信息就不需要再出现在2F 中,用数学语言表达就是要求
0),(21=F F Cov ,称2F 为第二主成分,依此类推可以构造出第三、四……第p 个主成分。
matlab主成分分析
matlab主成分分析
主成分分析(PrincipalComponentAnalysis,PCA)是一种用来降低复杂数据集的维度的常用统计工具。它的主要目的是把一组可能相关的变量(比如一组测量的实验数据)降维到一个更低维的表示中,从而找出数据中有意义的规律。主成分分析可以从大量变量中选择出主导变量,可以用来剔除噪声,消除数据间的相关性,提取隐藏变量,简化数据集,以及建立统计模型。
Matlab一种常用的计算机科学编程语言,拥有强大的数学和图形处理功能,能够解决各种复杂的计算问题。Matlab内置函数和第三方工具箱可以被用来实现主成分分析。
Matlab 中原生的主成分分析实现可以分为两步:一是数据准备,二是主成分分析。
数据准备是主成分分析过程中非常重要的一步,可以使用Matlab 中的函数实现。主要包括提取变量、清洗数据和数据标准化三个部分。提取变量可以通过从原始数据中选择需要的变量来实现,即将原始数据拟合到需要的维度中;清洗数据是指将原始数据中含有错误或者不可信的数据剔除;数据标准化则是指将原始数据的连续型变量转换成统一的数值范围,以便于分析。
主成分分析是从输入数据中学习到一组新的变量,这些变量能够说明输入数据中大部分的变量变化。Matlab中主成分分析可以通过调用标准统计工具箱(Statistics and Machine Learning Toolbox)中的pca函数来实现,该函数能够从原始数据中抽取有意义的变量。
通过pca函数,可以在输入数据中学习到有意义的变量,并得到它们的系数和贡献率,以此说明主成分分析后数据的变化程度。
MATLAB主成分分析法
MATLAB主成分分析法
统计与数学模型分析实验中心《MATLAB数据分析方法》实验报告
(4)排名的结果是否合理?为什么?程序:
clc,clearA=load('hiyan4_1.t某t');[m,n]=ize(A);%根据指标的属性将原始数据统一趋势化,其中资产负债率为成本型,转换成,效益型。
A1=(A(:,1)-min(A(:,1)))./(ma某(A(:,1))-min(A(:,1)));A2=(A(:,2)-min(A(:,2)))./(ma某(A(:,2))-min(A(:,2)));A3=(ma某(A(:,3))-
A(:,3))./(ma某(A(:,3))-min(A(:,3)));A4=(A(:,4)-
min(A(:,4)))./(ma某(A(:,4))-min(A(:,4)));A5=(A(:,5)-
min(A(:,5)))./(ma某(A(:,5))-min(A(:,5)));A6=(A(:,6)-
min(A(:,6)))./(ma某(A(:,6))-min(A(:,6)));A=[A1,A2,A3,A4,A5,A6];%利用相关系数矩阵进行主成分分析R=corrcoef(A);%在指标中无明显的共线关系[v,d]=eig(R);%计算特征值与特征向量%输出结果显示,最大特征
值对应的不是正向量,所以不能用第一主成分
进行排名%利用协方差矩阵进行主成分分析
R1=cov(A);[v1,d1]=eig(R1);%输出结果显示,最大特征值对应的不是正
向量,所以不能用第一主成分进行排名%利用R矩阵进行主成分分析
matlab主成分分析案例
1.设随机向量X=(X 1,X 2,X 3)T 的协方差与相关系数矩阵分别为
⎪⎪⎭⎫ ⎝⎛=∑25441,⎪⎪⎭
⎫
⎝⎛=18.08.01R 分别从∑,R 出发,求X 的各主成分以及各主成分的贡献率并比较差异况。
解答:
>> S=[1 4;4 25];
>> [PC,vary,explained]=pcacov(S); 总体主成分分析:
>> [PC,vary,explained]=pcacov(S) 主成分交换矩阵: PC =
-0.1602 -0.9871 -0.9871 0.1602 主成分方差向量: vary = 25.6491 0.3509
各主成分贡献率向量 explained = 98.6504 1.3496
则由程序输出结果得出,X 的主成分为: Y 1=-0.1602X 1-0.9871X 2 Y 2=-0.9871X 1+0.1602X 2
两个主成分的贡献率分别为:98.6504%,1.3496%;则若用第一个主成分代替原来的变量,信息损失率仅为1.3496,是很小的。
2.根据安徽省2007年各地市经济指标数据,见表5.2,求解: (1)利用主成分分析对17个地市的经济发展进行分析,给出排名; (2)此时能否只用第一主成分进行排名?为什么?
解答:
(1)
>> clear
>> A=[491.70,380.31,158.39,121.54,22.74,439.65,344.44,17.43;
21.12,30.55,6.40,12.40,3.31,21.17,17.71,2.03;
1.71,
matlab交叉验证确定主成分
主题:matlab交叉验证确定主成分
内容:
1. 交叉验证的定义和作用
交叉验证是一种统计学上对独立数据集的划分方法,用于评价一个模型的性能。交叉验证的主要作用是检查一个模型在未知数据上的表现,从而可以更客观地评估模型的泛化能力,有效地避免过拟合或欠拟合的问题。
2. 主成分分析(PCA)的基本原理
主成分分析是一种常用的降维技术,它可以通过线性变换将原始数据映射到一个新的空间,使得映射后的数据具有最大的方差,从而实现数据的降维处理。
3. matlab中交叉验证的实现方法
在matlab中,交叉验证可以借助于相关的工具包或函数来实现。其中,可以使用cvpartition函数将数据集划分为训练集和测试集,然后采用交叉验证的方法进行模型的训练和评价。
4. matlab中主成分分析(PCA)的实现方法
matlab提供了pca函数来实现主成分分析,通过该函数可以对数据进行主成分分析,并得到主成分的系数矩阵、主成分的得分等信息,从而实现对数据的降维处理和特征提取。
5. 结合交叉验证和主成分分析确定主成分
在实际应用中,可以结合交叉验证和主成分分析来确定主成分个数。具体做法是先将数据集进行主成分分析,然后采用交叉验证的方法来
评估不同主成分个数下模型的性能,最终选择最合适的主成分个数。
6. 应用实例
以某一具体数据集为例,通过matlab实现交叉验证和主成分分析确定主成分的过程,并对最终结果进行分析和解释,以验证该方法的有
效性和可行性。
7. 总结和展望
通过本文的介绍,我们了解了matlab中交叉验证确定主成分的方法和步骤,也了解了主成分分析的基本原理和matlab的实现方法。结合交叉验证和主成分分析能够更准确地确定主成分个数,为后续的数据
主成分分析及matlab实现
2 i1
l 1
2 ip
系数lij的确定原则: ① zi与zj(i≠j;i,j=1,2,…,m)相 互无关;
② z1是x1,x2,…,xP的一切线性组合 中方差最大者,z2是与z1不相关的x1,x2,…, xP的所有线性组合中方差最大者;…; zm是与 z1,z2,……,zm-1都不相关的x1,x2,…xP, 的所有线性组合中方差最大者。 则新变量指标z1,z2,…,zm分别称为原 变量指标x1,x2,…,xP的第1,第2,…,第 m主成分。
贡献率
i
k 1
p
(i 1,2, , p)
k
累计贡献率
k 1 k 1 p
i
k
(i 1,2, , p)
k
一般取累计贡献率达85%~95%的特征值 1 , 2 ,, m 所对应的第1、第2、…、第m(m≤p)个主成分。
三、 实例演示
例 对全国30个省市自治区经济发展基 本情况的八项指标作主成分分析,原始 数据如下:
根据总得分排序,结果见表1。
2.主成分回归 考察进口总额Y与三个自变量:国内总产值x1,存储 量x2,总消费量x3之间的关系,现收集数据如下, 试用主成分回归分析方法求进口总额与总产值、存储 量和总消费量的定量关系式.
序号
1 2 3 4 5 6 7 8 9 10 11
matlab中主成分分析的函数1
matlab中主成分分析的函数
1.princomp函数
功能:主成分分析
格式:PC=princomp(X)
[PC,SCORE,latent,tsquare]=princomp(X)
说明:[PC,SCORE,latent,tsquare]=princomp(X)对数据矩阵(即样本观测值矩阵)X进行主成分分析,给出各主成分 (PC)、所谓的Z-得分(SCORE)、X的方差矩阵的特征值(latent)和每个数据点的服务霍特林(Hotelling)T2统计量(tsquare)。
2.pcacov函数
功能:运用协方差矩阵或相关系数矩阵进行主成分分析
格式:PC=pcacov(X)
[PC,latent,explained]=pcacov(X)
说明:[PC,latent,explained]=pcacov(X)通过协方差矩阵X或相关系数矩阵进行主成分分析,返回主成分(PC)、协方差矩阵X的特征值(latent)和每个特征向量表征在观测量总方差中所占的百分数(explained)(即是主成分的贡献向量)。
3.pcares函数
功能:主成分分析的残差
格式:residuals=pcares(X,ndim)
说明:pcares(X,ndim)返回保留X的ndim个主成分所获的残差。注意,ndim是一个标量,用来指定所用的主成分的个数,必须小于X 的列数。而且,X是数据矩阵,而不是协方差矩阵。
4.barttest
功能:主成分的巴特力特检验
格式:ndim=barttest(X,alpha)
[ndim,prob,chisquare]=barttest(X,alpha)
利用Matlab和SPSS实现主成分分析
§9. 利用Matlab 和SPSS 实现主成分分析
1.直接调用Matlab 软件实现
在软件Matlab 中实现主成分分析可以采取两种方式实现:一是通过编程来实现;二是直接调用Matlab 中自带程序实现。
通过直接调用Matlab 中的程序可以实现主成分分析:
)(]2,var ,,[X princomp t iance score pc =
式中:X 为输入数据矩阵
⎥
⎥
⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡=nm n n m m x x x x x x x x x X 2
1
22221
11211
(一般要求n>m )
输出变量:
①pc 主分量f i 的系数,也叫因子系数;注意:pc T pc=单位阵
②score 是主分量下的得分值;得分矩阵与数据矩阵X 的阶数是一致的; ③variance 是score 对应列的方差向量,即A 的特征值;容易计算方差所占的百分比
percent-v = 100*variance/sum(variance); ④t2表示检验的t2-统计量(方差分析要用) 计算过程中应用到计算模型:
ξ+⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡m T p x x x A f f f 2121 (要求p
例:表1为某地区农业生态经济系统各区域单元相关指标数据,运用主成分分析方法可以用更少的指标信息较为精确地描述该地区农业生态经济的发展状况。
表1 某农业生态经济系统各区域单元的有关数据
样本序号 x 1:人口密度(人/km 2
) x 2:人均耕地面积(ha) x 3:森林覆盖率(%) x 4:农民人均纯收入(元/人) x 5:人均粮食产量 (kg/人) x 6:经济作
matlab主成分分析法
§10.利用Matlab 编程实现主成分分析
1.概述
Matlab 语言是当今国际上科学界 <尤其是自动控制领域> 最具影响力、也是最有活力的软件。它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、与其他程序和语言的便捷接口的功能。Matlab 语言在各国高校与研究单位起着重大的作用。主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法,从数学角度来看,这是一种降维处理技术。
1.1主成分分析计算步骤
① 计算相关系数矩阵
⎥⎥
⎥
⎥⎥⎦⎤
⎢⎢⎢⎢
⎢⎣⎡=pp p p p p r r r r r r r r r R 2
1
22221
11211
〔1
在〔,r ij 〔i,j=1,2,…,p 为原变量的xi 与xj 之间的相关系数,其计算公式为
∑∑∑===----=
n k n
k j kj i ki n
k j kj i ki
ij x x x x x x x x
r 1
12
2
1)()
()
)(( 〔2
因为R 是实对称矩阵〔即r ij =r ji ,所以只需计算上三角元素或下三角元素即可。
② 计算特征值与特征向量
首先解特征方程0=-R I λ,通常用雅可比法〔Jacobi 求出特征值
),,2,1(p i i =λ,并使其按大小顺序排列,即0,21≥≥≥≥p
λλλ ;然后分别求出
对应于特征值i λ的特征向量),,2,1(p i e i =。这里要求i e =1,即112
=∑=p
j ij e ,其中ij
e 表示向量i e 的第j 个分量。
MATLAB主成分分析
MATLAB主成分分析
1.princomp
功能:主成分分析
格式:PC=princomp(X)
[PC,SCORE,latent,tsquare]=princomp(X)
说明:[PC,SCORE,latent,tsquare]=princomp(X)对数据矩阵X进行主成分分析,给出各主成分(PC)、所谓的Z-得分(SCORE)、X的方差矩阵的特征值(latent)和每个数据点的HotellingT2统计量(tsquare)。
2.pcacov
功能:运用协方差矩阵进行主成分分析
格式:PC=pcacov(X)
[PC,latent,explained]=pcacov(X)
说明:[PC,latent,explained]=pcacov(X)通过协方差矩阵X进行主成分分析,返回主成分(PC)、协方差矩阵X的特征值(latent)和每个特征向量表征在观测量总方差中所占的百分数(explained)。
3.pcares
功能:主成分分析的残差
格式:residuals=pcares(X,ndim)
说明:pcares(X,ndim)返回保留X的ndim个主成分所获的残差。注意,ndim是一个标量,必须小于X的列数。而且,X是数据矩阵,而不是协方差矩阵。
4.barttest
功能:主成分的巴特力特检验
格式:ndim=barttest(X,alpha)
[ndim,prob,chisquare]=barttest(X,alpha)
说明:巴特力特检验是一种等方差性检验。ndim=barttest(X,alpha)是在显著
主成分分析法MATLAB实现
MATLAB
结
课
作
业
指导老师:张肃
班级:信管121
姓名:桂亚东
学号:201200654118
利用Matlab 编程实现主成分分析概述
Matlab 语言是当今国际上科学界(尤其是自动控制领域) 最具影响力、也是最有活力的软件。它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、与其他程序和语言的便捷接口的功能。Matlab 语言在各国高校与研究单位起着重大的作用。主成分分析是把原来多个变量划为少数几个综合指标的一种统
计分析方法,从数学角度来看,这是一种降维处理技术。
1.1 主成分分析计算步骤
①计算相关系数矩阵
r 11 r
12
r
1p
R r
21
r
22
r
2
p
r r
p1 p2
r
pp (1)
在(3.5.3)式中,r ij(i,j=1 ,2,⋯,p)为原变量的xi 与xj 之间的相关系数,其计算公式为
n
(x
ki x
i
)( x
kj
x
j
)
r
ij n
k 1
n
(x
ki x
i
) 2 (x x
kj
j
) 2
k 1 k 1 (2)
因为R 是实对称矩阵
(即r ij=r ji),所以只需计算上三角元素或下三角元素即可。
②计算特征值与特征向量
首先解特征方程I R 0 ,通常用雅可比法(Jacobi )求出特征值
(i 1, 2, , p)
i ,并使其按大小顺序排列,即 1 2 , p 0;然后分别求
出对应于特征值
p
2
i 的特征向量e i (i 1, 2, , p) 。这里要求e i =1 ,即 e 1,
ij
j 1
其中e表示向量e
i 的第j 个分量。
(完整word版)主成分分析PCA(含有详细推导过程以和案例分析matlab版)
主成分分析法(PCA)
在实际问题中.我们经常会遇到研究多个变量的问题.而且在多数情况下.多个变量之间常常存在一定的相关性。由于变量个数较多再加上变量之间的相关性.势必增加了分析问题的复杂性。如何从多个变量中综合为少数几个代表性变量.既能够代表原始变量的绝大多数信息.又互不相关.并且在新的综合变量基础上.可以进一步的统计分析.这时就需要进行主成分分析。
I. 主成分分析法(PCA)模型
(一)主成分分析的基本思想
主成分分析是采取一种数学降维的方法.找出几个综合变量来代替原来众多的变量.使这些综合变量能尽可能地代表原来变量的信息量.而且彼此之间互不相关。这种将把多个变量化为少数几个互相无关的综合变量的统计分析方法就叫做主成分分析或主分量分析。 主成分分析所要做的就是设法将原来众多具有一定相关性的变量.重新组合为一组新的相互无关的综合变量来代替原来变量。通常.数学上的处理方法就是将原来的变量做线性组合.作为新的综合变量.但是这种组合如果不加以限制.则可以有很多.应该如何选择呢?如果将选取的第一个线性组合即第一个综合变量记为1F .自然希望它尽可能多地反映原来变量的信息.这里“信息”用方差来测量.即希望)(1F Var 越大.表示1F 包含的信息越多。因此在所有的线性组合中所选取的1F 应该是方差最大的.故称1F 为第一主成分。如果第一主成分不足以代表原来p 个变量的信息.再考虑选取2F 即第二个线性组合.为了有效地反映原来信息.1F 已有的信息就不需要再出现在2F 中.用数学语言表达就是要求0),(21=F F Cov .称2F 为第二主成分.依此类推可以构造出第三、四……第p 个主成分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用Matlab 编程实现主成分分析
1.概述
Matlab 语言是当今国际上科学界 (尤其是自动控制领域) 最具影响力、也是
最有活力的软件。它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、与其他程序和语言的便捷接口的功能。Matlab 语言在各国高校与研究单位起着重大的作用。主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法,从数学角度来看,这是一种降维处理技术。
1.1主成分分析计算步骤
① 计算相关系数矩阵
⎥⎥
⎥
⎥⎥⎦⎤
⎢⎢⎢⎢
⎢⎣⎡=pp p p p p r r r r r r r r r R 2
1
22221
11211
(1)
在(3.5.3)式中,r ij (i ,j=1,2,…,p )为原变量的xi 与xj 之间的相关系数,其计算公式为
∑∑∑===----=
n
k n
k j kj
i ki
n
k j kj i ki
ij x x
x x
x x x x
r 1
1
2
2
1
)()
()
)(( (2)
因为R 是实对称矩阵(即r ij =r ji ),所以只需计算上三角元素或下三角元素即可。
② 计算特征值与特征向量
首先解特征方程0=-R I λ,通常用雅可比法(Jacobi )求出特征值
),,2,1(p i i =λ,并使其按大小顺序排列,即0,21≥≥≥≥p
λλλ ;然后分别求
出对应于特征值i λ的特征向量),,2,1(p i e i =。这里要求i e =1,即112
=∑=p
j ij e ,其
中ij e 表示向量i e 的第j 个分量。
③ 计算主成分贡献率及累计贡献率 主成分i z 的贡献率为
),,2,1(1
p i p
k k
i
=∑=λ
λ
累计贡献率为
)
,,2,1(11
p i p
k k
i
k k
=∑∑==λ
λ
一般取累计贡献率达85—95%的特征值m λλλ,,,21 所对应的第一、第二,…,第m (m ≤p )个主成分。
④ 计算主成分载荷 其计算公式为
)
,,2,1,(),(p j i e x z p l ij i j i ij ===λ (3)
得到各主成分的载荷以后,还可以按照(3.5.2)式进一步计算,得到各主成分的得分
⎥
⎥
⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡=nm n n m m z z z z z z z z z Z 2
1222
21
11211 (4)
2.程序结构及函数作用
在软件Matlab 中实现主成分分析可以采取两种方式实现:一是通过编程来实现;二是直接调用Matlab 种自带程序实现。下面主要主要介绍利用Matlab 的矩阵计算功能编程实现主成分分析。
2.1程序结构
2.2函数作用
Cwstd.m ——用总和标准化法标准化矩阵
Cwfac.m ——计算相关系数矩阵;计算特征值和特征向量;对主成分进行排序;计算各特征值贡献率;挑选主成分(累计贡献率大于85%),输出主成分个数;计算主成分载荷
Cwscore.m——计算各主成分得分、综合得分并排序
Cwprint.m——读入数据文件;调用以上三个函数并输出结果
3.源程序
3.1 cwstd.m总和标准化法标准化矩阵
%cwstd.m,用总和标准化法标准化矩阵
function std=cwstd(vector)
cwsum=sum(vector,1); %对列求和
[a,b]=size(vector); %矩阵大小,a为行数,b为列数
for i=1:a
for j=1:b
std(i,j)= vector(i,j)/cwsum(j);
end
end
3.2 cwfac.m计算相关系数矩阵
%cwfac.m
function result=cwfac(vector);
fprintf('相关系数矩阵:\n')
std=CORRCOEF(vector) %计算相关系数矩阵
fprintf('特征向量(vec)及特征值(val):\n')
[vec,val]=eig(std) %求特征值(val)及特征向量(vec)
newval=diag(val) ;
[y,i]=sort(newval) ; %对特征根进行排序,y为排序结果,i为索引fprintf('特征根排序:\n')
for z=1:length(y)
newy(z)=y(length(y)+1-z);
end
fprintf('%g\n',newy)
rate=y/sum(y);
fprintf('\n贡献率:\n')
newrate=newy/sum(newy)
sumrate=0;
newi=[];
for k=length(y):-1:1
sumrate=sumrate+rate(k);
newi(length(y)+1-k)=i(k);
if sumrate>0.85 break;
end
end %记下累积贡献率大85%的特征值的序号放入newi中
fprintf('主成分数:%g\n\n',length(newi));
fprintf('主成分载荷:\n')
for p=1:length(newi)
for q=1:length(y)
result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));
end
end %计算载荷
disp(result)
3.3 cwscore.m
%cwscore.m,计算得分
function score=cwscore(vector1,vector2);
sco=vector1*vector2;
csum=sum(sco,2);
[newcsum,i]=sort(-1*csum);
[newi,j]=sort(i);
fprintf('计算得分:\n')
score=[sco,csum,j]
%得分矩阵:sco为各主成分得分;csum为综合得分;j为排序结果
3.4 cwprint.m
%cwprint.m
function print=cwprint(filename,a,b);
%filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数) fid=fopen(filename,'r')
vector=fscanf(fid,'%g',[a b]);
fprintf('标准化结果如下:\n')
v1=cwstd(vector)
result=cwfac(v1);
cwscore(v1,result);