主成分分析PCA详解及MATLAB实现

一、概念

(一)概念:

主成分分析:考察多个变量间相关性一种多元统计方法,研究如何通过少数几个主成分来揭示多个变量间的内部结构,即从原始变量中导出少数几个主成分,使它们尽可能多地保留原始变量的信息,且彼此间互不相关.通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。
主成分分析PCA详解及MATLAB实现_第1张图片

(二)原理步骤总结(前4步最重要)

1、标准化后的矩阵Z;
2、对标准化矩阵Z求相关系数矩阵;
3、求特征向量和特征值,贡献率;
4、根据贡献率降维,确定主成分,(X-m)×P即为降维到k维后的数据;
5、对k个主成分进行评价。

二、举例,以下面的数据为例:

主成分分析PCA详解及MATLAB实现_第2张图片
列上一共有30个地区,即30个变量;行上每个变量有10个特征xi(i从1到10),即10维。

1、读取外部文件数据

完整数据文件下载地址:https://download.csdn.net/download/weixin_40857506/33474933

load gj.txt     %把原始保存在纯文本文件gj.txt中的数据,读到MATLAB变量gj中

主成分分析PCA详解及MATLAB实现_第3张图片

2、数据标准化

gj1=zscore(gj);  %将原始数据gj进行z-score 标准化,为什么要标准化以及标准化方法见博主上一篇文章

主成分分析PCA详解及MATLAB实现_第4张图片

3、计算相关系数矩阵(协方差矩阵)

r=corrcoef(gj1); %计算相关系数矩阵(协方差矩阵)
%r=cov(gj1); %计算相关系数矩阵(协方差矩阵),两种方式计算结果相同

因为有10个特征,所以相关系数矩阵(协方差矩阵)是10维的,协方差矩阵计算公式如下:主成分分析PCA详解及MATLAB实现_第5张图片
主成分分析PCA详解及MATLAB实现_第6张图片
因为原始数据gj已经标准化成新的数据gj1,所以gj1的协方差矩阵就是相关系数矩阵,相关系数矩阵主对角线上都是1,因为一个变量和自己的相关系数是1。相关系数矩阵r里大多数数据都是大于0.6的,说明原始变量之间的相关性很强,

下面利用相关系数矩阵r进行主成分分析,vec1的列为r的特征向量,即主成分的系数

4、计算特征向量、特征值及贡献率

[vec1,lambda,rate]=pcacov(r);%vec1为r的特征向量组成的矩阵,lambda为r的特征值组成的向量,rate为各个主成分的贡献率

主成分分析PCA详解及MATLAB实现_第7张图片
Vec1中每一列就是一个特征向量,就是yk1,yk2,……,ykn
主成分分析PCA详解及MATLAB实现_第8张图片
主成分分析PCA详解及MATLAB实现_第9张图片

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列

在这里插入图片描述
主成分分析PCA详解及MATLAB实现_第10张图片
Row=30, Col=10;
主成分分析PCA详解及MATLAB实现_第11张图片
主成分分析PCA详解及MATLAB实现_第12张图片

6、计算主成分得分

df=gj1*vec1(:,1:4); %计算30个样本前四个主成分的得分 
tf=df*rate(1:4)/100;%计算综合得分
[stf,ind]=sort(tf,'descend'); %sort就是排序的,把得分按照从高到低的次序排列

主成分分析PCA详解及MATLAB实现_第13张图片
主成分分析PCA详解及MATLAB实现_第14张图片
主成分分析PCA详解及MATLAB实现_第15张图片
主成分分析PCA详解及MATLAB实现_第16张图片
我们发现tf=stf,同时ind也刚好是降序排列的,说明第一个样本得分最高,且原来就是按照降序排列的。

你可能感兴趣的:(matlab,矩阵,matlab,线性代数,机器学习)