前置知识

向量内积

数学公式:

(a1,a2,⋯ ,an)⋅(b1,b2,⋯ ,bn)T=a1b1+a2b2+⋯+anbn(a_1, a_2, \cdots, a_n) \cdot (b_1, b_2, \cdots, b_n)^\mathrm{T} = a_1 b_1 + a_2 b_2 + \cdots + a_n b_n

当 B 为单位向量时,A 与 B 的内积值等于 A 向 B 所在直线投影的标量大小。

基变换

基:类比于我们所知的X,Y坐标轴,如果我们需要描述向量,首先需要确定一组基,然后给出基所在直线上的投影值。

假设我们在二维平面上有一个向量(数据点)x=(3,2)x = (3, 2)。

  1. 准备一组全新的单位正交基:u1=(12,12)u_1 = \left( \frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}} \right) u2=(−12,12)u_2 = \left( -\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}} \right)

  2. 计算在新基上的坐标:

新坐标的第一个数 y1y_1(在 u1u_1 轴上的投影):

y1=u1⋅x=(12)×3+(12)×2=52y_1 = u_1 \cdot x = \left( \frac{1}{\sqrt{2}} \right) \times 3 + \left( \frac{1}{\sqrt{2}} \right) \times 2 = \frac{5}{\sqrt{2}}

新坐标的第二个数 y2y_2(在 u2u_2 轴上的投影):

y2=u2⋅x=(−12)×3+(12)×2=−12y_2 = u_2 \cdot x = \left( -\frac{1}{\sqrt{2}} \right) \times 3 + \left( \frac{1}{\sqrt{2}} \right) \times 2 = -\frac{1}{\sqrt{2}}

所以,数据点 (3,2)(3, 2) 在新坐标系下的新坐标就是:

(52,−12)\left( \frac{5}{\sqrt{2}}, -\frac{1}{\sqrt{2}} \right)

  1. 注意到上面的内积运算,正好可以打包写成矩阵乘以向量的形式:

(1212−1212)(32)=(52−12)\begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{pmatrix} \begin{pmatrix} 3 \\ 2 \end{pmatrix} = \begin{pmatrix} \frac{5}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} \end{pmatrix}

我们可以把它写成通用的表示形式:

(p1p2⋮pR)(a1a2⋯aM)=(p1a1p1a2⋯p1aMp2a1p2a2⋯p2aM⋮⋮⋱⋮pRa1pRa2⋯pRaM)\begin{pmatrix} p_1 \\ p_2 \\ \vdots \\ p_R \end{pmatrix} \begin{pmatrix} a_1 & a_2 & \cdots & a_M \end{pmatrix} = \begin{pmatrix} p_1 a_1 & p_1 a_2 & \cdots & p_1 a_M \\ p_2 a_1 & p_2 a_2 & \cdots & p_2 a_M \\ \vdots & \vdots & \ddots & \vdots \\ p_R a_1 & p_R a_2 & \cdots & p_R a_M \end{pmatrix}

其中 pip_i 是一个行向量,表示第 ii 个基,aja_j 是一个列向量,表示第 jj 个原始数据记录。实际上就是把逐个向量的内积运算打包成了矩阵运算。

上述分析给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列向量 aja_j 变换到左边矩阵中以每一行向量为基所表示的空间中去。也就是说,一个矩阵可以表示一种线性变换。

特征值和特征向量

在线性代数中,矩阵代表一种空间变换(比如旋转、拉伸、剪切等)。用一个矩阵去乘以一个向量时,绝大多数向量的方向和长度都会发生改变。但对于某些“特殊”的向量,矩阵作用在它们身上时,方向保持不变(或反向),只有长度被缩放。

  • 特征向量(Eigenvector):方向保持不变的特殊向量,代表矩阵变换中的“不变轴”或“主导方向”。
  • 特征值(Eigenvalue):这个向量被缩放的倍数,代表矩阵在这个方向上的“作用强度”或“能量大小”。

方差

我们知道数值的分散程度,可以用数学上的方差来表述。一个变量的方差可以看做是每个元素与变量均值的差的平方和的均值,即:

Var(a)=1M∑i=1M(ai−μ)2Var(a) = \frac{1}{M} \sum_{i=1}^{M} (a_i - \mu)^2

协方差

在一维空间中我们可用方差来表示数据的分散程度。而对于高维数据,我们用协方差进行约束,协方差可以表示两个变量的相关性。为了让两个变量尽可能表示更多的原始信息,我们希望它们之间不存在线性相关性,因为相关性意味着两个变量不是完全独立,必然存在重复表示的信息。

协方差公式为:

Cov(a,b)=1M∑i=1M(ai−μa)(bi−μb)Cov(a, b) = \frac{1}{M} \sum_{i=1}^{M} (a_i - \mu_a)(b_i - \mu_b)

其中 MM 为样本数。统计上的无偏估计使用 1M−1\frac{1}{M-1},但这个常数系数只会整体缩放协方差矩阵,不影响其特征向量,下文推导统一使用 1M\frac{1}{M}。

PCA降维原理

PCA(Principal Component Analysis)是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。

  1. 用矩阵变换实现降维:两个矩阵相乘 Y=PXY = P X,可以让基的数量 KK(PP 的行数)小于原始特征维度 NN(XX 的行数),从而实现特征降维。
  2. 选择方差最大的方向:数据在降维后的新基(新坐标轴)上要尽可能分散(即方差最大化),这样才能保留最多的原始信息,避免数据混在一起无法区分。
  3. 消除冗余(两两协方差为 0):为了让新特征之间不包含重复的信息,任意两个新基上的数据必须不相关(即协方差为 0)。在几何上,这意味着新选出的 KK 个基必须相互正交。

PCA降维推导

一、问题定义与预处理

1. 数据表示

假设有 MM 个样本,每个样本包含 NN 个特征。我们将第 ii 个样本表示为一个 NN 维的列向量:

xi=[xi1xi2⋮xiN]∈RN(i=1,2,…,M)x_i = \begin{bmatrix} x_{i1} \\ x_{i2} \\ \vdots \\ x_{iN} \end{bmatrix} \in \mathbb{R}^N \quad (i = 1, 2, \dots, M)

2. 去均值化(中心化)

为什么 PCA 必须去均值?

  1. 定位几何中心:平移数据使得数据的几何中心位于坐标原点,确保新坐标轴穿过数据中心,而不是被原点偏移“拉歪”。
  2. 满足代数定义:只有在均值为 0 时,矩阵积 1MXXT\frac{1}{M} X X^{\mathrm{T}} 才严格等于数据的协方差矩阵,使得后续的特征值分解数学推导成立。
  3. 过滤无关信息:剥离整体绝对偏移(均值),只关注样本之间的相对变化(方差)。

为了简化后续计算,计算所有样本的均值向量 μ=1M∑i=1Mxi\mu = \frac{1}{M} \sum_{i=1}^M x_i,并将每个样本减去均值:

xi←xi−μx_i \leftarrow x_i - \mu

预处理后,数据的均值为零向量,即:

1M∑i=1Mxi=0\frac{1}{M} \sum_{i=1}^M x_i = \mathbf{0}

3. 降维的目标

寻找一个低维空间(维数为 KK,且 K<NK < N),将 NN 维向量 xix_i 映射为 KK 维向量 yiy_i,同时满足:

  1. 信息损失最小(即数据投影后的方差最大)。
  2. 降维后的 KK 个特征之间互不相关(即协方差为 0)。

二、单维度投影推导(求解第一个方向)

先不考虑降到 KK 维,只考虑降到 1 维。即:寻找一个最佳的方向向量 w∈RNw \in \mathbb{R}^N。

1. 计算投影值

为了保证方向不因向量长度改变,限制 ww 为单位向量:

wTw=1w^T w = 1

上标 TT 表示转置(Transpose)。

  • 在数学中,向量 w\mathbf{w} 通常默认是列向量(比如 w=[w1w2]\mathbf{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix})。

  • 转置后,wT\mathbf{w}^T 就变成了行向量(比如 [w1w2][w_1 \quad w_2])。

这样做是为了进行矩阵乘法(内积运算)。因为行向量乘以列向量,结果是一个标量(数值)。

样本 xix_i 投影到方向 ww 上的投影标量值为:

yi=wTxiy_i = w^T x_i

2. 计算投影后的均值与方差

由于数据已经去均值(∑xi=0\sum x_i = \mathbf{0}),投影后数据 yiy_i 的均值也是 0:

yˉ=1M∑i=1Myi=1M∑i=1MwTxi=wT(1M∑i=1Mxi)=0\bar{y} = \frac{1}{M} \sum_{i=1}^M y_i = \frac{1}{M} \sum_{i=1}^M w^T x_i = w^T \left( \frac{1}{M} \sum_{i=1}^M x_i \right) = 0

投影后数据的方差(记为 Var\text{Var})公式为:

Var=1M∑i=1M(yi−yˉ)2=1M∑i=1M(wTxi)2\text{Var} = \frac{1}{M} \sum_{i=1}^M (y_i - \bar{y})^2 = \frac{1}{M} \sum_{i=1}^M (w^T x_i)^2

3. 引入协方差矩阵

展开方差公式中的平方项(利用标量的转置等于其本身,即 wTxi=xiTww^T x_i = x_i^T w):

Var=1M∑i=1M(wTxi)(xiTw)=wT(1M∑i=1MxixiT)w\text{Var} = \frac{1}{M} \sum_{i=1}^M (w^T x_i)(x_i^T w) = w^T \left( \frac{1}{M} \sum_{i=1}^M x_i x_i^T \right) w

转置公式:(AB)T=BTAT(AB)^T=B^TA^T

定义原始数据的协方差矩阵 C∈RN×NC \in \mathbb{R}^{N \times N} 为:

C=1M∑i=1MxixiTC = \frac{1}{M} \sum_{i=1}^M x_i x_i^T

为了直观,假设数据只有 2 个特征(比如 xi=[aibi]x_i = \begin{bmatrix} a_i \\ b_i \end{bmatrix},其中 aia_i 是第 ii 个人的身高,bib_i 是体重,且已经去均值):

xixiTx_i x_i^T 的计算结果为:

xixiT=[aibi][aibi]=[ai2aibibiaibi2]x_i x_i^T = \begin{bmatrix} a_i \\ b_i \end{bmatrix} \begin{bmatrix} a_i & b_i \end{bmatrix} = \begin{bmatrix} a_i^2 & a_i b_i \\ b_i a_i & b_i^2 \end{bmatrix}

再把它乘以 1M∑i=1M\frac{1}{M} \sum_{i=1}^{M}(即对所有样本求平均):

C=1M∑i=1MxixiT=[1M∑ai21M∑aibi1M∑biai1M∑bi2]C = \frac{1}{M} \sum_{i=1}^{M} x_i x_i^T = \begin{bmatrix} \frac{1}{M} \sum a_i^2 & \frac{1}{M} \sum a_i b_i \\ \frac{1}{M} \sum b_i a_i & \frac{1}{M} \sum b_i^2 \end{bmatrix}

因为数据均值为 0,根据统计学定义:

  1. 1M∑ai2\frac{1}{M} \sum a_i^2 就是身高 aa 的方差。
  2. 1M∑bi2\frac{1}{M} \sum b_i^2 就是体重 bb 的方差。
  3. 1M∑aibi\frac{1}{M} \sum a_i b_i 就是身高 aa 和体重 bb 的协方差。

由公式可知,CC 是一个实对称矩阵(CT=CC^T = C)。
代入后,投影方差简化为:

Var=wTCw\text{Var} = w^T C w

三、极值求解(使用拉格朗日乘子法)

目标:寻找 ww,使得方差 wTCww^T C w 最大,同时满足约束条件 wTw=1w^T w = 1。

1. 建立拉格朗日函数

引入乘子 λ\lambda,构造目标函数:

f(w,λ)=wTCw−λ(wTw−1)f(w, \lambda) = w^T C w - \lambda (w^T w - 1)

2. 对 ww 求导并令其为零

利用向量微分法则(因为 CC 是实对称矩阵,∂(wTCw)∂w=2Cw\frac{\partial (w^T C w)}{\partial w} = 2Cw):

∂f∂w=2Cw−2λw=0\frac{\partial f}{\partial w} = 2 C w - 2 \lambda w = 0

化简得到:

Cw=λwC w = \lambda w

结论 1:使得方差取得极值的方向向量 ww,必须是协方差矩阵 CC 的特征向量,而 λ\lambda 是对应的特征值。

3. 特征值与方差的关系

将 Cw=λwC w = \lambda w 代回方差表达式:

Var=wTCw=wT(λw)=λ(wTw)\text{Var} = w^T C w = w^T (\lambda w) = \lambda (w^T w)

因为约束条件 wTw=1w^T w = 1,所以:

Var=λ\text{Var} = \lambda

结论 2:数据在方向 ww 上的投影方差,严格等于协方差矩阵 CC 的特征值 λ\lambda。

因此,为了使投影方差最大,我们应当选择最大的特征值 λ1\lambda_1,其对应的特征向量 w1w_1 就是最佳的投影方向。

四、推广到 KK 维投影

要求出降维后的 KK 个维度,我们需要按顺序求解 KK 个单位正交方向 w1,w2,…,wKw_1, w_2, \dots, w_K。

  1. 第一个方向 w1w_1:取最大的特征值 λ1\lambda_1 对应的特征向量,使得第一个维度方差最大。
  2. 第二个方向 w2w_2:在约束 w2Tw2=1w_2^T w_2 = 1 以及与 w1w_1 正交的约束 w2Tw1=0w_2^T w_1 = 0 下,最大化 w2TCw2w_2^T C w_2。
    同样通过拉格朗日乘子法求解,可得 Cw2=λ2w2C w_2 = \lambda_2 w_2。
    为了使方差尽可能大,取第二大特征值 λ2\lambda_2 对应的特征向量 w2w_2。
  3. 第 KK 个方向 wKw_K:依次取前 KK 个最大的特征值 λ1≥λ2≥⋯≥λK\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_K 对应的单位特征向量 w1,w2,…,wKw_1, w_2, \dots, w_K。

因为 CC 是实对称矩阵,不同特征值对应的特征向量自动相互正交(wiTwj=0,∀i≠jw_i^T w_j = 0, \forall i \neq j),这天然满足了“新变量之间协方差为 0”的要求。

五、最终降维计算

将选出的前 KK 个特征向量组合成变换矩阵 W∈RK×NW \in \mathbb{R}^{K \times N}:

W=[w1Tw2T⋮wKT]W = \begin{bmatrix} w_1^T \\ w_2^T \\ \vdots \\ w_K^T \end{bmatrix}

对于任意一个 NN 维数据点 xix_i,其降维后的 KK 维向量 yi∈RKy_i \in \mathbb{R}^K 计算如下:

yi=Wxiy_i = W x_i

矩阵形式下,整个数据集矩阵 X∈RN×MX \in \mathbb{R}^{N \times M} 的降维结果矩阵 Y∈RK×MY \in \mathbb{R}^{K \times M} 为:

Y=WXY = W X

性质

  1. 缓解维度灾难:PCA 算法通过舍去一部分信息之后能使得样本的采样密度增大(因为维数降低了),这是缓解维度灾难的重要手段;
  2. 降噪:当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;
  3. 过拟合:PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能加剧了过拟合;
  4. 特征去相关:PCA 将数据压缩到低维,同时使降维之后的各特征互不相关(协方差为 0)。

参考来源

https://zhuanlan.zhihu.com/p/77151308