傻瓜攻略(一)——MATLAB主成分分析(PCA)代码及结果分析实例

傻⽠攻略(⼀)——MATLAB主成分分析(PCA)代码及结果分析实例
主成分分析
主成分分析法(PCA)是⼀种⾼效处理多维数据的多元统计分析⽅法,将主成分分析⽤于多指标(变量)的综合评价较为普遍。笔者⾃从本科学习数学建模就开始接触该⽅法,但是⼀直没有系统地整理过,借这个机会总结⼀下,以备不时之需。
放弃是成功的第一步
该⽅法的基本思想是运⽤较少的变量去解释原始数据中的⼤部分变异,通过对原始数据相关矩阵内部结构关系的分析和计算,产⽣⼀系列互不相关的新变量。根据需要从中选取⽐原始变量个数少的⼏个新变量,这些新的变量就是所谓的主成分,它们能够充分解释原始数据的变化。因此,主成分分析法本质上是⼀种降维⽅法,也多被⽤于⾼维数据的降维处理。
主成分分析的步骤:原始数据(X1,X2,……, Xn)标准化,建⽴变量的相关系数阵,计算特征根和相应的特征向量,确定主成分的个数
k(k<n),建⽴主成分(F1,F2,……, Fk)的表达式,建⽴综合指标F的表达式。
数据
数据的形式⼀般为多个样本的多个指标,如下是18个输油管段在10个指标上的表现,即⼀个18*10的矩阵。将其保存到空⽩txt⽂件中并保存,作为程序的原始数据。下⾯的数据来源为论⽂《基于主成分-聚类分析法的管道风险评价⽅法》。
数据下载链接
链接:pan.baidu/s/18xfbTn16s-bEJwrNYpSpZQ
半耕半读
提取码:zy1f
MATLAB代码
代码相对简单,是从司守奎⼤神的《数学建模算法与应⽤》⼀书中学习到的,笔者只不过添加了⼀点注释,拾⼈⽛慧,惭愧惭愧。
将代码⽂件和txt⽂件放在⼀个⽂件夹中就可以。
clc,clear
data =load('gd.txt');%将原始数据保存在txt⽂件中
data=zscore(data);%数据的标准化
r=corrcoef(data);%计算相关系数矩阵r
%下⾯利⽤相关系数矩阵进⾏主成分分析,vec1的第⼀列为r的第⼀特征向量,即主成分的系数
[vec1,lamda,rate]=pcacov(r);%lamda为r的特征值,rate为各个主成分的贡献率
f=repmat(sign(sum(vec1)),size(vec1,1),1);%构造与vec1同维数的元素为±1的矩阵
vec2=vec1.*f;%修改特征向量的正负号,使得每个特征向量的分量和为正,即为最终的特征向量
num =max(find(lamda>1));%num为选取的主成分的个数,这⾥选取特征值⼤于1的
df=data*vec2(:,1:num);%计算各个主成分的得分
tf=df*rate(1:num)/100;%计算综合得分自由落体运动实验
[stf,ind]=sort(tf,'descend');%把得分按照从⾼到低的次序排列
stf=stf'; ind=ind';%stf为得分从⾼到低排序,ind为对应的样本编号中央排水系统
输出结果分析
代码输出的结果不少,下⾯按照主成分分析的步骤进⾏说明。可以结合运⾏结果来看这部分,表格不少就不贴了。sos国际救援组织
⾸先是数据标准化,主成分分析的结果直接受指标量纲的影响。由于各指标的单位可能不⼀样,因此进⾏量化评分得到的数据值⼤⼩也是不同的。如埋深的单位是⽶,相应指标在0.8到2.0之间,⽽⼈⼝密度指标的数据值在280左右,这样会导致分析结果的不准确。因此数据的标准化是主成分分析的前提条件,所以实际中可以先把各指标的数据标准化。标准化结果保存在data中。
完成数据的标准化后,对所得结果计算得到标准化数据的相关系数矩阵(相关系数矩阵保存在r中)。相关系数代表了不同指标之间的相关程度,绝对值越⼤代表相关性越⾼。相关性较⾼的变量之间存在信息上的重叠,信息重叠在很⼤程度上会影响评价结果的客观性,因此相关性矩阵可以证明进⾏主成分分析的必要性。
由相关系数矩阵可以计算出特征值与特征向量,计算得到与指标数量n相等的n个待选主成分。n个特征值代表了n个主成分对最终评价结果的贡献程度,特征值保存在lamda中,从⼤到⼩排列。主成分的特征向量为n*n的矩阵保存在vec1中,表⽰主成分和相应的原始数据的相关关系,其绝对值越⼤,则主成分对该指标的代表性越⼤。为了⽅便计算,修改特征向量的正负号,使得每个特征向量的分量和为正,即为最终的特征向量,特征向量保存在vec2中,每⼀列代表⼀个特征向量,对应⼀个主成分。
(待选择的)主成分——特征值——贡献率的对应情况见下表。
港口码头
在主成分的选取上,对应的特征值⼤⼩是⼀个重要衡量因素,普遍的做法是保存特征值要⼤于1的主成分,舍弃特征值⼩于1 的主成分,因此最终的主成分个数会⼩于指标个数n。也可以根据贡献度⼤⼩,累计贡献度达到某个程度,不同标准有70%以上,85%以上或其他。这⾥选取所有特征值⼤于1的主成分,选取的主成分个数保存在num中,⼀共有3个。第1主成分对应的就是vec2中的第⼀列特征
向量,以此类推,具体见下表。
将特征贡献率作为系数,对应的指标作为⾃变量,可以得出每⼀个主成分的计算表达式。将标准化数据Xi代⼊表达式,就可以得到对应的主成分值。形如(关于下⾯公式的⽣成,见⽂章)
将特征值lamda作为系数,对应的主成分作为⾃变量,可以确定综合评价值的表达式,F=L1F1+L2F2+……+LkFk,即
带⼊之前求得的主成分值,得到每个样本的综合评价值(保存在tf中)。将综合评价值从⾼到低排序(保存在stf中),并输出对应的样本编号(保存在ind中)。
其他实现⽅式
最近笔者还简单研究了⼀下的代码,和matlab相⽐各有特点,感兴趣的同学可以了解⼀下。

本文发布于:2024-09-21 13:38:15,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/414720.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:成分   指标   数据   结果   分析   标准化   特征向量
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议