谈主成分分析/因子分析中的特征值“矩阵近似”

主成分分析和因子分析是数据降维的常用手段,其中以特征值为载体,在不断降维“近似”原本的协方差矩阵。

CSDN中一些文章在介绍这个问题或者叫“特征值分解”时,讲得都比较学术化,今天用一个小例子,还是面向新人,来引导理解“特征值分解”和“矩阵近似”(图像近似 也是同样的原理)。

在主成分分析和因子分析中,都是从协方差矩阵入手的。(PS:有的人会说数据先单位化,然后求出相关矩阵,随后从相关矩阵入手。其实,数值上是这样算,但是原理说的不对。主成分分析和因子分析的入手点一定是协方差矩阵,之所以能够使用相关系数矩阵,那是因为单位化后的数据,它的协方差矩阵和相关系数矩阵是相等的。)

咱们还是先介绍例子,然后再讲原理。如果你的理论基础好,后面的原理一看就明白了。

有一个单位化后的协方差矩阵如下:

1 0.8 0.6
0.8 1 0.4
0.6 0.4 1

它的3个特征值分别是如下:

特征值 2.21493472 0.6226418 0.16242348

3个特征值对应的单位化的特征向量如下(每一列对应一个特征值,与上面的特征值相对应):

特征向量
0.6345775 -0.1549789 0.75716113
0.5843738 -0.5449251 -0.6013018
0.5057852 0.82403773 -0.2552316

我们知道,原始矩阵可以使用特征向量矩阵加上特征值矩阵进行等价计算,也就是下面的公式:

其中,P 是这个矩阵 A 的特征向量组成的矩阵,Λ 是特征值组成的对角矩阵,Λ里面的特征值可以由大到小排列后面用。

由于原始矩阵A是对角矩阵,所以,由特征向量组成的矩阵P是正交矩阵。所以,P的逆矩阵P^(-1)就是P的转置矩阵P'。

这样,上面的公式就变为:

下面开始对原始协方差矩阵A的“近似”实验。

当我们用到全部3个特征值和对应的特征向量来计算时,这是一个100%对原始矩阵A进行了还原,即

 这个计算下得到的就是原始的矩阵A:

1 0.8 0.6
0.8 1 0.4
0.6 0.4 1

下面,我们不用3个特征值和特征向量,减少为用2个特征值和对应的特征向量,也就是:

 这个计算下得到的就是对原始矩阵A只采用2个特征值和特征向量进行近似的结果,近似的结果如下:

0.907 0.874 0.631
0.874 0.941 0.375
0.631 0.375 0.989

最后,我们不用2个特征值和特征向量,减少为只用1个特征值和对应的特征向量,也就是:

 这个计算下得到的就是对原始矩阵A只采用1个特征值和特征向量进行近似的结果,近似的结果如下:

0.892 0.821 0.711
0.821 0.756 0.655
0.711 0.655 0.567

可以看到,对原始矩阵A的“近似”效果来看,只采用1个特征值来近似,图像有点失真的太多了。而采用2个特征值来近似的矩阵结果,矩阵近似的还算可以。

接下来,谈一下采用2个特征值来近似的矩阵结果的方差解释占比为多少?用近似矩阵的主对角线求和=0.907+0.941+0.989=2.838。而原始矩阵A的主对角线求和=1+1+1=3。所以,近似矩阵的方差解释率为 2.838/3=94.6%,这个数值也就是最大的2个特征值之和除以3的结果,即 (2.21493472+0.6226418)/3=94.6%。

这就是利用特征值对原始协方差矩阵进行不同“像素”近似的结果。

所以,关于数据降维,我们可以从多个角度去理解这件事,而上面提到的比较直观的矩阵“近似”的角度,从学术上讲不一定很严谨,但是对于给新手一个直观的感性认识,那是相当有帮助的,供新人参考。

  (精算部落)

你可能感兴趣的:(矩阵,线性代数,python)