降维02 - 主成分分析 (PCA)

PCA的大名如雷贯耳,曾经的我也以为PCA是个什么很复杂的东西,但是学习了线性代数之后才发现,PCA的原理简单而不失优雅,粗暴而不失趣味。

PCA是最易于理解的特征提取过程:通过对原始特征的线性组合构造新的“特征”,这些特征不同于原始特征,但是又能与原始特征一样表达原始数据的信息。

PCA (Primary Component Analysis, 主成分分析) 为什么叫做主成分分析呢?因为PCA构造出的新特征地位并不是等同的,即这些新特征的重要程度存在差异:

  • 第一主成分 (the first component) 是新特征中最重要的特征,它在所有新特征中方差最大,这意味着它对数据变异的贡献是最大的;
  • 第二主成分 (the second component) 在保证不影响第一主成分的基础上试图解释剩下的变异(即总变异 - 第一主成分引起的变异);
  • 第三主成分 (the third component) 在不保证第一和第二主成分呢的基础上试图解释剩下的变异(即总变异 - 第一主成分引起的变异 - 第二主成分引起的变异);
  • 依次类推……

线代原理

预备知识:线性代数(矩阵运算、特征值&特征向量、特征值分解)

可对角化

如果一个n阶方阵A相似于对角矩阵,即存在可逆矩阵$P$使得$P^{-1}AP$是对角矩阵,则称方阵A是可对角化的。

n阶方阵A可对角化的充要条件是A每个特征值的几何重数与代数重数相等代数重数特征多项式中该特征值的幂次,几何重数指特征值对应的线性无关的特征向量的个数。

n阶方阵A可对角化的充要条件是A有n个线性无关的特征向量:几何重数与代数重数相等意味着n个线性无关的特征向量。

即使方阵A可逆也不能保证每个特征值的代数重数与几何重数相等,因此A可逆不是A可对角化的充要条件!

特征值分解

如果矩阵A是一个可对角化的方阵,它就可以进行特征值分解,即A可表示为:
$$A=Q{\Lambda}Q^{-1}$$
其中

  • $Q$ 是n阶方阵,它的n个列向量是方阵A的n个特征向量
  • $\Lambda$ 是对角方阵,对角线元素是方阵A的特征值,其位置与 $Q$ 中的特征向量位置相对应

特征值分解的应用?求逆。
如果方阵A是非奇异矩阵(即可以进行特征值分解且特征值不含0),则 $A^{-1}=Q{\Lambda}^{-1}Q^{-1}$,其中 $[{\Lambda}^{-1}]_{ii}=\frac1{\lambda_i}$。

奇异值分解

特征值分解对A的要求格外严格:可逆、特征值不含0、方阵……
放松特征值分解的限制,将A扩展到任意 $m{\times}n$ 的矩阵即得到 奇异值分解 (Singular Value Decomposition, SVD)

假设M是定义在实数域或者复数域上的 $m{\times}n$ 阶的矩阵:
$$M=U{\Sigma}V^\ast$$
其中

  • U是 $m{\times}m$ 阶酉矩阵:U的m个列向量实际上是 $M^{\ast}M$ 的特征向量,称为M的左奇异向量
  • $\Sigma$ 是 $m{\times}n$ 阶非负实数对角矩阵:对角线元素称为M的奇异值,一般情况下奇异值按从大到小的顺序排列!
  • $V^\ast$ 是 $V$ 的共轭转置,是 $n{\times}n$ 阶酉矩阵:V的n个列向量实际上是 $MM^\ast$ 的特征向量,称为M的右奇异向量

共轭转置:共轭转置与转置是两个概念,当矩阵定义在实数域上时二者结果相同,矩阵A的共轭转置记为 $A^\ast$,定义如下:
$$A^\ast=(\overline{A})^T=\overline{A^T}$$
其中,$\overline{A}$ 表示对A的元素复共轭,当A定义在实数域时 $\overline{A}=A$。

当矩阵M定义在实数域时有:
$$M=U{\Sigma}V^T$$
我们在应用SVD时一般都是定义在实数域上的哟~

主成分分析

上面提到了对于任意 $m{\times}n$ 阶矩阵M的SVD分解:
$$M_{m{\times}n}=U_{m{\times}m}{\Sigma_{m{\times}n}}V_{n{\times}n}^T$$
直观图如下(这里假设样本数量m多于特征数量n,这意味着M有n个奇异值):

其中 $\Sigma$ 矩阵很有意思,当m>n时,矩阵 $\Sigma_{m{\times}n}$ 中只有子矩阵 $\Sigma_{n{\times}n}$ 的对角线上的值不为0,如下图所示:

以scRNA测序为例:假设在表达谱矩阵中,一行表示一个细胞中不同基因的表达量,一列表示一个基因在不同细胞中的表达量。这与我们的习惯(一列表示一个细胞,一行表示一个基因)有所不同!

对应到上述SVD分解式我们发现,n表示细胞数量,m表示基因数量。我们降维的结果肯定是要保证细胞总数m不变,而将基因数目从n减小到k。

具体的,取 $\Sigma$ 中最大的k个奇异值,即取 $\Sigma_{k{\times}k}$ 子矩阵,相应的取U的前k列和V的前k列(即$V^\ast$的前k行),即:

此时
$$M_{m{\times}n}=U_{m{\times}k}{\Sigma_{k{\times}k}}V_{k{\times}n}^T$$
上式中的 $U_{m{\times}k}$ 就是 $M_{m{\times}n}$ 从n维特征空间降到k维特征空间的结果。注意矩阵 $U_{m{\times}k}$ 的k个列向量并不在矩阵 $M_{m{\times}n}$ 中,而是M中的n个列向量线性组合的结果。

工具

1
2
# in python
from sklearn.decomposition import PCA
----- For reprint please indicate the source -----
0%