PCA(协方差矩阵和奇异值分解两种方法求特征值特征向量)

1.问题描述  

在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在大多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。

 

2.过程

主成分分析法是一种数据转换的技术,当我们对一个物体进行衡量时,我们将其特征用向量(a1,a2,a3,...an)进行表示,每一维都有其对应的variance(表示在其均值附近离散的程度);其所有维的variance之和,我们叫做总的variance;我们对物体进行衡量时,往往其特征值之间是correlated的,比如我们测量飞行员时,有两个指标一个是飞行技术(x1),另一个是对飞行的喜好程度(x2),这两者之间是有关联的,即correlated的。我们进行PCA(主成分分析时),我们并没有改变维数,但是我们却做了如下变换,设新的特征为(x1,x2,x3...,xn);

其中

1)x1的variance占总的variance比重最大;

2)除去x1,x2的variance占剩下的variance比重最大;

....

依次类推;

最后,我们转换之后得到的(x1,x2,...xn)之间都是incorrelated,我们做PCA时,仅取(x1,x2,....xk),来表示我们测量的物体,其中,k要小于n。主成分的贡献率就是某主成分的方差在全部方差中的比值。这个值越大,表明该主成分综合X1,X2,…,XP信息的能力越强。如果前k个主成分的贡献率达到85%,表明取前k个主成分基本包含了全部测量指标所具有的信息,这样既减少了变量的个数又方便于对实际问题的分析和研究。

    注意,当(a1,a2,a3,...an)之间都是incorrelated时,我们就没有做PCA的必要了

 

数据点在上图所示的方向上进行投影后,数据仍然有着很大的variance,但在下图所示的方向上,投影后的数据的variance就很小。

我们所需要做的就是找到这一系列的向量,使得数据在其上的投影有着较大的variance。

 

3.数学描述

  为了能够找到这一系列的向量,我们对数据进行预处理



                          注意svd函数只适合行数大于列数的矩阵,如果行数小于列数,可对其转置矩阵做SVD分解            

                 A = U*S*V';   

而 (A'*A)*V  = (U*S*V')' * (U*S*V') * V          

                     = V*S'*U' * (U*S*V')*V         

                     = V*S'*(U'*U)*S* (V'*V)          

                     = V*(S'*S)*E*E (E是单位矩阵)         

                     = (S的平方)*V (S在对角线上才有值,其余全为0)....(2)

                    对照(1)(2)式我们可以看到,

                    A的SVD分解出来的V就是(A'*A)这个矩阵的特征向量!

                    所以PCA算法中我们不需要计算扩散矩阵(A'*A),对A进行SVD分解,

                    得到V,取V的前k个columns即可。

1) Alcohol
2) Malic acid
3) Ash
4) Alcalinity of ash
5) Magnesium
6) Total phenols
7) Flavanoids
8) Nonflavanoid phenols
9) Proanthocyanins
10)Color intensity
11)Hue
12)OD280/OD315 of diluted wines
13)Proline

样本数为130,在matlab下按照以上步骤,进行PCA,得到的特征值如下:


选取前k个特征值使得前k个主成分的贡献率达到85%,计算得到的结果为k=1,其对应的特征向量为u=


令X=X*u即可得到新的X,其中X原来维数为130×13,进行PCA后的维数为130×1。

阅读更多
换一批

没有更多推荐了,返回首页