A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

使用MATLAB实现主成分分析所使用的函数主要是【princomp函数】,本博客主要讲述代码实现及部分关键名词解释,理论部分请读者自行百度。


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

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

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

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

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

[size=13.3333px]coef:是系数矩阵。通过cofe可以知道x是怎样转换成score的。

[size=13.3333px]则模型为从原始数据出发:
score= bsxfun(@minus,x,mean(x,1))*coef;(作用:可以把测试数据通过此方法转变为新的坐标系)
逆变换:
x= bsxfun(@plus,score*inv(coef),mean(x,1))

例子:



  • %%



  • %清屏



  • clear



  • %%



  • %初始化数据



  • a=[-14.8271317103068,-3.00108550936016,1.52090778549498,3.95534842970601;-16.2288612441648,-2.80187433749996,-0.410815700402130,1.47546694457079;-15.1242838039605,-2.59871263957451,-0.359965674446737,1.34583763509479;-15.7031424565913,-2.53005662064257,0.255003254103276,-0.179334985754377;-17.7892158910100,-3.32842422986555,0.255791146332054,1.65118282449042;-17.8126324036279,-4.09719527953407,-0.879821957489877,-0.196675865428539;-14.9958877514765,-3.90753364293621,-0.418298866141441,-0.278063876667954;-15.5246706309866,-2.08905845264568,-1.16425848541704,-1.16976057326753;];



  • 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维。

[size=13.3333px]之前的错误认识:

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

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

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


转自:

http://www.cnblogs.com/sunwufan/archive/2011/08/31/2159952.html


1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马