第十三讲 · PCA 与子空间学习

Views: --

主成分分析(Principal Component Analysis,PCA)要解决的问题是:高维数据里有大量相关和冗余信息,能否用更少的坐标表示数据,同时尽可能少地丢掉原有变化?

它给出的答案是一个线性子空间:把坐标轴旋转到数据最分散的方向,再只保留最重要的几个轴。

PCA 是一种通用特征提取方法。传统模式识别会先获取数据、预处理,再提取或选择特征,最后分类;人脸关键点等任务也能人工设计几何特征,但每种应用都要重新设计。PCA 的价值是只依赖数据协方差,就能给出统一的线性降维方案。课件还引用 Stone 对 1929–1938 年美国国民经济的研究:17 个收入与支出变量经 PCA 后,用 3 个新变量保留了约 97.4%97.4\% 的方差信息。

一、线性映射就是投影

pp 维向量 xx,沿单位方向 uu 的一维表示是

f=uTx.f=u^{\mathsf T}x.

若要降到 kk 维,取 kk 个单位正交方向组成矩阵

Uk=[u1,u2,,uk]Rp×k,U_k=[u_1,u_2,\ldots,u_k]\in\mathbb R^{p\times k},

低维坐标为

z=UkT(xμ).z=U_k^{\mathsf T}(x-\mu).

这里先减均值 μ\mu 非常重要:PCA 研究的是数据围绕均值的变化方向,而不是原点到数据云的方向。

二、为什么用协方差矩阵

给定 nn 个样本,均值和样本协方差矩阵为

μ=1ni=1nxi,\mu=\frac1n\sum_{i=1}^n x_i, Σ=1n1i=1n(xiμ)(xiμ)T.\Sigma=\frac1{n-1}\sum_{i=1}^n (x_i-\mu)(x_i-\mu)^{\mathsf T}.
  • 对角元素是每个原始维度的方差;
  • 非对角元素是两个维度的协方差;
  • Σ\Sigma 为实对称半正定矩阵,特征值非负,不同特征值对应的特征向量正交。

因此它恰好同时记录“每个方向变化多大”和“不同维度怎样一起变化”。

三、最大方差视角的推导

中心化后,样本沿 uu 投影的方差为

Var(uTx)=uTΣu.\operatorname{Var}(u^{\mathsf T}x) =u^{\mathsf T}\Sigma u.

第一主成分要求在 uTu=1u^{\mathsf T}u=1 下最大化它。构造拉格朗日函数

J(u)=uTΣuλ(uTu1).J(u)=u^{\mathsf T}\Sigma u-\lambda(u^{\mathsf T}u-1).

求导置零:

Ju=2Σu2λu=0Σu=λu.\frac{\partial J}{\partial u}=2\Sigma u-2\lambda u=0 \quad\Longrightarrow\quad \Sigma u=\lambda u.

最优方向必须是协方差矩阵的特征向量,投影方差正好等于对应特征值 λ\lambda。所以:

  1. 最大特征值对应第一主成分;
  2. 次大特征值对应第二主成分;
  3. 依次排列,且各方向正交、投影后互不相关。

四、最小重构误差视角

低维坐标 z=UkT(xμ)z=U_k^{\mathsf T}(x-\mu) 可以重构回原空间:

x^=μ+Ukz=μ+UkUkT(xμ).\hat x=\mu+U_kz =\mu+U_kU_k^{\mathsf T}(x-\mu).

若完整正交基的特征值满足

λ1λ2λp0,\lambda_1\ge\lambda_2\ge\cdots\ge\lambda_p\ge0,

只保留前 kk 个方向时,平均平方重构误差等于被丢弃特征值之和:

1n1ixix^i22=j=k+1pλj.\frac1{n-1}\sum_i\lVert x_i-\hat x_i\rVert_2^2 =\sum_{j=k+1}^p\lambda_j.

要让误差最小,就保留最大的特征值、丢掉最小的特征值。于是“最大保留方差”和“最小重构误差”得到同一个答案。

五、三点例子的完整计算

样本为

x1=(1,1)T,x2=(2,2)T,x3=(3,3)T.x_1=(1,1)^{\mathsf T},\quad x_2=(2,2)^{\mathsf T},\quad x_3=(3,3)^{\mathsf T}.

均值 μ=(2,2)T\mu=(2,2)^{\mathsf T},中心化后的样本为 (1,1)(-1,-1)(0,0)(0,0)(1,1)(1,1)。协方差矩阵是

Σ=131[2222]=[1111].\Sigma =\frac1{3-1} \begin{bmatrix} 2&2\\ 2&2 \end{bmatrix} = \begin{bmatrix} 1&1\\ 1&1 \end{bmatrix}.

特征值为 λ1=2\lambda_1=2λ2=0\lambda_2=0,对应单位特征向量可取

u1=12(1,1)T,u2=12(1,1)T.u_1=\frac1{\sqrt2}(1,1)^{\mathsf T}, \qquad u_2=\frac1{\sqrt2}(1,-1)^{\mathsf T}.

投影到第一主成分后,三个一维坐标为

z1=2,z2=0,z3=2.z_1=-\sqrt2,\quad z_2=0,\quad z_3=\sqrt2.

第二方向方差为零,说明所有点本来就在直线 x1=x2x_1=x_2 上。只用一维即可无损重构,维度减少一半。

课件还给出两个分别围绕 (5,5)(-5,-5)(5,5)(5,5) 分布的类别。两类的主要变化与均值差都大致沿 x1=x2x_1=x_2 方向,把二维压到这条对角线的一维坐标后,两团数据仍相距很远;垂直方向只保留各簇的小幅抖动。这个例子说明 PCA 在这里既降维又保住分类结构,但这并非必然,因为 PCA 本身不看类别标签。

六、怎样选择主成分个数

ii 个主成分的方差贡献率为

ri=λij=1pλj,r_i=\frac{\lambda_i}{\sum_{j=1}^p\lambda_j},

kk 个主成分的累计贡献率为

Rk=i=1kλij=1pλj.R_k=\frac{\sum_{i=1}^k\lambda_i}{\sum_{j=1}^p\lambda_j}.

课件给出的协方差矩阵

Σ=[120250002]\Sigma= \begin{bmatrix} 1&-2&0\\ -2&5&0\\ 0&0&2 \end{bmatrix}

具有特征值 5.83,2.00,0.175.83,2.00,0.17。第一主成分贡献率约为

5.835.83+2.00+0.17=72.875%,\frac{5.83}{5.83+2.00+0.17}=72.875\%,

前两个累计贡献率约为 97.875%97.875\%,超过常用的 95%95\% 阈值,因此可取 k=2k=2。更重要的是,第一特征向量的第三个分量为零,只取第一主成分会完全丢掉第三个原始变量的变化;这提醒我们不能只机械看一个贡献率数字。

特征值和还满足

i=1pλi=tr(Σ),\sum_{i=1}^p\lambda_i =\operatorname{tr}(\Sigma),

也就是原始各维总方差。计算完特征分解后可用它做 sanity check。

七、Eigenfaces:把图像当高维向量

一张 64×6464\times64 灰度人脸可以拉平成 40964096 维向量。不同像素高度相关,直接分类既昂贵又容易受冗余干扰。Eigenfaces 的流程是:

  1. 将所有训练人脸拉平并计算平均脸;
  2. 每张脸减去平均脸;
  3. 计算协方差矩阵并做特征值分解;
  4. 取前 kk 个特征向量组成“特征脸”;
  5. 把每张人脸投影成 kk 维系数,再进行识别。

可视化特征向量时看到的明暗脸形,并不是某个真实人物,而是训练人脸数据方差最大的变化模式。

八、预处理与局限

PCA 对尺度敏感。若“收入”以万元计、“年龄”以年计,方差较大的量纲可能支配结果。量纲不同且没有物理理由保留原尺度时,应先标准化;若各维本来同量纲,如图像像素,通常只需中心化。

PCA 还有三点局限:

  • 只能寻找线性子空间;
  • 不使用类别标签,最大方差方向未必最利于分类;
  • 大方差不一定等于重要信号,小方差方向也可能包含关键类别信息。

九、常见误区与 sanity check

  • 先中心化,再算协方差和投影。 忘记减均值是最常见错误。
  • 投影矩阵的列应是单位正交特征向量,满足 UkTUk=IU_k^{\mathsf T}U_k=I
  • 特征值应非负;数值计算出现极小负值通常是浮点误差,大幅负值说明计算有误。
  • PCA 让新特征不相关,但不保证统计独立;只有在高斯等额外条件下,不相关才可推出独立。
  • “保留 95%95\% 方差”是经验规则,不是所有任务的硬标准,最终仍要看下游性能。

评论