- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用 Matlab 编程实现主成分分析
概述
Matlab 言是当今国 上科学界 (尤其是自 控制 域 ) 最具影响力、也是
最有活力的 件。它起源于矩 运算,并已 展成一种高度集成的 算机 言。
它提供了 大的科学运算、 灵活的程序 流程、 高 量的 形可 化与界面
、与其他程序和 言的便捷接口的功能。 Matlab 言在各国高校与研究 位
起着重大的作用。主成分分析是把原来多个 量划 少数几个 合指 的一种
分析方法,从数学角度来看, 是一种降 理技 。
1.1 主成分分析计算步骤
① 算相关系数矩
r11
r12
r1 p
r21
r22
r2 p
R
r p1
r p 2
rpp
(1)
在(3.5.3)式中, r ij (
,
j=1
, ,?, ) 原 量的
xi
与
xj
之 的相关系
i
2
p
数,其 算公式
n
(xki
xi )( xkj
x j )
rij
k 1
n
n
(xki
xi ) 2
(xkj
x j ) 2
k
1
k
1
( 2)
因 R 是 称矩 (即 r ij =r ji ),所以只需 算上三角元素或下三角元素即可。
② 算特征 与特征向量
首先 解特 征方 程 I R 0
,通 常用 雅可 比法( Jacobi)求 出特 征
i (i 1,2, , p) ,并使其按大小 序排列,即12,
p 0 ;然后分 求
p
eij2
出 于特征 i 的特征向量 ei (i
1,2, , p) 。 里要求 ei
=1,即
1,其
j
1
eij 表示向量 ei 的第 j 个分量。
算主成分 献率及累 献率主成分 zi 的 献率
i
(i 1,2, , p)
p
k
k
1
累 献率
i
k
k
1
(i 1,2, , p)
p
k
1
k
一般取累 献率达 85 — 95% 的特征 1 , 2 , , m 所 的第一、第
二, ?,第 m(m≤ p)个主成分。
④ 算主成分 荷
其 算公式
lij p( zi , x j )
i eij (i , j 1,2, , p)
(3)
得到各主成分的载荷以后,还可以按照( 3.5.2)式进一步计算,得到各主成
分的得分
z11
z12
z1m
z21
z22
z2 m
Z
zn1
zn 2
znm
(4)
程序结构及函数作用
在软件 Matlab 中实现主成分分析可以采取两种方式实现:一是通过编程来
实现;二是直接调用 Matlab 种自带程序实现。下面主要主要介绍利用 Matlab 的
矩阵计算功能编程实现主成分分析。
2.1 程序结构
Cwprint.m 主函数
子函数
Cwstd.m Cwfac.m Cwscore.m
2.2 函数作用
Cwstd.m——用总和标准化法标准化矩阵
Cwfac.m——计算相关系数矩阵;计算特征值和特征向量;对主成分进行排
序;计算各特征值贡献率;挑选主成分(累计贡献率大于 85%),输出主成分个
数;计算主成分载荷
Cwscore.m——计算各主成分得分、综合得分并排序
Cwprint.m ——读入数据文件;调用以上三个函数并输出结果
源程序
3.1 cwstd.m 总和标准化法标准化矩阵
%cwstd.m, 用总和标准化法标准化矩阵
function std=cwstd(vector)
cwsum=sum(vector,1); %对列求和
[a,b]=size(vector); %矩阵大小 ,a 为行数 ,b 为列数
for i=1:a
for j=1:b
std(i,j)= vector(i,j)/cwsum(j);
end
end
3.2 cwfac.m 计算相关系数矩阵
%cwfac.m
function result=cwfac(vector);
fprintf( 相关系数矩阵 :\n)
std=CORRCOEF(vector) % 计算相关系数矩阵
fprintf( 特征向量 (vec) 及特征值 (val) : \n)
[vec,val]=eig(std) % 求特征值 (val) 及特征向量
newval=diag(val) ;
[y,i]=sort(newval) ; %对特征根进行排序,
(vec)
y 为排序结果,
i 为索引
fprintf( 特征根排序: \n)
for z=1:length(y)
newy(z)=y(length(y)+1-z);
end
fprintf(%g\n,newy)
rate=y/sum(y);
fprintf(\n 贡献率: \n)
newrate=newy/sum(newy)
sumrate=0;
newi=[];
原创力文档


文档评论(0)