6.2 主成分分析的实例及其在MATLAB平台的实现
只要准备好原始数据矩阵X,就可以在MATLAB平台通过调用函数princomp(X)来实现主成分分析。
例6-2 有三个变量x1,x2与x3(m=3),其16次(n=16)观测值见表6-3。
表6-3 变量间存在高度相关性的数据矩阵
首先将数据矩阵X导入MATLAB中。
第一步,在Excel文件中生成数据矩阵X并将其保存在MATLAB work子目录下。
第二步,在MATLAB的界面选择“open file”图标双击,在“文件类型”框中选择“All Files(*.*)”,然后选择work子目录下的X.xls文件,会出现如图6-4所示界面
图6-4 MATLAB下数据导入界面
双击上面界面中的“打开”按钮,会出现如图6-5所示界面。
图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中
得相关系数矩阵
由相关系数矩阵可知,x1与x3之间相似系数为0.994,这表明这两个变量相关程度很高,说明原始数据矩阵X存在高度线性相关,有必要采用主成分分析进行信息压缩,消除变量x1与x3之间的相关性。
在MATLAB的command window下键入如下命令
>>xx=autoscaling(X);%对原始变量进行自标度化预处理并存放在xx矩阵中
在MATLAB的view窗口下打开“workspace”栏,会出现如图6-6所示界面。
图6-6 MATLAB下的workspace界面
此时MATLAB中的workspace目录里有前面导入的原始数据文件X及经过自标度化预处理后的矩阵xx,两个矩阵的维数都是16(行)乘3(列)。
在此界面下双击xx图标,会出现预处理后的xx矩阵(图6-7)。
如果在MATLAB的command window下键入如下命令
>>Zxx=xx/(16-1);%求经过预处理后的数据矩阵xx的协方差矩阵
注:由于xx中每个变量的均值=0,故其协方差矩阵=xx/(n-1)
可以得到
比较式(6-38)和式(6-39)可以发现Zxx=Rx,这从数值计算的角度证明了经过自标度化预处理的数据矩阵xx的协方差矩阵和其原始数据X的相关矩阵相等。
如果在MATLAB的command window下键入如下命令
>>dx=(X-repmat(mx,size(X,1),1));%将X中每个变量减去其均值并赋给dx
>>Zx=/(16-1);%求原始数据矩阵X的协方差矩阵并存放在Zx中
可以得到
比较式(6-40)与式(6-39)可知,未经预处理的数据矩阵X的协方差矩阵Zx与经自标度化处理后矩阵xx(图6-7)的协方差矩阵Zxx并不相等。
但如果在MATLAB的command window下键入如下命令
>>Rxx=corrcoef(xx);%求自标度化预处理后数据矩阵xx的相关矩阵并存放在Rxx中
图6-7 经自标度化处理后的数据矩阵
会得到如下结果
比较式(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所示的界面。
图6-8 主成分分析后的workspace目录
其中pc、score和latent分别为princomp函数返回的载荷矩阵、主成分得分矩阵及矩阵xx的协方差矩阵Zxx的特征值。
在workspace界面打开latent得特征值
说明第一、二、三主成分的方差分别为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特征值对应的特征向量)
图6-9 xx矩阵的主成分得分矩阵
在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所示的结果。
图6-10 xx矩阵三个主成分得分的均值
图6-11 xx矩阵三个主成分得分的方差
图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个样品浓度信息 (%)
续表
将由B、T两列构成的数据矩阵记为X,由自标度化处理后的数据矩阵记为,X或矩阵中含有8个样品和两个变量,如果不对X进行预处理,按照6.1.3的主成分分析步骤,可求得其协方差矩阵如下
其特征值应满足方程
求解上面的方程可得到特征值λ=156.59,2.98。
对于第一个特征值,则有
求解上述两个方程,可得第一特征向量为
同理可以求得第二个特征值2.98所对应的特征向量为
可列成表6-5。
表6-5 8个混合样品原始数据矩阵X的协方差矩阵的特征矢量
第一主成分得分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),可用F1反算用第一主成分近似表示的原始数据矩阵X
由式(6-42)求得用第一主成分反算的8个样品苯和二甲苯减去均值后的含量见表6-6。
表6-6 用第一主成分反算得到的8个样品中的苯与二甲苯含量
表6-6中除第2、3个样本外,其他样本用第一个主成分求出的减去均值后的苯含量()及二甲苯含量()与实际的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得到的两个特征值均会比较大,不能只用一个主成分的得分来近似替代原始数据矩阵。
如果采用经过自标度化处理的数据矩阵进行主成分分析,则其协方差矩阵(此时等于相关矩阵R)为
其特征方程为
解上述方程可得特征值为:1.962 4,0.037 6。
对于第一个特征值,则有
求解上述两个方程,可得第一特征向量为
同理可以求得第二个特征值0.037 6所对应的特征向量为
表6-7 经自标度化处理后8个混合样品数据矩阵的相关矩阵的特征矢量
第一主成分得分(i)=(i)×0.707 1+(i)×0.707 1(i为样本序号)
第一个样品的F1=14.74 7×07.07 1+13.34 5×07.07 1=19.86 4由式(6-26),可用反算用第一主成分近似表示的阵
由式(6-43)求得用第一主成分反算的经自标度化处理后的8个样品的苯和二甲苯含量见表6-8。该表中第4、第6列的数据相同,这是因为第一载荷向量的两个元素u11与u21相等。由于和是经自标度化预处理后的甲苯、二甲苯含量,即使第一主成分反算得到的和相等,换算回去的苯及二甲苯实际含量是不一样的。表6-8中也是除样本2、3外,其他样本用第一主成分表示的和值与实际值差异不大。
由表6-8还可以看出,第一主成分的方差等于矩阵的协方差矩阵(相关矩阵)的第一特征值,经自标度化预处理的苯和二甲苯含量与的方差为1,第一主成分表示的与的方差均为0.981 2,恰好等于第一主成分的累积贡献率。
表6-8 用第一主成分反算得到的8个样品中的苯与二甲苯含量
本例分析结果表明,对原始数据进行自标度化预处理后再进行主成分分析,与不进行预处理进行主成分分析相比,二者的协方差矩阵的特征值、特征向量及得到的主成分得分均不相同,但主成分的累积贡献率相同。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。