PCA(Principal Component Analysis)是一种常用的数据分析方法。前面转了一篇关于PCA原理的文章,其中有些部分写的不是很清晰,因此做一个补充。
方差和协方差
下图是一个正态分布,均值和方差提供了对数据在特征空间的分布进行衡量的手段。如图所示,大部分的数据都分布在 μ ± 3 σ \mu\pm3\sigma μ±3σ区间中。
而方差的计算公式如下,
σ ( x , x ) = E [ ( x − E ( x ) ) ( x − E ( x ) ) ] = E [ ( x − E ( x ) ) 2 ] \begin{aligned} \sigma(x,x) &=E[(x-E(x))(x-E(x))]\\ &=E[(x-E(x))^2] \end{aligned} σ(x,x)=E[(x−E(x))(x−E(x))]=E[(x−E(x))2]
从上式可以看出,方差只能用来表示数据平行于坐标轴(例如 x , y x,y x,y)的数据分布,考虑下图二维的数据分布,
借助上图中的数据,我们可以计算出 x x x方向的方差 σ ( x , x ) \sigma(x,x) σ(x,x),以及 y y y方向的方差 σ ( y , y ) \sigma(y,y) σ(y,y)。但是数据在 x x x和 y y y方向上的分布并没有描述出图中的对角线相关关系,这时候就有了协方差,利用协方差可以描述多维随机变量之间(多维特征空间)的相关关系,协方差的计算公式如下所示,
σ ( x , y ) = E [ ( x − E ( x ) ) ( y − E ( y ) ) ] \sigma(x,y)=E[(x-E(x))(y-E(y))] σ(x,y)=E[(x−E(x))(y−E(y))]
接下来,以二维数据为例,将计算的 x x x和 y y y方向方差以及 x , y x,y x,y的协方差,构成一个协方差矩阵,用 Σ \Sigma Σ表示,如下所示,
Σ = ( σ ( x , x ) σ ( x , y ) σ ( y , x ) σ ( y , y ) ) \Sigma = \begin{pmatrix} \sigma(x,x) & \sigma(x,y)\\ \sigma(y,x) & \sigma(y,y) \end{pmatrix} Σ=(σ(x,x)σ(y,x)σ(x,y)σ(y,y))
其中, σ ( x , y ) = σ ( y , x ) \sigma(x,y)=\sigma(y,x) σ(x,y)=σ(y,x),所以它是一个对称矩阵。对于二维特征空间,协方差矩阵为 2 × 2 2\times2 2×2,对于 N N N维特征空间,协方差矩阵为 N × N N\times N N×N。
下图展示了数据分布不同,对应的协方差矩阵的不同。
PCA
那么如何利用协方差矩阵去提取出数据的主成分?这里以二维为例,即在特征空间中找到某一向量(方向),如果将我们的所有数据投影到这个向量上,能保证数据的范围,即方差最大。
假如我们已经找到了向量 v ⃗ \vec{v} v ,我们的数据矩阵为 D D D(已经进行了Standardization,均值为0), D D D在向量 v ⃗ \vec{v} v 上的投影为 v ⃗ T D \vec{v}^TD v TD,投影后的数据的方差计算如下式所示(下面计算中都略去了对样本数的平均项 1 m \frac{1}{m} m1),
v ⃗ T D ( v ⃗ T D ) T = v ⃗ T D D T v ⃗ = v ⃗ T Σ v ⃗ \begin{aligned} \vec{v}^TD(\vec{v}^TD)^T&= \vec{v}^TDD^T\vec{v}\\ &=\vec{v}^T\Sigma\vec{v} \end{aligned} v TD(v TD)T=v TDDTv =v TΣv
上式中比较关键的一步是 D D T = Σ DD^T=\Sigma DDT=Σ(只有在我们的原始数据每一个维度,即feature,先经过feature scale,变为均值为0,才能得到这个结果)。
接下来我们的优化目标就是使得上式的方差取得最大值,在这里我们将向量 v ⃗ \vec{v} v 限定为单位长度,即 v ⃗ T v ⃗ = 1 \vec{v}^T\vec{v}=1 v Tv =1。
Rayleigh商
由于协方差矩阵 Σ \Sigma Σ是对称阵,则上述问题就转化为如下的Rayleigh商,
R ( v ⃗ ) = v ⃗ T Σ v ⃗ v ⃗ T v ⃗ R(\vec{v})=\frac{\vec{v}^T\Sigma\vec{v}}{\vec{v}^T\vec{v}} R(v )=v Tv v TΣv
由于协方差矩阵 Σ \Sigma Σ是对称阵,所以一定可以对角化进行特征分解。由定理可得, R ( v ⃗ ) R(\vec{v}) R(v )的最大值在矩阵 Σ \Sigma Σ对应最大特征值所对应的特征向量处取得。
m a x R ( v ⃗ ) = λ m a x m i n R ( v ⃗ ) = λ m i n \begin{aligned} maxR(\vec{v})=\lambda_{max}\\ minR(\vec{v})=\lambda_{min} \end{aligned} maxR(v )=λmaxminR(v )=λmin
至此,关于为何在PCA时需要对数据的协方差矩阵进行特征分解,然后取得主成分的原理已经介绍完毕。
下面是不同协方差矩阵时所进行的特征分解,
协方差为0,
协方差不为0,