PCA算法的各种实现

关于PCA算法的步骤,网上相关的资料很多。为了在实际应用中更好地使用PCA算法,一个健壮且高效的PCA算法实现的代码是非常有用的。

本人根据一些网络资料综合得出PCA算法的6种实现,旨在给对这方面有需要的人提供帮助。

实现一:matlab的princomp函数,具体见http://blog.csdn.net/qiuchangyong/article/details/70654022

实现二:在matlab里使用eig函数实现,这样更详细。

%X是4行8列的矩阵,表示样本数为4,维数为8

>> X=[28     8     8    34    11    26     5    40;
23     39    30    37    45    49    48    43;
0      15    13    22     7     3     0     4;
16     26    32     4    41    22    38    19]

X =

    28     8     8    34    11    26     5    40
    23    39    30    37    45    49    48    43
     0    15    13    22     7     3     0     4
    16    26    32     4    41    22    38    19

>> Y=X-repmat(mean(X),4,1)

Y =

   11.2500  -14.0000  -12.7500    9.7500  -15.0000    1.0000  -17.7500   13.5000
    6.2500   17.0000    9.2500   12.7500   19.0000   24.0000   25.2500   16.5000
  -16.7500   -7.0000   -7.7500   -2.2500  -19.0000  -22.0000  -22.7500  -22.5000
   -0.7500    4.0000   11.2500  -20.2500   15.0000   -3.0000   15.2500   -7.5000

%这里的3即样本数-1

>> C=Y'*Y/3

C =

  148.9167   21.0000   11.9167   80.7500   85.6667  177.3333  109.2500  212.5000
   21.0000  183.3333  145.0000    5.0000  242.0000  178.6667  299.3333   73.0000
   11.9167  145.0000  144.9167  -72.2500  227.6667  115.3333  269.2500   23.5000
   80.7500    5.0000  -72.2500  224.2500  -55.0000  142.0000  -36.2500  181.5000
   85.6667  242.0000  227.6667  -55.0000  390.6667  271.3333  469.0000  142.0000
  177.3333  178.6667  115.3333  142.0000  271.3333  356.6667  347.6667  309.0000
  109.2500  299.3333  269.2500  -36.2500  469.0000  347.6667  567.5833  191.5000
  212.5000   73.0000   23.5000  181.5000  142.0000  309.0000  191.5000  339.0000

>> [V,D]=eig(C)

V =

   -0.1342    0.0883   -0.5991    0.3063    0.3280    0.5260    0.3266    0.1749
    0.1039    0.1495   -0.5084    0.3515   -0.5041   -0.4653   -0.1630    0.2961
   -0.4935   -0.6821    0.1397    0.3642    0.0419    0.0008   -0.2781    0.2447
   -0.0500   -0.2763   -0.1759   -0.1961    0.4021   -0.6438    0.5227    0.0484
   -0.2808    0.0183   -0.2572   -0.7478   -0.0566    0.1057   -0.2536    0.4657
   -0.4398    0.5302    0.4541    0.1721   -0.0235   -0.1031    0.3071    0.4290
    0.6017   -0.0007    0.1871    0.1155    0.4457   -0.0139   -0.2497    0.5730
    0.3013   -0.3830    0.1576   -0.0969   -0.5220    0.2652    0.5434    0.3005

D =

  1.0e+003 *

   -0.0000         0         0         0         0         0         0         0
         0   -0.0000         0         0         0         0         0         0
         0         0   -0.0000         0         0         0         0         0
         0         0         0    0.0000         0         0         0         0
         0         0         0         0    0.0000         0         0         0
         0         0         0         0         0    0.1182         0         0
         0         0         0         0         0         0    0.6277         0
         0         0         0         0         0         0         0    1.6094

>> Y*V

ans =

    0.0000   -0.0000    0.0000   -0.0000   -0.0000    8.2819   30.4765  -17.4956
   -0.0000    0.0000    0.0000   -0.0000   -0.0000   -9.2663    8.5765   47.5771
   -0.0000    0.0000   -0.0000    0.0000    0.0000   -9.5006  -11.8355  -45.0906
    0.0000   -0.0000   -0.0000   -0.0000    0.0000   10.4850  -27.2175   15.0091

这是投影后的结果。

先讲到这里,还有其它的实现方法,待续。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值