oimz

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  PCA,Principal Component Analysis。是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。这是百度百科的一句话。个人对其的理解,这是一种减少干扰信息并用来区分数据的方法。

  比如小A和小B是一对双胞胎,小A的额头上有颗痣,而小B没有。此时,我们分辨这两个人只需要根据谁的额头上有痣即可,而无需关注两个人在其他方面的微小差别。

  人脸中长了痣,这是很形象的,且根据经验,人们会把这颗痣当做区分这对双胞胎的要素。而在现实生活的数据处理中,如向量,向量之间的区分点不是那么明显,而且机器也不会根据经验来判断哪些数据可以当做区分与其他向量的要素。针对这一问题,PCA被提了出来,PCA算法是一种无监督学习(unsupervised learning),无须事先训练则可以找到区分于其他数据的“痣”。

  关于PCA算法的步骤,网上到处都是而且很详细,而那些公式也大多是一样了。本文中便不再赘述,在这里只是做一下简单的介绍。首先我们有N个P维的向量要区分,X1,X2...Xn。P比较大,则处理所有向量的数据量较大,我们将其降至d维(d<P)。首先构造矩阵S=[X1,X2...Xn],算出协方差矩阵C(P维方阵),求出C的特征值T和特征向量V。将特征值按从大到小排列取出前d个特征值,并将这些特征值对应的特征向量构成一个投影矩阵L。使用S*L则得到降维后的提出主成分的矩阵。下面附上自己做的小实验。

  X1 = [1,2,4]   X2 = [10,4,5]  X3 = [100,8,4]

  根据经验上述3维向量中,第一维和第二维是区分的要素且第一维比第二维区分度更大。于是我们构造矩阵S,

  S = [1,2,4;10,4,5;100,8,5]

  计算出S的协方差矩阵C = COV(S),

  C =

  1.0e+003 *

    2.9970    0.1620    0.0180
    0.1620    0.0093    0.0013
    0.0180    0.0013    0.0003

  求出协方差矩阵C的特征值T和特征向量V,[T,V] = eig(C)

  T =

   -0.0235    0.0489   -0.9985
    0.5299   -0.8464   -0.0540
   -0.8478   -0.5303   -0.0060


  V =

  1.0e+003 *

   -0.0000         0         0
         0    0.0008         0
         0         0    3.0059

  取出第3个和第2个特征值以及相对应的特征向量构成投影矩阵L(实际上可以只取第三维)

  L =

   -0.9985    0.0489
   -0.0540   -0.8464
   -0.0060   -0.5303

  使用S*L则得到新的降维后的矩阵N

  N =

   -1.1305     -3.7651
  -10.2310    -5.5481
  -100.3120   -4.5327

  则提取出了可以用于区分的二维。

  初始PCA,不足之处还望多多指教。

posted on 2011-08-24 10:20  oimz  阅读(3184)  评论(0编辑  收藏  举报