针对高维数据的降维问题,PCA 的基本思路如下:首先将需要降维的数据的各个变量标准化(规范化)为均值为 0,方差为 1 的数据集,然后对标准化后的数据进行正交变换,将原来的数据转换为若干个线性无关向量表示的新数据:这些新向量表示的数据不仅要求相互线性无关,而且需要所包含的信息量最大。PCA 的一个示例如图 18-1 所示。
PCA 示例" />
图 18-1 中,左图是一组由变量 x 1 x_1 x1 和 x 2 x_2 x2 表示的二维空间,数据分布于图中椭圆形区域内,能够看到,变量 x 1 x_1 x1 和 x 2 x_2 x2 存在一定的相关关系;右图是对数据进行正交变换后的数据坐标系中,向变量 y 1 y_1 y1 和 y 2 y_2 y2 表示。为了使得变换后的信息量最大,PCA 使用方差最大的方向作为新坐标系的第一坐标轴 y 1 y_1 y1,方差第二大的作为第二坐标轴 y 2 y_2 y2。
PCA 使用方差衡量新变量的信息量大小,按照方差大小排序依次为第一主成分、第二主成分、⋯⋯,下面对 PCA 原理进行简单推导。
假设原始数据为 m 维随机变量 x = ( x 1 , x 2 , ⋯ , x m ) ⊤ x = (x_1, x_2, \cdots, x_m)^\top x=(x1,x2,⋯,xm)⊤,其均值向量 μ = E ( x ) = ( μ 1 , μ 2 , ⋯ , μ m ) ⊤ \mu = E(x) = (\mu_1, \mu_2, \cdots, \mu_m)^\top μ=E(x)=(μ1,μ2,⋯,μm)⊤,协方差矩阵为:
Σ = cov ( x , x ) = E [ ( x − μ ) ( x − μ ) ⊤ ] (18-1) \Sigma = \operatorname{cov}(x, x) = E \left[ (x - \mu)(x - \mu)^\top \right] \tag{18-1} Σ=cov(x,x)=E[(x−μ)(x−μ)⊤](18-1)
由 m 维随机变量 x x x 到 m 维随机变量 y = ( y 1 , y 2 , ⋯ , y m ) ⊤ y = (y_1, y_2, \cdots, y_m)^\top y=(y1,y2,⋯,ym)⊤ 的线性变换:
y i = a i ⊤ x = a i 1 x 1 + a i 2 x 2 + ⋯ + a i m x m (18-2) y_i = a_i^\top x = a_{i1} x_1 + a_{i2} x_2 + \cdots + a_{im} x_m \tag{18-2} yi=ai⊤x=ai1x1+ai2x2+⋯+aimxm(18-2)
其中 a i ⊤ = ( a i 1 , a i 2 , ⋯ , a i m ) a_i^\top = (a_{i1}, a_{i2}, \cdots, a_{im}) ai⊤=(ai1,ai2,⋯,aim)。
经线性变换后的随机变量 y i y_i yi 的均值、方差和协方差统计量可以表示为:
E ( y i ) = a i ⊤ μ , i = 1 , 2 , ⋯ , m (18-3) E(y_i) = a_i^\top \mu, \quad i = 1, 2, \cdots, m \tag{18-3} E(yi)=ai⊤μ,i=1,2,⋯,m(18-3)
var ( y i ) = a i ⊤ Σ a i , i = 1 , 2 , ⋯ , m (18-4) \operatorname{var}(y_i) = a_i^\top \Sigma a_i, \quad i = 1, 2, \cdots, m \tag{18-4} var(yi)=ai⊤Σai,i=1,2,⋯,m(18-4)
cov ( y i , y j ) = a i ⊤ Σ a j , i , j = 1 , 2 , ⋯ , m (18-5) \operatorname{cov}(y_i, y_j) = a_i^\top \Sigma a_j, \quad i, j = 1, 2, \cdots, m \tag{18-5} cov(yi,yj)=ai⊤Σaj,i,j=1,2,⋯,m(18-5)
当随机变量 x x x 到随机变量 y y y 的线性变换满足如下条件时,变换后的 y 1 , y 2 , ⋯ , y m y_1, y_2, \cdots, y_m y1,y2,⋯,ym 分别为随机变量 x x x 的第一主成分、第二主成分、⋯⋯、第 m 主成分。
- 线性变换的系数向量 a i a_i ai 为单位向量,有 a i ⊤ a i = 1 , i = 1 , 2 , ⋯ , m a_i^\top a_i = 1, \ i = 1, 2, \cdots, m ai⊤ai=1, i=1,2,⋯,m。
- 线性变换后的变量 y i y_i yi 与 y j y_j yj 线性无关,即 cov ( y i , y j ) = 0 ( i ≠ j ) \operatorname{cov}(y_i, y_j) = 0(i \neq j) cov(yi,yj)=0(i=j)。
- 变量 y i y_i yi 是随机变量 x x x 所有线性变换中方差最大的, y 2 y_2 y2 是与 y 1 y_1 y1 无关的所有线性变换中方差最大的。
上述三个条件给出了求解主成分的基本方法。根据优化目标和约束条件,我们可以使用拉格朗日乘子法来求解主成分。下面以第一主成分为例进行求解推导。第一主成分的优化问题的数学表达为:
max a 1 ⊤ Σ a 1 (18-6) \max \quad a_1^\top \Sigma a_1 \tag{18-6} maxa1⊤Σa1(18-6)
s . t . a 1 ⊤ a 1 = 1 (18-7) s.t. \quad a_1^\top a_1 = 1 \tag{18-7} s.t.a1⊤a1=1(18-7)
定义拉格朗日目标函数如下:
L = a 1 ⊤ Σ a 1 − λ ( a 1 ⊤ a 1 − 1 ) (18-8) L = a_1^\top \Sigma a_1 - \lambda (a_1^\top a_1 - 1) \tag{18-8} L=a1⊤Σa1−λ(a1⊤a1−1)(18-8)
将式 (18-8) 的拉格朗日函数对 a 1 a_1 a1 求导并令其为 0,有:
∂ L ∂ a 1 = Σ a 1 − λ a 1 = 0 (18-9) \frac{\partial L}{\partial a_1} = \Sigma a_1 - \lambda a_1 = 0 \tag{18-9} ∂a1∂L=Σa1−λa1=0(18-9)
根据矩阵特征值与特征向量的关系,由式 (18-9) 可知 λ \lambda λ 为 Σ \Sigma Σ 的特征值, a 1 a_1 a1 为对应的单位特征向量。假设 a 1 a_1 a1 是 Σ \Sigma Σ 的最大特征值 λ 1 \lambda_1 λ1 对应的单位特征向量,那么 a 1 a_1 a1 和 λ 1 \lambda_1 λ1 均为上述优化问题的最优解。所以 a 1 T x a_1^Tx a1Tx 为第一主成分,其方差为对应协方差矩阵的最大特征值:
var ( a 1 ⊤ x ) = a 1 ⊤ Σ a 1 = λ 1 (18-10) \operatorname{var}(a_1^\top x) = a_1^\top \Sigma a_1 = \lambda_1 \tag{18-10} var(a1⊤x)=a1⊤Σa1=λ1(18-10)
这样,第一主成分的推导就完成了。同样的方法可用来求解第 k 主成分,第 k 主成分的方差的特征值为:
var ( a k ⊤ x ) = a k ⊤ Σ a k = λ k , k = 1 , 2 , ⋯ , m (18-11) \operatorname{var}(a_k^\top x) = a_k^\top \Sigma a_k = \lambda_k, \quad k = 1, 2, \cdots, m \tag{18-11} var(ak⊤x)=ak⊤Σak=λk,k=1,2,⋯,m(18-11)
最后,梳理一下 PCA 的计算流程:
- 对 m 行 n 列的数据 X 先按照均值为 0,方差为 1 进行标准化处理;
- 计算标准化后的 X 的协方差矩阵 C = 1 n X X ⊤ C = \frac{1}{n} XX^\top C=n1XX⊤;
- 计算协方差矩阵 C C C 的特征值和对应的特征向量;
- 将特征向量按照对应的特征值大小排序组成矩阵,取前 k 行构成的矩阵 P P P;
- 计算 Y = P X Y = PX Y=PX 即可得到经过 PCA 降维后的 k 维数据。