MATLAB自带工具箱实现PCA降维代码

进行PCA降维,环境是MATLAB,

网上找了很多都是介绍PCA原理的,两篇介绍的不错的PCA 原理文章,只是想实现pCA的大可不必看.原理文章1 
原理文章2

下面开始介绍用MATLAB自带工具包函数pca(对应老版本函数princomp,在maltab里help princomp会提示你用pca代替他)进行降维的方法. 
直接上代码分析:

[pc,score,latent,tsquare] = pca(feature);%我们这里需要他的pc和latent值做分析
  • 1

feature是被降维的特征,每一行是一个特征,列数代表总的特征个数,比如一个图片的HOG特征是96维,总共有8000个HOG特征,那么feature的维度是8000×96,我们的目标就是将其降维(假设将96维降到50维,)那么我们期望的降维后feature就变成了我们需要的feature_after_PCA:8000×50

latent用来计算降维后取多少维度能够达到自己需要的精度, 
通过下面的代码运行结果可以得到取pc中对应每一维度对原始数据的精度:

cumsum(latent)./sum(latent)
    0.2763
    0.3954
    0.8765
    0.8854
    0.8931
    0.8995
    0.9055
    0.9111
    0.9808
    0.9819
    0.9828
    0.9838
    0.9846
    0.9854
    0.9862
    0.9869
    0.9876
    0.9883
    0.9999
    1.0000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

结果应该是有96维,但是太长,这里随机删减了一部分,我们可以看到只去取第一维的话和原始数据的准确度只有27%,很低,取全部的维度最后的精度就是100%,如果我们觉得精度达到90%就能接受的话我们就只需要取精度为90%对应的维度,这里假设第50维的精度是90%. 
因此我们需要取pc中的1:50列来做最后的变换矩阵:

tran=pc(:,1:50);
  • 1

因此我们最终的feature降维后的矩阵feature_after_PCA就通过下式计算:

feature_after_PCA=score(:,1:50);
 
    
  • 1

你可能感兴趣的:(MATLAB自带工具箱实现PCA降维代码)