一、概念
(一)概念:
主成分分析:考察多个变量间相关性一种多元统计方法,研究如何通过少数几个主成分来揭示多个变量间的内部结构,即从原始变量中导出少数几个主成分,使它们尽可能多地保留原始变量的信息,且彼此间互不相关.通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。
(二)原理步骤总结(前4步最重要)
1、标准化后的矩阵Z; 2、对标准化矩阵Z求相关系数矩阵; 3、求特征向量和特征值,贡献率; 4、根据贡献率降维,确定主成分,(X-m)×P即为降维到k维后的数据; 5、对k个主成分进行评价。
二、举例,以下面的数据为例:
列上一共有30个地区,即30个变量;行上每个变量有10个特征xi(i从1到10),即10维。
1、读取外部文件数据
完整数据文件下载地址:/download/weixin_40857506/33474933
load gj.txt%把原始保存在纯文本文件gj.txt中的数据,读到MATLAB变量gj中
2、数据标准化
gj1=zscore(gj); %将原始数据gj进行z-score 标准化,为什么要标准化以及标准化方法见博主上一篇文章
3、计算相关系数矩阵(协方差矩阵)
r=corrcoef(gj1); %计算相关系数矩阵(协方差矩阵)%r=cov(gj1); %计算相关系数矩阵(协方差矩阵),两种方式计算结果相同
因为有10个特征,所以相关系数矩阵(协方差矩阵)是10维的,协方差矩阵计算公式如下:
因为原始数据gj已经标准化成新的数据gj1,所以gj1的协方差矩阵就是相关系数矩阵,相关系数矩阵主对角线上都是1,因为一个变量和自己的相关系数是1。相关系数矩阵r里大多数数据都是大于0.6的,说明原始变量之间的相关性很强,
下面利用相关系数矩阵r进行主成分分析,vec1的列为r的特征向量,即主成分的系数
4、计算特征向量、特征值及贡献率
[vec1,lambda,rate]=pcacov(r);%vec1为r的特征向量组成的矩阵,lambda为r的特征值组成的向量,rate为各个主成分的贡献率
Vec1中每一列就是一个特征向量,就是yk1,yk2,……,ykn
5、计算主成分
mean_gj1=mean(gj1);%求样本标准化后数据的均值[Row Col]=size(mean_gj1);%获取样本标准化后数据的行和列temp_gj1=repmat(mean_gj1,Row,1);%将均值由10行4列扩展到30行10列SCORE=(gj1-temp_gj1)*vec1;%样本(标准化后)的主成分pca_gj=vec1(:,1:4);%取主成分的前4列
Row=30, Col=10;
6、计算主成分得分
df=gj1*vec1(:,1:4); %计算30个样本前四个主成分的得分 tf=df*rate(1:4)/100;%计算综合得分[stf,ind]=sort(tf,'descend'); %sort就是排序的,把得分按照从高到低的次序排列
我们发现tf=stf,同时ind也刚好是降序排列的,说明第一个样本得分最高,且原来就是按照降序排列的。