主成分分析(PCA)详解(附带详细公式推导)

主成分分析(PCA)详解

第十一次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇的部分内容来自于网上资料,以及自己的一些见解。

预备知识:

这一部分首先介绍几何学中的投影长度计算以及线性代数中的协方差、矩阵的特征值与特征向量,最后介绍PCA的数据预处理和伸缩最大化问题。

计算投影长度

  图中,红色点表示样例 x i ,蓝色点表示在 u i 上的投影, u i 是直线的斜率也是直线的方向向量,而且是单位向量。蓝色点是在 u i 上的投影点,离原点的距离即为投影长度。即原向量 x i ,投影方向 u i ,投影长度为 x i T u i

协方差

   协方差计算公式:

   协方差矩阵:
  假设,二维空间上的三个点 x 1 = ( x 11 , x 12 ) x 2 = ( x 21 , x 22 ) x 3 = ( x 31 , x 32 ) ,令 d 1 = ( x 11 , x 21 , x 31 ) d 2 = ( x 12 , x 22 , x 32 ) ,则由这三个点组成的协方差矩阵可以表示为

[ c o v ( d 1 , d 1 ) c o v ( d 1 , d 2 ) c o v ( d 2 , d 1 ) c o v ( d 2 , d 2 ) ]

   Python中的协方差计算指令:
numpy.cov(参数rowvar控制行或列作为特征序列)

矩阵特征值与特征向量

  矩阵A与其转置矩阵的特征值和特征向量相同,具体证明见网上解释。

PCA之数据预处理

  为了方便计算投影点的方差,在进行PCA前,先将原数据中心化。这样方差就可以通过各点与原点间距离之和来计算。

伸缩比例最大化问题

  假设,存在矩阵 A ,和向量 x ,那么向量经过矩阵转换后的向量为 A x 。考虑这样一个问题: x 经过转换后的长度和原长度的比值,即 | | A x | | 2 | | x | | 2 的最大值是什么。令 A A T 的特征值记为 λ i ,其中 λ 1 λ 2 . . . 0 ,特征向量为 ξ i x 由特征向量组成的这组基得到,即 x = i = 1 n x i ξ i ,则可以推出以下不等式,

所以, | | A x | | 2 | | x | | 2 λ 1

推导过程

这部分首先从问题分析入手,之后会讲到目标函数转换并对目标函数存在最大值进行证明,最后求解目标函数。

问题分析

  从最大化投影后数据之间的方差这个角度出发,及最大可分性。假设矩阵 X R d × m 为原矩阵,矩阵 Z R d × m 为投影后得到的矩阵,矩阵 W R d × d 为投影矩阵。由【1】可知,投影点之间的方差即为各点到原点间的距离,即原向量与投影向量的内积绝对值之和。若令 w 1 为投影的第一主轴方向,则PCA的目标函数可以写做

目标函数转换

 然后,将向量内积进行等价替换,并将绝对值替换为平方值,替换后的等价目标函数如下所示

其中 i = 1 m ( x i T w 1 ) 2 经过如下变化

那么原目标函数变为

其中,

目标函数存在最大值(证明)

  上面推倒的目标函数式存在最大值的条件是, w 1 T X X T w 1 是半正定矩阵的二次型,即 X X T 是半正定的,需要满足以下两个条件:
  a.对称矩阵:
   由 ( X X T ) T = ( X T ) T X T = X X T 可知,条件成立。
  b.所有特征值均不小于0:
   假设 X X T 的特征值为 λ ,相应的特征向量为 ξ ,则存在以下递推

   由以上各式可知, λ 0 ,该条件成立。
  因此,目标函数存在最大值,下面对目标函数进行求解。

求解目标函数(求解)

  由于 w 1 T X X T w 1 =< X T w 1 , X T w 1 >= | | X T w 1 | | 2 2 = ( | | X T w 1 | | 2 | | w 1 | | 2 ) 2 ,可以将原目标函数转化为求得一个向量 w 1 使得上式得到最大化,转化为伸缩比例问题【5】,进而可以得知,最大值为 X X T 的最大的特征值,向量 w 1 即为该特征值对应的特征向量。PCA后数据保有的成分比例为 i = 1 d λ i i = 1 d λ i d 为主成分个数。

PCA伪代码

猜你喜欢

转载自blog.csdn.net/qq_40793975/article/details/81507677