主成分分析(PCA)算法:方差最大化与特征向量求解的降维过程
字数 2890 2025-12-13 23:18:06

主成分分析(PCA)算法:方差最大化与特征向量求解的降维过程

1. 题目描述

主成分分析(Principal Component Analysis, PCA)是一种经典的无监督降维和特征提取算法。它的核心目标是将高维数据投影到低维空间(主成分子空间),使得投影后的数据方差最大化,从而保留数据中的主要变化信息。这个过程通过计算数据的协方差矩阵及其特征值与特征向量来实现。我将详细讲解PCA的数学原理、协方差矩阵的计算、特征分解,以及降维的完整步骤。

2. 解题过程

步骤1:问题形式化与目标设定

假设我们有 \(n\) 个数据样本,每个样本是 \(d\) 维向量,组成数据矩阵 \(X \in \mathbb{R}^{n \times d}\)(通常每行是一个样本,每列是一个特征)。PCA的目标是找到一个正交投影矩阵 \(W \in \mathbb{R}^{d \times k}\)(其中 \(k < d\),且 \(W^T W = I\)),将原始数据 \(X\) 投影到低维空间 \(Z = X W \in \mathbb{R}^{n \times k}\),使得投影后数据的方差最大化。这里,\(W\) 的列向量就是主成分方向。

步骤2:数据预处理(中心化)

在进行PCA之前,必须对数据进行中心化处理,即减去每个特征的均值,以确保第一主成分描述的是数据的最大方差方向,而不是数据均值的位置。中心化过程如下:

计算每个特征的均值:\(\mu_j = \frac{1}{n} \sum_{i=1}^n X_{ij}\),其中 \(j = 1, \dots, d\)

然后,对每个样本的每个特征减去对应均值,得到中心化数据矩阵 \(\tilde{X}\)

\[\tilde{X}_{ij} = X_{ij} - \mu_j \]

之后的所有计算都基于 \(\tilde{X}\)(为简化符号,下文仍用 \(X\) 表示中心化后的数据)。

步骤3:方差最大化与协方差矩阵

我们希望最大化投影后数据的方差。投影到某个单位方向向量 \(w\)(即 \(||w||_2 = 1\))后的数据为 \(z = X w \in \mathbb{R}^n\)。其样本方差为:

\[\frac{1}{n} \sum_{i=1}^n z_i^2 = \frac{1}{n} z^T z = \frac{1}{n} w^T X^T X w \]

由于 \(n\) 是常数,最大化方差等价于最大化 \(w^T (X^T X) w\)

这里,\(X^T X \in \mathbb{R}^{d \times d}\) 是(非中心化的)协方差矩阵的 \(n\) 倍。通常,我们使用样本协方差矩阵:

\[\Sigma = \frac{1}{n-1} X^T X \]

在最大化方差时,常数因子不影响优化,因此我们直接针对 \(X^T X\) 求解。

步骤4:特征值分解求解主成分

因此,PCA的优化问题为:

\[\max_{w} \; w^T (X^T X) w \quad \text{s.t.} \quad w^T w = 1 \]

这是一个带有等式约束的优化问题,可以通过拉格朗日乘子法求解。构造拉格朗日函数:

\[\mathcal{L}(w, \lambda) = w^T (X^T X) w - \lambda (w^T w - 1) \]

\(w\) 求梯度并令为零:

\[\frac{\partial \mathcal{L}}{\partial w} = 2 X^T X w - 2 \lambda w = 0 \]

这得到:

\[X^T X w = \lambda w \]

这正是矩阵 \(X^T X\) 的特征值方程。因此,最优的投影方向 \(w\)\(X^T X\) 的特征向量,对应的特征值 \(\lambda\) 就是投影后数据的方差(乘以某个常数)。为了使方差最大化,我们应该选择最大特征值对应的特征向量作为第一主成分。

步骤5:计算所有主成分与降维

矩阵 \(X^T X\) 是对称半正定矩阵,可以进行特征值分解:

\[X^T X = W \Lambda W^T \]

其中,\(W = [w_1, w_2, \dots, w_d]\) 是正交矩阵,列向量 \(w_j\) 是特征向量(主成分方向);\(\Lambda = \text{diag}(\lambda_1, \lambda_2, \dots, \lambda_d)\) 是对角矩阵,特征值满足 \(\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_d \ge 0\)

为了降到 \(k\) 维,我们只需取前 \(k\) 个最大特征值对应的特征向量组成投影矩阵 \(W_k = [w_1, w_2, \dots, w_k]\)。然后,降维后的数据为:

\[Z = X W_k \]

这里,\(Z\) 的每一行是一个样本的 \(k\) 维表示。

步骤6:计算步骤总结

  1. 输入:数据矩阵 \(X \in \mathbb{R}^{n \times d}\),目标维度 \(k\)\(k \le d\))。
  2. 中心化:对每个特征列,减去其均值,得到中心化矩阵 \(X_c\)
  3. 计算协方差矩阵\(C = \frac{1}{n-1} X_c^T X_c\)(或用 \(X_c^T X_c\) 代替,不影响特征向量)。
  4. 特征值分解:对 \(C\) 进行特征值分解,得到特征值 \(\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_d\) 和对应的特征向量 \(w_1, w_2, \dots, w_d\)
  5. 选择主成分:取前 \(k\) 个特征向量组成 \(W_k = [w_1, w_2, \dots, w_k]\)
  6. 投影:计算降维数据 \(Z = X_c W_k\)
  7. 输出:降维后的数据 \(Z \in \mathbb{R}^{n \times k}\) 和投影矩阵 \(W_k\)

3. 补充说明

  • 方差解释率:每个主成分的方差解释率为 \(\lambda_i / \sum_{j=1}^d \lambda_j\),可用于选择 \(k\)(例如累计解释率 > 95%)。
  • 与SVD的关系:PCA也可以通过奇异值分解(SVD)计算。对中心化数据 \(X\) 进行SVD:\(X = U S V^T\),其中 \(V\) 的列就是 \(X^T X\) 的特征向量,即主成分方向,且 \(S^2/(n-1)\) 是特征值。因此,\(Z = U_k S_k\)\(Z = X V_k\) 是降维数据。
  • 应用:PCA常用于数据可视化、噪声过滤、特征提取及加速后续机器学习算法。
主成分分析(PCA)算法:方差最大化与特征向量求解的降维过程 1. 题目描述 主成分分析(Principal Component Analysis, PCA)是一种经典的无监督降维和特征提取算法。它的核心目标是将高维数据投影到低维空间(主成分子空间),使得投影后的数据方差最大化,从而保留数据中的主要变化信息。这个过程通过计算数据的协方差矩阵及其特征值与特征向量来实现。我将详细讲解PCA的数学原理、协方差矩阵的计算、特征分解,以及降维的完整步骤。 2. 解题过程 步骤1:问题形式化与目标设定 假设我们有 \(n\) 个数据样本,每个样本是 \(d\) 维向量,组成数据矩阵 \(X \in \mathbb{R}^{n \times d}\)(通常每行是一个样本,每列是一个特征)。PCA的目标是找到一个正交投影矩阵 \(W \in \mathbb{R}^{d \times k}\)(其中 \(k < d\),且 \(W^T W = I\)),将原始数据 \(X\) 投影到低维空间 \(Z = X W \in \mathbb{R}^{n \times k}\),使得投影后数据的方差最大化。这里,\(W\) 的列向量就是主成分方向。 步骤2:数据预处理(中心化) 在进行PCA之前,必须对数据进行中心化处理,即减去每个特征的均值,以确保第一主成分描述的是数据的最大方差方向,而不是数据均值的位置。中心化过程如下: 计算每个特征的均值:\(\mu_ j = \frac{1}{n} \sum_ {i=1}^n X_ {ij}\),其中 \(j = 1, \dots, d\)。 然后,对每个样本的每个特征减去对应均值,得到中心化数据矩阵 \(\tilde{X}\): \[ \tilde{X} {ij} = X {ij} - \mu_ j \] 之后的所有计算都基于 \(\tilde{X}\)(为简化符号,下文仍用 \(X\) 表示中心化后的数据)。 步骤3:方差最大化与协方差矩阵 我们希望最大化投影后数据的方差。投影到某个单位方向向量 \(w\)(即 \(||w|| 2 = 1\))后的数据为 \(z = X w \in \mathbb{R}^n\)。其样本方差为: \[ \frac{1}{n} \sum {i=1}^n z_ i^2 = \frac{1}{n} z^T z = \frac{1}{n} w^T X^T X w \] 由于 \(n\) 是常数,最大化方差等价于最大化 \(w^T (X^T X) w\)。 这里,\(X^T X \in \mathbb{R}^{d \times d}\) 是(非中心化的)协方差矩阵的 \(n\) 倍。通常,我们使用样本协方差矩阵: \[ \Sigma = \frac{1}{n-1} X^T X \] 在最大化方差时,常数因子不影响优化,因此我们直接针对 \(X^T X\) 求解。 步骤4:特征值分解求解主成分 因此,PCA的优化问题为: \[ \max_ {w} \; w^T (X^T X) w \quad \text{s.t.} \quad w^T w = 1 \] 这是一个带有等式约束的优化问题,可以通过拉格朗日乘子法求解。构造拉格朗日函数: \[ \mathcal{L}(w, \lambda) = w^T (X^T X) w - \lambda (w^T w - 1) \] 对 \(w\) 求梯度并令为零: \[ \frac{\partial \mathcal{L}}{\partial w} = 2 X^T X w - 2 \lambda w = 0 \] 这得到: \[ X^T X w = \lambda w \] 这正是矩阵 \(X^T X\) 的特征值方程。因此,最优的投影方向 \(w\) 是 \(X^T X\) 的特征向量,对应的特征值 \(\lambda\) 就是投影后数据的方差(乘以某个常数)。为了使方差最大化,我们应该选择最大特征值对应的特征向量作为第一主成分。 步骤5:计算所有主成分与降维 矩阵 \(X^T X\) 是对称半正定矩阵,可以进行特征值分解: \[ X^T X = W \Lambda W^T \] 其中,\(W = [ w_ 1, w_ 2, \dots, w_ d]\) 是正交矩阵,列向量 \(w_ j\) 是特征向量(主成分方向);\(\Lambda = \text{diag}(\lambda_ 1, \lambda_ 2, \dots, \lambda_ d)\) 是对角矩阵,特征值满足 \(\lambda_ 1 \ge \lambda_ 2 \ge \dots \ge \lambda_ d \ge 0\)。 为了降到 \(k\) 维,我们只需取前 \(k\) 个最大特征值对应的特征向量组成投影矩阵 \(W_ k = [ w_ 1, w_ 2, \dots, w_ k ]\)。然后,降维后的数据为: \[ Z = X W_ k \] 这里,\(Z\) 的每一行是一个样本的 \(k\) 维表示。 步骤6:计算步骤总结 输入 :数据矩阵 \(X \in \mathbb{R}^{n \times d}\),目标维度 \(k\)(\(k \le d\))。 中心化 :对每个特征列,减去其均值,得到中心化矩阵 \(X_ c\)。 计算协方差矩阵 :\(C = \frac{1}{n-1} X_ c^T X_ c\)(或用 \(X_ c^T X_ c\) 代替,不影响特征向量)。 特征值分解 :对 \(C\) 进行特征值分解,得到特征值 \(\lambda_ 1 \ge \lambda_ 2 \ge \dots \ge \lambda_ d\) 和对应的特征向量 \(w_ 1, w_ 2, \dots, w_ d\)。 选择主成分 :取前 \(k\) 个特征向量组成 \(W_ k = [ w_ 1, w_ 2, \dots, w_ k ]\)。 投影 :计算降维数据 \(Z = X_ c W_ k\)。 输出 :降维后的数据 \(Z \in \mathbb{R}^{n \times k}\) 和投影矩阵 \(W_ k\)。 3. 补充说明 方差解释率 :每个主成分的方差解释率为 \(\lambda_ i / \sum_ {j=1}^d \lambda_ j\),可用于选择 \(k\)(例如累计解释率 > 95%)。 与SVD的关系 :PCA也可以通过奇异值分解(SVD)计算。对中心化数据 \(X\) 进行SVD:\(X = U S V^T\),其中 \(V\) 的列就是 \(X^T X\) 的特征向量,即主成分方向,且 \(S^2/(n-1)\) 是特征值。因此,\(Z = U_ k S_ k\) 或 \(Z = X V_ k\) 是降维数据。 应用 :PCA常用于数据可视化、噪声过滤、特征提取及加速后续机器学习算法。