从感性升华到理性看待pca原理
pca即主成分分析,常用来做数据降维。当我们有上千维数据的时候,我们希望对数据维度进行压缩,使得最后既保留绝大部分原始数据信息,又能降低数据维度,鱼和熊掌兼得。
感性认识:
其实,我们所说的数据信息就是数据间的差异。差异越大,所保留的信息就越丰富,区分度就越大,在数学表达上即为方差。也就是我们后续公式推导中,使方差最大化最终就能保留更多的信息。
如上图所示二维图像坐标,图中的蓝色点当然可以用二维坐标点进行区分,但是我们找到一个方差最大的方向,如图中红色箭头的方向,将各点映射到红色箭头方向,我们就可以用一维坐标表示这几个点,且可以保留很大的区分度。红色箭头这是理想情况下的一个方向,我们也可以取多个方向上的投影,尽可能多的保留信息。
理性推导:
还是以上述二维图像为例:假设上述各点用 x ⃗ i \vec x_i x i(行向量)表示,首先要将数据中心化,为的是后续方便计算协方差。则中心点坐标为 x ˉ \bar {x} xˉ= ∑ i n x ⃗ i n \frac{\sum_{i}^{n}\vec x_i}{n} n∑inx i,中心化后的坐标为 X ⃗ i \vec X_i X i= x ⃗ i − x ˉ \vec x_i-\bar x x i−xˉ。如下图所示,其中红色箭头 v ⃗ \vec v v 表示假设的方差最大方向。
考虑中心化后的数据点在 v ⃗ \vec v v 方向上的方差(其中 v ⃗ \vec v v 为单位列向量):
σ = ∑ i n ( X ⃗ i ⋅ v ⃗ − ∑ i n X ⃗ ⋅ v ⃗ n ) 2 n \sigma=\frac{\sum_{i}^{n}{(\vec X_i\cdot\vec v-\frac{\sum_{i}^{n}\vec X \cdot\vec v}{n}})^2}{n} σ=n∑in(X i⋅v −n∑inX ⋅v )2
而在经过数据中心化之后, ∑ i n X ⃗ ⋅ v ⃗ n \frac{\sum_{i}^{n}\vec X \cdot\vec v}{n} n∑inX ⋅v =0,因此,方差 σ = ∑ i n [ ( X ⃗ i ⋅ v ⃗ ) T ( X ⃗ i ⋅ v ⃗ ) ] n = v ⃗ T ( ∑ i n X ⃗ i T X ⃗ i n ) v ⃗ \sigma=\frac{\sum_{i}^{n}[(\vec X_i\cdot\vec v)^T(\vec X_i \cdot \vec v)]}{n}=\vec v^T(\frac{\sum_{i}^{n}\vec X_i^T\vec X_i}{n})\vec v σ=n∑in[(X i⋅v )T(X i⋅v )]=v T(n∑inX iTX i)v 。
其中, v ⃗ T v ⃗ = 1 \vec v^T \vec v=1 v Tv =1
可以看到, ( ∑ i n X ⃗ i T X ⃗ i n ) (\frac{\sum_{i}^{n}\vec X_i^T\vec X_i}{n}) (n∑inX iTX i)就是协方差矩阵,记为 Σ \Sigma Σ。
下面就是开始求解条件极值问题了,一般采用拉格朗日乘子法求解:
令 L = v ⃗ T Σ v ⃗ + λ ( 1 − v ⃗ T v ⃗ ) L = {\vec v^T}\Sigma \vec v + \lambda (1 - {\vec v^T}\vec v) L=v TΣv +λ(1−v Tv ),则 ∂ L ∂ v ⃗ = 2 Σ v ⃗ − 2 λ v ⃗ \frac{{\partial L}}{{\partial \vec v}} = 2\Sigma \vec v - 2\lambda \vec v ∂v ∂L=2Σv −2λv ,令 ∂ L ∂ v ⃗ = 0 \frac{{\partial L}}{{\partial \vec v}} =0 ∂v ∂L=0,则有 Σ v ⃗ = λ v ⃗ \Sigma \vec v = \lambda \vec v Σv =λv ,因此, v ⃗ \vec v v 是 Σ \Sigma Σ得特征向量,又因为 v ⃗ T Σ v ⃗ = v ⃗ T λ v ⃗ = λ {\vec v^T}\Sigma \vec v = {\vec v^T}\lambda \vec v = \lambda v TΣv =v Tλv =λ,由此看出,方差就是对应的特征值。选取最大特征值对应得特征向量组成转换矩阵,与原始数据矩阵相乘,即可得到降维后得数据。
代码部分后续奉上。