1. 简介

顾名思义,主成分分析(Principal Component Analysis,PCA)是用于提取模型中“主要”特征的一种方法。

在本教程中,我们将从三个不同层面来讲解PCA:

  1. 应用层面:PCA能提供哪些信息?我们如何利用这些信息?
  2. 实现层面:如何编写PCA程序?涉及哪些核心算法?
  3. 原理层面:PCA背后的数学和几何直觉是什么?

2. PCA 概述

假设我们有一个包含大量参数的数据集,其中一些参数对模型有显著影响,而另一些则毫无意义。

举个例子,在预测天气时,“星期几”这个参数可能没有意义,但“日期”可能有意义。也许更好的参数是“月份”或“季节”。当然还有温度、气压、风向、昨天的天气等其他参数。

关键在于:我们有很多参数可选。虽然我们可以凭经验选择“合理”的参数,但更科学的做法是使用一种定量方法来自动选择最优参数。

这就是主成分分析(PCA)的作用。它是一种定量方法,能帮助我们找到描述系统行为的最佳参数。

3. 奥卡姆剃刀原理与PCA

奥卡姆剃刀原理(Occam’s Razor)的核心是“如无必要,勿增实体”。

在建模中,这意味着我们应该优先使用简单模型。而PCA正是这种思想的体现:它帮助我们找到一组“足够好”的坐标,用来解释我们建模的数据。

简化模型不仅更美观,还能提升分析效率和结果质量。聚焦于关键参数(如PCA提供的主成分)几乎在任何数据分析技术中都能提高性能。包含无关参数只会降低效率,并引入噪声。

4. 主成分是什么?

4.1. 二维数据示例

我们来看一个二维数据的例子:

Q7HIP

从图中可以看出,这些点大致呈椭圆形分布,说明x和y之间存在某种相关性。随着x的增加,y也倾向于增加。

我们可以通过绘制一条穿过这些点“主方向”的直线来量化这种关系,这条线就是主成分

4.2. 主成分是否足够?

我们可以提出一个定量问题:“主成分是否足够?”与主成分垂直的方向(即正交方向)代表如果我们只使用主成分进行建模时可能产生的误差。

  • ✅ 如果误差很小,说明主成分足以解释数据,模型可以从2维简化为1维。
  • ❌ 如果误差较大,则说明我们需要保留更多维度。

4.3. 如何找到主成分?

我们首先计算所有点的中心点(即x和y的均值),然后以该点为原点建立新坐标系。接着旋转坐标轴,直到与主成分垂直方向的误差最小。

当主成分穿过椭圆长轴时,误差最小,此时我们找到了主成分的位置。

4.4. 新的坐标系

PCA的结果是找到一个新的坐标系,该坐标系以数据点的均值为中心,并旋转到最佳方向。

在二维例子中,新的x轴沿主成分方向旋转,表示“穿过点集的最佳直线”:

PrincipleComponent

图中每个点在原始坐标系和新坐标系中都可以表示,只是数值不同。

4.5. 坐标旋转

坐标旋转是无损的,只是表示方式不同。例如,在原始坐标系中,点(1,1)在新坐标系中变为(√2, 0),说明x和y之间存在强相关性。

旋转后的坐标系中,y值接近于零,说明我们可以通过保留x值来近似整个数据。

4.6. PCA结果:成分向量

PCA的输出是一组正交单位向量,指向每个主成分的方向。

在二维例子中,PCA给出两个单位向量:

$$ \left(\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}\right), \quad \left(-\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}\right) $$

第一个向量指向主成分方向,第二个与其垂直。

将这些向量作为行组成一个矩阵T,就得到了从原始坐标到新坐标的变换矩阵:

$$ T = \begin{pmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\ -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix} $$

乘以原始坐标即可得到新坐标。

4.7. 降维

PCA在n维空间中会生成一组“优化后的”单位向量。每个向量都有一个对应的特征值λ,表示该方向对数据的解释能力。

  • ✅ 第一主成分具有最大λ值。
  • ❌ λ值越小,说明该方向解释能力越弱。

我们可以通过保留前m个主成分(m < n)来实现降维。保留的主成分越多,数据保留的信息越多。

我们还可以通过以下公式计算每个主成分解释的数据比例:

$$ \text{解释比例} = \frac{\lambda_i}{\sum_j^n \lambda_j} $$

5. PCA 的实现步骤

5.1. 数据格式化为矩阵

将数据组织成一个矩阵,每行表示一个对象,每列表示一个参数。例如UCI Iris数据集有5个属性:

  1. 花萼长度(cm)
  2. 花萼宽度(cm)
  3. 花瓣长度(cm)
  4. 花瓣宽度(cm)
  5. 类别(Setosa, Versicolour, Virginica)

类别属性是非数值的,但可以映射为数字(如1, 2, 3)。

5.2. 数据均值归一化

PCA要求数据按列中心化(即每列减去该列均值)。

例如,原始数据为:

5.1, 3.5, 1.4, 0.2, 1

减去均值后变为:

-0.74, 0.45, 2.36, -1, -1

5.3. PCA 算法步骤

  1. 构建数据矩阵;
  2. 对矩阵按列进行均值归一化;
  3. 计算协方差矩阵;
  4. 计算协方差矩阵的特征向量和特征值;
  5. 根据特征值大小选择前m个主成分;
  6. 返回降维后的数据。

伪代码如下:

algorithm PCA(dataset):
    dataMatrix <- FormDataAsMatrix(dataset)
    meanAdjustedMatrix <- AdjustMatrixToMean(dataMatrix)
    transposedMatrix <- TransposeMatrix(meanAdjustedMatrix)
    covarianceMatrix <- Multiply(meanAdjustedMatrix, transposedMatrix)
    (eigenvectors, eigenvalues) <- EigenvectorsAndEigenvalues(covarianceMatrix)
    reducedData <- FilterOutUnusedCoordinates(eigenvectors, eigenvalues)
    return reducedData

6. PCA 的数学原理

6.1. 向量基底

PCA的核心是坐标变换,这是线性代数中的基本概念。同一个向量可以用不同基底表示。

原始坐标系中的基底为:

$$ (1,0),\quad (0,1) $$

旋转后变为:

$$ \left(\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}\right),\quad \left(-\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}\right) $$

6.2. 维度压缩

如果所有点都落在一条直线上,那么我们只需要一个参数就可以描述整个数据集。即使这些点在二维空间中,我们也可以将其压缩到一维空间。

PCA的目标就是找到这样的“最优”坐标系。

6.3. 向量投影

PCA使用单位向量来将原始坐标投影到新坐标系中。投影的数学本质是点积

  • ✅ 向量完全一致:点积为1;
  • ❌ 向量垂直:点积为0;
  • ⚠️ 中间情况:点积为0~1之间的值。

6.4. 变换矩阵

PCA的结果是变换矩阵T,它由主成分单位向量组成。

在二维旋转-45度的例子中,变换矩阵为:

$$ T = \begin{pmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\ -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix} $$

乘以原始坐标即可得到新坐标。

6.5. 协方差矩阵

协方差矩阵用于衡量各个参数之间的相关性。

计算公式:

$$ \text{Cov}(X, Y) = \frac{1}{N} \sum_i (X_i - \bar{X})(Y_i - \bar{Y}) $$

PCA通过计算协方差矩阵的特征值和特征向量来确定主成分。

6.6. 特征值与特征向量

特征向量是数据在新坐标系中的方向,特征值表示该方向上的数据方差。

  • ✅ 特征值越大,说明该方向越重要;
  • ❌ 特征值小的方向可以忽略。

7. 总结

在本教程中,我们从三个层面深入讲解了PCA:

  1. 应用层面:PCA能帮助我们识别数据中的关键特征,并进行降维;
  2. 实现层面:我们给出了PCA的实现步骤和伪代码;
  3. 原理层面:我们解释了PCA背后的数学和几何原理,包括协方差矩阵、特征值分解等。

掌握PCA不仅有助于理解数据,还能提升模型效率和可解释性。它是数据科学和机器学习中不可或缺的工具。


原始标题:PCA: Principal Component Analysis

« 上一篇: 摊销分析入门