PCA基本概念与数学原理归纳总结
讲PCA之前,我先问个问题:你手头有几十个ADMET描述符,互相还高度相关,怎么办?我早期做化合物筛选时就被这个搞得很头疼。PCA(主成分分析)就是解决这个问题的利器。说白了,它能把一堆冗余变量压缩成少数几个综合变量,同时尽量保留原始信息。
核心思想就一句话:在损失信息最小的前提下,通过线性变换将高维数据投影到低维空间。
1. 从几何角度理解PCA
想象你有一堆三维空间的数据点。它们在某个方向上波动最大,在另一个方向上波动很小。PCA就是找到这些“波动方向”,再按波动大小排序。
- 第一主成分:数据方差最大的方向
- 第二主成分:与第一主成分正交,方差次大
- 后续主成分:依次正交,方差递减
我以前给团队培训时,喜欢拿一个椭圆形的点云举例。长轴方向就是PC1,短轴方向是PC2。如果长轴能解释80%的方差,那保留PC1就够用了。嗯,这个直觉很重要。
2. PCA的数学步骤
数学上,PCA的流程很规整。我们一步步拆开看。
- 数据中心化:每个变量减去其均值
- 计算协方差矩阵:度量变量间的线性关系
- 特征分解:求协方差矩阵的特征值和特征向量
- 排序与选择:按特征值大小排序,选取前k个特征向量
- 投影:原始数据乘以这些特征向量,得到主成分得分
在实际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从数据输入到降维输出的完整流程,你可以对照着理解各步骤的关系。