首页 理论教育 主成分分析的实例及其在平台的实现

主成分分析的实例及其在平台的实现

时间:2023-02-12 理论教育 版权反馈
【摘要】:这一结果证明了主成分(得分)的均值为0、方差为其协方差矩阵的对应特征值。剩余的未能在第一主成分中表达出的信息包含在第二主成分中。由于和是经自标度化预处理后的甲苯、二甲苯含量,即使第一主成分反算得到的和相等,换算回去的苯及二甲苯实际含量是不一样的。由表6-8还可以看出,第一主成分的方差等于矩阵的协方差矩阵

6.2 主成分分析的实例及其在MATLAB平台的实现

只要准备好原始数据矩阵X,就可以在MATLAB平台通过调用函数princomp(X)来实现主成分分析。

例6-2 有三个变量x1,x2与x3(m=3),其16次(n=16)观测值见表6-3。

表6-3 变量间存在高度相关性的数据矩阵

img511

首先将数据矩阵X导入MATLAB中。

第一步,在Excel文件中生成数据矩阵X并将其保存在MATLAB work子目录下。

第二步,在MATLAB的界面选择“open file”图标双击,在“文件类型”框中选择“All Files(*.*)”,然后选择work子目录下的X.xls文件,会出现如图6-4所示界面

img512

图6-4 MATLAB下数据导入界面

双击上面界面中的“打开”按钮,会出现如图6-5所示界面。

img513

图6-5 MATLAB下数据导入界面

双击图6-5中的“Finish”按钮,MATLAB界面会出现如下文字

Import Wizard created variables in the current workspace.

表示数据文件X.xls已经导入到MATLAB的workspace工作目录中(所有MATLAB计算的输入和输出数据均保存在此目录下)。

在MATLAB的command window下键入如下命令

>>Rx=corrcoef(X);%计算矩阵X的相关系数矩阵并存放在Rx中

得相关系数矩阵

img514

由相关系数矩阵可知,x1与x3之间相似系数为0.994,这表明这两个变量相关程度很高,说明原始数据矩阵X存在高度线性相关,有必要采用主成分分析进行信息压缩,消除变量x1与x3之间的相关性。

在MATLAB的command window下键入如下命令

>>xx=autoscaling(X);%对原始变量进行自标度化预处理并存放在xx矩阵中

在MATLAB的view窗口下打开“workspace”栏,会出现如图6-6所示界面。

img515

图6-6 MATLAB下的workspace界面

此时MATLAB中的workspace目录里有前面导入的原始数据文件X及经过自标度化预处理后的矩阵xx,两个矩阵的维数都是16(行)乘3(列)。

在此界面下双击xx图标,会出现预处理后的xx矩阵(图6-7)。

如果在MATLAB的command window下键入如下命令

>>Zxx=img516xx/(16-1);%求经过预处理后的数据矩阵xx的协方差矩阵

注:由于xx中每个变量的均值=0,故其协方差矩阵=img517xx/(n-1)

可以得到

img518

比较式(6-38)和式(6-39)可以发现Zxx=Rx,这从数值计算的角度证明了经过自标度化预处理的数据矩阵xx的协方差矩阵和其原始数据X的相关矩阵相等。

如果在MATLAB的command window下键入如下命令

>>dx=(X-repmat(mx,size(X,1),1));%将X中每个变量减去其均值并赋给dx

>>Zx=img519/(16-1);%求原始数据矩阵X的协方差矩阵并存放在Zx中

可以得到

img520

比较式(6-40)与式(6-39)可知,未经预处理的数据矩阵X的协方差矩阵Zx与经自标度化处理后矩阵xx(图6-7)的协方差矩阵Zxx并不相等。

但如果在MATLAB的command window下键入如下命令

>>Rxx=corrcoef(xx);%求自标度化预处理后数据矩阵xx的相关矩阵并存放在Rxx中

img521

图6-7 经自标度化处理后的数据矩阵

会得到如下结果

img522

比较式(6-41)和式(6-39)、式(6-38)会发现矩阵Rx=Zxx=Rxx,这说明无论数据矩阵是否进行了自标度化预处理,其相关系数矩阵都是相等的,但是自标度化预处理前后数据矩阵的协方差矩阵不相等。因此从相关矩阵出发进行特征分解更好。

在MATLAB的command window下键入如下命令

>>[pc,score,latent]=princomp(xx);%采用MATLAB中的princomp函数对矩阵xx进行主成分分析,pc为载荷向量矩阵(每一列为对应特征值的特征向量),score为主成分得分,latent为由从大到小排列的特征值组成的列向量

打开MATLAB的view窗口,点击workspace栏,可以看到如图6-8所示的界面。

img523

图6-8 主成分分析后的workspace目录

其中pc、score和latent分别为princomp函数返回的载荷矩阵、主成分得分矩阵及矩阵xx的协方差矩阵Zxx的特征值。

在workspace界面打开latent得特征值

img524

说明第一、二、三主成分的方差分别为2.056,0.939,0.005,显然第三个主成分方差0.005远小于第一、二主成分的方差。其中第一个主成分的贡献率为68.53%,第二个主成分的贡献率为30.87%,前两个主成分的累积贡献率达99.83%。说明第三个主成分所起作用非常小,可以只要两个主成分就可以很好地表述原来的三个变量的信息。

在workspace界面打开矩阵score,可看到如图6-9所示的主成分得分矩阵,其中第1、2、3列分别是16个样本的第1、2、3主成分得分。

在workspace界面打开矩阵pc,得载荷矩阵如下(其第1,2,3列分别为xx的协方差矩阵的第1,2,3特征值对应的特征向量)

img525

img526

图6-9 xx矩阵的主成分得分矩阵

img527

在MATLAB的command window下键入命令

>>mx=mean(score);%求每个主成分的平均值并赋给mx(mx为一行向量)

>>var_score=var(score);%求每个主成分的方差并赋给var_score

>>Rpc=corrcoef(score);%求主成分的相关矩阵并赋给Rpc

在MATLAB的workspace界面打开mx、var_score、Rpc可以看到如图6-10、图6-11与图6-12所示的结果。

img528

图6-10 xx矩阵三个主成分得分的均值

img529

图6-11 xx矩阵三个主成分得分的方差

img530

图6-12 xx矩阵三个主成分得分间的相关系数

由图6-10可知,三个主成分得分的均值都为0;图6-11表明第1、2、3主成分的方差分别为2.056 0、0.939 1、0.004 9,与协方差矩阵Zxx对应的特征值相等。这一结果证明了主成分(得分)的均值为0、方差为其协方差矩阵的对应特征值。图6-12表明不同主成分得分间的相关系数=0,说明主成分(得分)之间互不相关,每个主成分(得分)是独立的变量。

例6-3 利用气相色谱(GC)得到的8个样品中苯和二甲苯的含量见表6-4(其中Bm与Tm分别为经过减均值处理后的苯和二甲苯含量)。

表6-4 由苯、二甲苯混合的8个样品浓度信息 (%)

img531

续表

img532

将由B、T两列构成的数据矩阵记为X,由自标度化处理后的数据矩阵记为img533,X或img534矩阵中含有8个样品和两个变量,如果不对X进行预处理,按照6.1.3的主成分分析步骤,可求得其协方差矩阵如下

img535

其特征值应满足方程

img536

求解上面的方程可得到特征值λ=156.59,2.98。

对于第一个特征值,则有

img537

求解上述两个方程,可得第一特征向量为

img538

同理可以求得第二个特征值2.98所对应的特征向量为

img539

可列成表6-5。

表6-5 8个混合样品原始数据矩阵X的协方差矩阵的特征矢量

img540

第一主成分得分F1(i)=Bm(i)×0.699 8+Tm(i)×0.711 4(i为样本序号)

第一个样品的F1=13×0.699 8+12×0.714 4=17.67由式(6-26)img541,可用F1反算用第一主成分近似表示的原始数据矩阵X

img542

由式(6-42)求得用第一主成分反算的8个样品苯和二甲苯减去均值后的含量见表6-6。

表6-6 用第一主成分反算得到的8个样品中的苯与二甲苯含量

img543

表6-6中除第2、3个样本外,其他样本用第一个主成分求出的减去均值后的苯含量(img544)及二甲苯含量(img545)与实际的Bm、Tm差异不大,这表明用第一个主成分可以良好地描述原始数据的信息。由表6-6的第2列可知,第一主成分的方差=156.6,恰好是本例数据矩阵X的协方差矩阵的第一特征值。由于主成分的均值为0,故主成分得分的平方和就是其方差,因此有

协方差矩阵的第一个特征值=PC1得分的平方和/(n-1),

同理可验证

协方差矩阵的第二个特征值=PC2得分的平方和/(n-1)

因此原始数据矩阵X的协方差矩阵的特征值反映的是对应主成分的方差大小,本例以实际数据证明了6.1.4理论推导的结论。

由表6-6的第3、4列可知,苯含量的方差为77.71,而第一主成分表示的苯含量方差为77.79,二者相差很小,说明第一主成分反映了苯含量的绝大部分方差;由表6-6的第5、6列可知,二甲苯含量的方差为80.86,而第一主成分表示的二甲苯含量的方差为79.40,79.4/80.86=98.19%,说明第一主成分反映了二甲苯含量方差的98.2%。剩余的未能在第一主成分中表达出的信息包含在第二主成分中。

本例分析结果表明,该8个样品中的苯(B)与二甲苯(T)的含量高度相关,因此可以采用一个主成分来体现原数据矩阵X的绝大部分信息。反之,如果这8个样品中苯的含量与二甲苯含量不相关,则PCA得到的两个特征值均会比较大,不能只用一个主成分的得分来近似替代原始数据矩阵。

如果采用经过自标度化处理的数据矩阵img546进行主成分分析,则其协方差矩阵img547(此时等于相关矩阵R)为

img548

其特征方程为

img549

解上述方程可得特征值为:1.962 4,0.037 6。

对于第一个特征值,则有

img550

求解上述两个方程,可得第一特征向量为

img551

同理可以求得第二个特征值0.037 6所对应的特征向量为

img552

表6-7 经自标度化处理后8个混合样品数据矩阵img553的相关矩阵的特征矢量

img554

第一主成分得分img555(i)=img556(i)×0.707 1+img557(i)×0.707 1(i为样本序号)

第一个样品的F1=14.74 7×07.07 1+13.34 5×07.07 1=19.86 4由式(6-26),可用img558反算用第一主成分近似表示的img559

img560

由式(6-43)求得用第一主成分img561反算的经自标度化处理后的8个样品的苯和二甲苯含量见表6-8。该表中第4、第6列的数据相同,这是因为第一载荷向量的两个元素u11与u21相等。由于img562img563是经自标度化预处理后的甲苯、二甲苯含量,即使第一主成分反算得到的img564img565相等,换算回去的苯及二甲苯实际含量是不一样的。表6-8中也是除样本2、3外,其他样本用第一主成分表示的img566img567值与实际值差异不大。

由表6-8还可以看出,第一主成分的方差等于矩阵img568的协方差矩阵(相关矩阵)的第一特征值,经自标度化预处理的苯和二甲苯含量img569img570的方差为1,第一主成分表示的img571img572的方差均为0.981 2,恰好等于第一主成分的累积贡献率。

表6-8 用第一主成分反算得到的8个样品中的苯与二甲苯含量

img573

本例分析结果表明,对原始数据进行自标度化预处理后再进行主成分分析,与不进行预处理进行主成分分析相比,二者的协方差矩阵的特征值、特征向量及得到的主成分得分均不相同,但主成分的累积贡献率相同。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈