1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > matlab 自带pca函数 matlab实现主成分分析 princomp函数 PCA中有这个函数

matlab 自带pca函数 matlab实现主成分分析 princomp函数 PCA中有这个函数

时间:2020-12-15 14:18:30

相关推荐

matlab 自带pca函数 matlab实现主成分分析 princomp函数 PCA中有这个函数

matlab实现主成分分析 princomp函数

最近看了些主成分分析,混迹Matlab论坛,翻了n多帖子,对princomp函数有了些了解。

在此只讲一些个人理解,并没有用术语,只求通俗。

贡献率:每一维数据对于区分整个数据的贡献,贡献率最大的显然是主成分,第二大的是次主成分......

[coef,score,latent,t2] = princomp(x);(个人观点):

x:为要输入的n维原始数据。带入这个matlab自带函数,将会生成新的n维加工后的数据(即score)。此数据与之前的n维原始数据一一对应。

score:生成的n维加工后的数据存在score里。它是对原始数据进行的分析,进而在新的坐标系下获得的数据。他将这n维数据按贡献率由大到小排列。(即在改变坐标系的情况下,又对n维数据排序)

latent:是一维列向量,每一个数据是对应score里相应维的贡献率,因为数据有n维所以列向量有n个数据。由大到小排列(因为score也是按贡献率由大到小排列)。

coef:是系数矩阵。通过cofe可以知道x是怎样转换成score的。

则模型为从原始数据出发:

score= bsxfun(@minus,x,mean(x,1))*coef;(作用:可以把测试数据通过此方法转变为新的坐标系)

逆变换:

x= bsxfun(@plus,score*inv(coef),mean(x,1))

下面通过一个例子来说明:

%%

%清屏

clear

%%

%初始化数据

a=[-14.[1**********]68,-3.[1**********]016,1.[1**********]498,3.[1**********]601;-16.[1**********]48,-2.[1**********]996,-0.[**************],1.[1**********]079;-15.[1**********]05,-2.[1**********]451,-0.[**************],1.[1**********]479;-15.[1**********]13,-2.[1**********]257,0.[**************],-0.[**************];-17.[1**********]00,-3.[1**********]555,0.[**************],1.[1**********]042;-17.[1**********]79,-4.[1**********]407,-0.[**************],-0.[**************];-14.[1**********]65,-3.[1**********]621,-0.[**************],-0.[**************];-15.[1**********]66,-2.[1**********]568,-1.[1**********]704,-1.[1**********]753;];

x=a;

%%

%调用princomp函数

[coef,score,latent,t2] = princomp(x);

score

%测试score是否和score_test一样

score_test=bsxfun(@minus,x,mean(x,1))*coef;

score_test

latent=100*latent/sum(latent)%将latent总和统一为100,便于观察贡献率

pareto(latent);%调用matla画图

上图是通过自带函数绘制,当贡献率累加至95%,以后的维数会不在显示,最多只显示10维。

下面用自己编写的表示:

之前的错误认识:

1.认为主成分分析中latent显示的贡献值是原始数据的,其实是加工后的数据的。解释:对原始数据既然选择PCA方法,那么计算机认为原始数据每维之间可能存在关联,你想去掉关联、降低维数。所以采用这种方法的。所以计算机并不关心原始数据的贡献值,因为你不会去用了,用的是加工后的数据(这也是为什么当把输入数据每一维的顺序改变后,score、latent不受影响的原因)。

2.认为PCA分析后自动降维,不对。PCA后会有贡献值,是输入者根据自己想要的贡献值进行维数的改变,进而生成数据。(一般大家会取贡献值在85%以上,要求高一点95%)。

3.PCA分析,只根据输入数据的特征进行主成分分析,与输出有多少类型,每个数据对应哪个类型无关。如果样本已经分好类型,那PCA后势必对结果的准确性有一定影响,我认为对于此类数据的PCA,就是在降维与准确性间找一个平衡点的问题,让数据即不会维数多而使运算复杂,又有较高的分辨率。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。