张芷铭的个人博客

PCA 通过线性变换将高维数据投影到低维空间,在保留主要特征的同时降低计算复杂度。

数学原理

最大投影方差

投影后样本方差:$\omega^T \Sigma \omega$,其中 $\Sigma = \frac{1}{m} X X^T$ 是协方差矩阵。

优化目标: $$\max_\omega \ \omega^T \Sigma \omega \quad \text{s.t.} \quad |\omega|_2 = 1$$

解:$\Sigma \omega = \lambda \omega$,即 $\omega$ 是协方差矩阵的特征向量

协方差矩阵分解

$$\Sigma = U \Lambda U^T$$

前 $k$ 个特征向量构成投影矩阵,降维表示为: $$Z = X U_k$$

算法步骤

  1. 中心化:$X’ = X - \mu$
  2. 标准化:$X_{\text{norm}} = \frac{X’}{\sigma}$
  3. 计算协方差矩阵:$\Sigma = \frac{1}{m-1} X_{\text{norm}}^T X_{\text{norm}}$
  4. 特征分解:得到特征值和特征向量
  5. 选择主成分:累积贡献率 ≥ 95%
  6. 投影:$Z = X_{\text{norm}} U_k$

应用场景

场景降维目标保留主成分数
人脸识别特征提取50-200
高光谱图像数据压缩保留95%方差
金融风险分析消除多重共线性5-10

局限性

局限解决方案
仅捕捉线性相关性核PCA、流形学习
高方差特征主导必须标准化
解释性弱稀疏PCA
大数据计算复杂增量PCA、随机SVD

现代变体

方法特点
核PCA (KPCA)核函数映射处理非线性
增量PCA分批次处理大数据
稀疏PCAL1正则化提升解释性
自编码器神经网络非线性降维

代码示例

1
2
3
4
5
6
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

X_norm = StandardScaler().fit_transform(X)
pca = PCA(n_components=0.95)
Z = pca.fit_transform(X_norm)

Comments