PCA基本概念与数学原理归纳总结

讲PCA之前,我先问个问题:你手头有几十个ADMET描述符,互相还高度相关,怎么办?我早期做化合物筛选时就被这个搞得很头疼。PCA(主成分分析)就是解决这个问题的利器。说白了,它能把一堆冗余变量压缩成少数几个综合变量,同时尽量保留原始信息。

核心思想就一句话:在损失信息最小的前提下,通过线性变换将高维数据投影到低维空间。

1. 从几何角度理解PCA

想象你有一堆三维空间的数据点。它们在某个方向上波动最大,在另一个方向上波动很小。PCA就是找到这些“波动方向”,再按波动大小排序。

  • 第一主成分:数据方差最大的方向
  • 第二主成分:与第一主成分正交,方差次大
  • 后续主成分:依次正交,方差递减

我以前给团队培训时,喜欢拿一个椭圆形的点云举例。长轴方向就是PC1,短轴方向是PC2。如果长轴能解释80%的方差,那保留PC1就够用了。嗯,这个直觉很重要。

2. PCA的数学步骤

数学上,PCA的流程很规整。我们一步步拆开看。

  1. 数据中心化:每个变量减去其均值
  2. 计算协方差矩阵:度量变量间的线性关系
  3. 特征分解:求协方差矩阵的特征值和特征向量
  4. 排序与选择:按特征值大小排序,选取前k个特征向量
  5. 投影:原始数据乘以这些特征向量,得到主成分得分

在实际ADMET项目中,我建议你特别注意第一步。如果数据量纲差异大(比如logP和分子量),记得先做标准化,否则PCA会被量纲大的变量主导。这是我踩过的坑。

3. 核心数学对象一:协方差矩阵

协方差矩阵是PCA的起点。假设有p个变量,协方差矩阵Σ是一个p×p的对称矩阵。其中第(i, j)个元素表示第i个变量和第j个变量的协方差。

Σ = [cov(x1, x1)  cov(x1, x2)  ...  cov(x1, xp)]
    [cov(x2, x1)  cov(x2, x2)  ...  cov(x2, xp)]
    [   ...          ...       ...     ...     ]
    [cov(xp, x1)  cov(xp, x2)  ...  cov(xp, xp)]

对角线上是各变量的方差,非对角线上是变量间的协方差。如果两个变量完全独立,协方差为0。你想想看,如果协方差矩阵里大部分非对角元素都很大,说明变量冗余严重——这正是用PCA降维的信号。

4. 核心数学对象二:特征值与特征向量

协方差矩阵的特征向量指示了主成分的方向,特征值则对应这个方向上的方差大小。

Σ · v = λ · v

这里v是特征向量,λ是特征值。PCA做的事情其实就是:

  • 对协方差矩阵做特征分解
  • 按特征值λ从大到小排序
  • 对应的特征向量就是主成分的方向

注意:特征向量是单位向量,长度为1。但在实际投影时,我们用的是载荷向量(即特征向量乘以对应特征值的平方根)。我之前有次把这两个概念搞混了,导致投影后的方差解释率算错了,查了半天bug。

5. 方差解释率与累计方差比

这是选择主成分数量的依据。第k个主成分的方差解释率为:

方差解释率_k = λ_k / (λ_1 + λ_2 + ... + λ_p)

累计方差比就是前k个解释率之和。通常我们保留累计方差比达到80%-95%的前k个主成分。

主成分编号 特征值 方差解释率(%) 累计方差比(%)
PC1 3.45 57.5 57.5
PC2 1.22 20.3 77.8
PC3 0.78 13.0 90.8
PC4 0.35 5.8 96.6
PC5 0.20 3.4 100.0

上表是一个典型结果。前3个主成分已经解释了90.8%的方差,那PC4和PC5就可以丢掉。我个人习惯保留累计方差比刚过90%的那个节点,不是死守80%或95%。

6. 主成分得分与载荷

主成分得分:原始样本在新坐标系下的坐标值。公式很简单:

Z = X · W

X是中心化后的数据矩阵(n×p),W是前k个特征向量组成的矩阵(p×k),Z就是主成分得分矩阵(n×k)。

载荷:特征向量乘以对应特征值的平方根。载荷反映了原始变量对主成分的贡献大小。载荷绝对值越大,该变量对主成分的影响越大。

我以前在ADMET数据中看到过一种情况:PC1主要载荷落在logP和溶解度上,说明这两个变量在ADMET中协同变化。这个信息对后续建模选特征很有用。

7. PCA在ADMET质控中的切入点

为什么ADMET预测数据需要PCA做质控?我总结三个理由:

  • 检测异常化合物:异常点在PC1-PC2散点图上会远离主体簇
  • 识别冗余描述符:载荷大的变量可以帮助剔除共线性特征
  • 评估数据质量:如果某个批次化合物的PCA投影分布异常,说明数据采集可能有问题

好了,数学原理讲到这里。下一章我们会直接上手用Python跑PCA,结合真实的ADMET数据集做质控分析。

下面这张SVG图总结了PCA从数据输入到降维输出的完整流程,你可以对照着理解各步骤的关系。

PCA质控分析核心流程 原始ADMET数据 数据中心化 协方差矩阵 特征分解 排序+选前k个 投影到主成分 降维PCA结果 说明:每个箭头代表一个数据处理步骤。最终降维结果用于散点图质控、异常检测与冗余变量识别。