西瓜书学习笔记——主成分分析(公式推导+举例应用)

文章目录

      • 算法介绍
      • 实验分析

算法介绍

主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,用于在高维数据中发现最重要的特征或主成分。PCA的目标是通过线性变换将原始数据转换成一组新的特征,这些新特征被称为主成分,它们是原始特征的线性组合。

对于一个正交属性空间(各个属性之间是线性无关的)中的样本点,存在以下两个性质的超平面可对所有样本点进行恰当的表达:

  • 最近重构性:样本点到这个超平面的距离足够的近。
  • 最大可分性:样本点在这个超平面上的投影尽可能分开。

我们先从最近重构性的角度来进行推导:

  • 假定数据样本已进行中心化,即 ∑ i x i = 0 \sum_{i}x_i=0 ixi=0
  • 假定投影变换后得到的新坐标系为 { w 1 , 2 2 , . . . , w d } \{w_1,2_2,...,w_d\} {w1,22,...,wd},其中 w i w_i wi是标准正交基。
    • ∣ ∣ w i ∣ ∣ 2 = 1 ||w_i||_2=1 ∣∣wi2=1
    • w i T w j = 0 ( i ≠ j ) w_i^Tw_j=0(i \ne j) wiTwj=0(i=j)

若丢弃新坐标系中的部分坐标,即将维度降低到 d ′ < d d^\primed<d,则样本点 x i x_i xi在低维坐标系下的投影是 z i = ( z i 1 ; z i 2 ; . . . ; z i d ′ ) z_i=(z_{i1};z_{i2};...;z_{id^\prime}) zi=(zi1;zi2;...;zid),其中 z i j = w j T x i z_{ij}=w_j^Tx_i zij=wjTxi x i x_i xi在低维坐标系下第 j j j维的坐标。若基于 z i z_i zi来重构 x i x_i xi,则会得到 x ^ i = ∑ j = 1 d ′ z i j w j \hat x_i=\sum_{j=1}^{d^\prime}z_{ij}w_j x^i=j=1dzijwj

考虑到整个训练集,原样本点 x i x_i xi与基于投影重构的样本点 x ^ i \hat x_i x^i之间的距离为:
∑ i = 1 m ∣ ∣ ∑ j = 1 d ′ z i j w j − x i ∣ ∣ 2 2 = ∑ i = 1 m ∑ j = 1 d ′ ( z i j w j − x i ) T ( z i j w j − x i ) = ∑ i = 1 m ∑ j = 1 d ′ ( z i j w j T − x i T ) ( z i j w j − x i ) = ∑ i = 1 m ( ( ∑ j = 1 d ′ z i j w j T ) ( ∑ j = 1 d ′ z i j w j ) − 2 ∑ j = 1 d ′ z i j w j T x i + x i T x i ) (1) \begin{aligned} \sum_{i=1}^m||\sum_{j=1}^{d^\prime}z_{ij}w_j-x_i||_2^2&=\sum_{i=1}^m\sum_{j=1}^{d^\prime}(z_{ij}w_j-x_i)^T(z_{ij}w_j-x_i)\\ &=\sum_{i=1}^m\sum_{j=1}^{d^\prime}(z_{ij}w_j^T-x_i^T)(z_{ij}w_j-x_i)\\ &=\sum_{i=1}^m\bigg((\sum_{j=1}^{d^\prime}z_{ij}w_j^T)(\sum_{j=1}^{d^\prime}z_{ij}w_j)-2\sum_{j=1}^{d^\prime}z_{ij}w_j^Tx_i+x_i^Tx_i\bigg) \end{aligned}\tag{1} i=1m∣∣j=1dzijwjxi22=i=1mj=1d(zijwjxi)T(zijwjxi)=i=1mj=1d(zijwjTxiT)(zijwjxi)=i=1m((j=1dzijwjT)(j=1dzijwj)2j=1dzijwjTxi+xiTxi)(1)

其中 w w w是标准正交基,故有 ∣ ∣ w i ∣ ∣ 2 = 1 ||w_i||_2=1 ∣∣wi2=1 w i T w j = 0 ( i ≠ j ) w_i^Tw_j=0(i \ne j) wiTwj=0(i=j),且 x i T x i x_i^Tx_i xiTxi是一个常数,令 x i T x i = const x_i^Tx_i=\text{const} xiTxi=const,所以(1)式可以简化为:
∑ i = 1 m ∣ ∣ ∑ j = 1 d ′ z i j w j − x i ∣ ∣ 2 2 = ∑ i = 1 m ( ( z i 1 w 1 T + z i 2 w 2 T + . . . + z i d ′ w d ′ T ) ( z i 1 w 1 + z i 2 w 2 + . . . + z i d ′ w d ′ ) − 2 z i T [ w 1 T w 2 T . . . w d ′ T ] x i ) + const = ∑ i = 1 m ( ∑ j = 1 d ′ z i j T z i j − 2 z i T w T x i ) + const = ∑ i = 1 m ( z i T z i − 2 z i T z i ) + const = − ∑ i = 1 m z i T z i + const = − ( z 1 T z 1 + z 2 T z 2 + . . . + z m T z m ) + const = − ∑ i = 1 m t r ( z i T z i ) + const (2) \begin{aligned} \sum_{i=1}^m||\sum_{j=1}^{d^\prime}z_{ij}w_j-x_i||_2^2&=\sum_{i=1}^m\bigg((z_{i1}w_1^T+z_{i2}w_2^T+...+z_{id^\prime}w_{d^\prime}^T)(z_{i1}w_1+z_{i2}w_2+...+z_{id^\prime}w_{d^\prime})-2z_i^T\begin{bmatrix} w_1^T \\ w_2^T \\ ...\\ w_{d^\prime}^T \\ \end{bmatrix}x_i\bigg)+\text{const}\\ &=\sum_{i=1}^m\bigg(\sum_{j=1}^{d^\prime}z_{ij}^Tz_{ij}-2z_i^Tw^Tx_i\bigg)+\text{const}\\ &=\sum_{i=1}^m\bigg(z_i^Tz_i-2z_i^Tz_i\bigg)+\text{const}\\ &=-\sum_{i=1}^m z_i^Tz_i+\text{const}\\ &=-(z_1^Tz_1+z_2^Tz_2+...+z_m^Tz_m)+\text{const}\\ &=-\sum_{i=1}^mtr(z_i^Tz_i)+\text{const} \end{aligned}\tag{2} i=1m∣∣j=1dzijwjxi22=i=1m((zi1w1T+zi2w2T+...+zidwdT)(zi1w1+zi2w2+...+zidwd)2ziT w1Tw2T...wdT xi)+const=i=1m(j=1dzijTzij2ziTwTxi)+const=i=1m(ziTzi2ziTzi)+const=i=1mziTzi+const=(z1Tz1+z2Tz2+...+zmTzm)+const=i=1mtr(ziTzi)+const(2)

又因为 t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA)故(2)式可变为:
∑ i = 1 m ∣ ∣ ∑ j = 1 d ′ z i j w j − x i ∣ ∣ 2 2 = − ∑ i = 1 m t r ( z i z i T ) + const = − t r ( ∑ i = 1 m z i z i T ) + const = − t r ( ∑ i = 1 m w T x i x i T w ) + const = − t r ( w T ( ∑ i = 1 m x i x i T ) w ) + const ∝ − t r ( w T ( ∑ i = 1 m x i x i T ) w ) (3) \begin{aligned} \sum_{i=1}^m||\sum_{j=1}^{d^\prime}z_{ij}w_j-x_i||_2^2&=-\sum_{i=1}^mtr(z_iz_i^T)+\text{const}\\ &=-tr\bigg(\sum_{i=1}^m z_iz_i^T\bigg)+\text{const}\\ &=-tr\bigg(\sum_{i=1}^mw^Tx_ix_i^Tw\bigg)+\text{const}\\ &=-tr\bigg(w^T(\sum_{i=1}^mx_ix_i^T)w\bigg)+\text{const}\\ &\propto-tr\bigg(w^T(\sum_{i=1}^mx_ix_i^T)w\bigg) \end{aligned}\tag{3} i=1m∣∣j=1dzijwjxi22=i=1mtr(ziziT)+const=tr(i=1mziziT)+const=tr(i=1mwTxixiTw)+const=tr(wT(i=1mxixiT)w)+consttr(wT(i=1mxixiT)w)(3)

根据最近重构性,式(3)应该被最小化,有:

min ⁡ W − tr ⁡ ( W T X X T W )  s.t.  W T W = E . (4) \begin{aligned} & \min _{\mathbf{W}}-\operatorname{tr}\left(\mathbf{W}^{\mathrm{T}} \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}\right) \\ & \text { s.t. } \mathbf{W}^{\mathrm{T}} \mathbf{W}=\mathbf{E} . \end{aligned} \tag{4} Wmintr(WTXXTW) s.t. WTW=E.(4)

这就是PCA的最终优化目标。

接着我们从最大可分性出发,我们知道样本点 x i x_i xi在新空间中的超平面上的投影是 W T x i W^Tx_i WTxi,若所有的样本点的投影能尽可能的分开,则应该使投影后样本点的方差最大化。

在降维和投影中,我们通常不使用传统的方差定义,因为这里我们不涉及到随机变量和随机过程。相反,我们使用方差的术语来描述投影后样本点在新空间中的变异性,这更多地是一种几何上的直觉而非统计学中方差的定义。

方差的形式为 x i T W W T x i x_i^T W W^T x_i xiTWWTxi,可以从以下几何角度解释:

  • 投影方向: 投影矩阵 W W W 确定了投影的方向,每一列表示新空间的基向量。

  • 样本点变异性: x i x_i xi 是原始空间中的样本点, W T x i W^Tx_i WTxi 是投影到新空间后的样本点。 x i x_i xi W T x i W^Tx_i WTxi 之间的差异,即 x i − W T x i x_i - W^Tx_i xiWTxi,表示样本点在投影方向上的变异性。

  • 方差形式: 方差的形式 x i T W W T x i x_i^T W W^T x_i xiTWWTxi 表示了在投影方向上的样本点变异性的量度。这个形式的计算实际上考虑了样本点在投影方向上的平方和,类似于方差的直觉。

  • 最大化分离性: 当我们尝试最大化这个“方差”时,我们实际上是在尝试选择一个投影方向,使得在新空间中的样本点在投影方向上的变异性最大化。这有助于确保在新空间中,样本点能够尽可能地分开,提高了样本点在新空间中的可分性。

请注意,这种形式的“方差”并不是统计学中方差的定义,而更多是一种在降维和投影问题中用于描述样本点分布情况的术语。这种定义的目标是为了在新空间中找到一个有利于分离的方向,以便更好地实现降维和分类等任务。

故投影后样本点的方差是

V a r ( W T x i ) = V a r ( x i T W ) = ∑ i W T x i x i T W = W T ( ∑ i x i x i T ) W = W T ( x 1 x 1 T + x 2 x 2 T + . . . + x m x m T ) W = W T ( ∑ i t r ( x i x i T ) ) W = t r ( W T X X T W ) (5) \begin{aligned} Var(W^Tx_i)&=Var(x_i^TW)\\ &=\sum_iW^Tx_ix_i^TW\\ &=W^T(\sum_ix_ix_i^T)W\\ &=W^T\bigg( x_1x_1^T+x_2x_2^T+...+x_mx_m^T\bigg)W\\ &=W^T\bigg( \sum_itr(x_ix_i^T)\bigg)W\\ &=tr(W^TXX^TW) \end{aligned}\tag{5} Var(WTxi)=Var(xiTW)=iWTxixiTW=WT(ixixiT)W=WT(x1x1T+x2x2T+...+xmxmT)W=WT(itr(xixiT))W=tr(WTXXTW)(5)

于是优化目标可写成:
max ⁡ W tr ⁡ ( W T X X T W )  s.t.  W T W = E , (6) \begin{aligned} \max _{\mathbf{W}} & \operatorname{tr}\left(\mathbf{W}^{\mathrm{T}} \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}\right) \\ \text { s.t. } & \mathbf{W}^{\mathrm{T}} \mathbf{W}=\mathbf{E}, \end{aligned} \tag{6} Wmax s.t. tr(WTXXTW)WTW=E,(6)

显然式(4)和式(6)等价,故对式(4)或(6)使用拉格朗日乘子法,引入拉格朗日乘子矩阵 Λ \Lambda Λ,我们的目标是 :
L ( W , Λ ) = t r ( W T X X T W ) − t r ( Λ ( W T W − E ) ) (7) \mathcal{L}(\mathbf{W,\Lambda)}=tr(\mathbf{W^TXX^TW)}-tr(\mathbf{\Lambda(W^TW-E))} \tag{7} L(W,Λ)=tr(WTXXTW)tr(Λ(WTWE))(7)

现在我们分别对 W W W Λ \Lambda Λ求偏导,并令其为零有:

∂ L ∂ W = 2 X X T W − 2 Λ T W = 0 (8) \frac{\partial \mathcal{L}}{\partial \mathbf{W}}=2 \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}-2 \Lambda^{\mathrm{T}} \mathbf{W}=0 \tag{8} WL=2XXTW2ΛTW=0(8)

∂ L ∂ Λ = − ( W T W − E ) = 0 (9) \frac{\partial \mathcal{L}}{\partial \boldsymbol{\Lambda}}=-\left(\mathbf{W}^{\mathrm{T}} \mathbf{W}-\mathbf{E}\right)=0 \tag{9} ΛL=(WTWE)=0(9)

最终得到:

X X T W = Λ T W (10) \mathbf{XX^TW}=\mathbf{\Lambda^TW} \tag{10} XXTW=ΛTW(10)

W T W = E (11) \mathbf{W^TW=E} \tag{11} WTW=E(11)

其中 Λ = d i a g ( λ 1 , λ 2 , . . . , λ d ′ ) ∈ R d ′ × d ′ \Lambda=diag(\lambda_1,\lambda_2,...,\lambda_d^\prime) \in \mathbb{R}^{d^\prime\times d^\prime} Λ=diag(λ1,λ2,...,λd)Rd×d

将(10)式展开有:

X X T w i = λ i w i (12) \mathbf{XX^T}w_i=\lambda_iw_i\tag{12} XXTwi=λiwi(12)

最后我们只需要对 X X T \mathbf{XX^T} XXT进行特征值分解,其中 λ i \lambda_i λi是矩阵 X X T \mathbf{XX^T} XXT的特征值, w i w_i wi λ i \lambda_i λi所对应的单位特征向量。

最终我们选取前 d ′ d^\prime d个特征值所对应的特征向量构成的 W = ( w 1 , w 2 , . . . , w d ′ ) \mathbf{W}=(w_1,w_2,...,w_{d^\prime}) W=(w1,w2,...,wd),这就是我们所求的最终解。

其PCA算法流程图如下图所示:

西瓜书学习笔记——主成分分析(公式推导+举例应用)_第1张图片

这就出现了一个新的问题,低维空间维数 d ′ d^\prime d是由用户事先决定的,那么该如何确定 d ′ d^\prime d

我们可以从重构的角度来设置一个重构阈值,例如 t = 95 % t=95\% t=95%,然后选取使得下式成立的最小 d ′ d^\prime d值:

∑ i = 1 d ′ λ i ∑ i = 1 d λ i ⩾ t \frac{\sum_{i=1}^{d^{\prime}} \lambda_i}{\sum_{i=1}^d \lambda_i} \geqslant t i=1dλii=1dλit

对于式(8)和(9)求偏导过程如下:

∂ L ∂ W = ∂ (   t r ( W T X X T W ) − t r ( Λ ( W T W − E ) ) ) ∂ W = ∂   t r ( W T X X T W ) ∂ W − ∂   t r ( Λ ( W T W − E ) ) ∂ W (13) \begin{aligned} \frac{\partial \mathcal{L}}{\partial \mathbf{W}}&=\frac{\partial\bigg( \ tr(\mathbf{W^TXX^TW})-tr(\mathbf{\Lambda(W^TW-E))}\bigg)}{\partial \mathbf{W}}\\ &=\frac{\partial \ tr(\mathbf{W^TXX^TW})}{\partial \mathbf{W}}-\frac{\partial \ tr(\mathbf{\Lambda(W^TW-E))}}{\partial \mathbf{W}} \end{aligned} \tag{13} WL=W( tr(WTXXTW)tr(Λ(WTWE)))=W tr(WTXXTW)W tr(Λ(WTWE))(13)

对式(13)我们可以用迹的性质, t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA),故我们可将 W T X X T W \mathbf{W^TXX^TW} WTXXTW Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)重新排列成 W W T X T X \mathbf{WW^TX^TX} WWTXTX Λ ( W W T − E ) \mathbf{\Lambda(WW^T-E)} Λ(WWTE),即:

∂ L ∂ W = ∂   t r ( W W T X T X ) ∂ W − ∂   t r ( Λ ( W W T − E ) ) ∂ W = ∂   t r ( W W T X T X ) ∂ ( W W T ) ⋅ ∂ ( W W T ) ∂ W − 2 Λ W = X T X ⋅ 2 W − 2 Λ W = 2 X X T W − 2 Λ T W (14) \begin{aligned} \frac{\partial \mathcal{L}}{\partial \mathbf{W}}&=\frac{\partial \ tr(\mathbf{WW^TX^TX})}{\partial \mathbf{W}}-\frac{\partial \ tr(\mathbf{\Lambda(WW^T-E))}}{\partial \mathbf{W}}\\ &=\frac{\partial\ tr(\mathbf{W W^T X^T X)}}{\partial \mathbf{(W W^T)}} \cdot \frac{\partial\mathbf{(W W^T)}}{\partial \mathbf{W}}-2\mathbf{\Lambda W}\\ &=\mathbf{X^TX}\cdot 2\mathbf{W}-2\mathbf{\Lambda W}\\ &=2 \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}-2 \Lambda^{\mathrm{T}} \mathbf{W} \end{aligned}\tag{14} WL=W tr(WWTXTX)W tr(Λ(WWTE))=(WWT) tr(WWTXTX)W(WWT)2ΛW=XTX2W2ΛW=2XXTW2ΛTW(14)

对于式(7)约束条件为什么可以写成迹的形式?

在这个问题中,我们要证明在优化问题中 t r ( Λ ( W T W − E ) ) tr(\mathbf{\Lambda(W^TW-E)}) tr(Λ(WTWE)) Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)是等价的,即它们对于最优解是相同的。下面我们来给出详细的证明!

为此,我们可以比较两者的梯度。考虑对拉格朗日函数 L ( W , Λ ) \mathcal{L}(\mathbf{W,\Lambda}) L(W,Λ)是关于 W W W的偏导数。首先计算 L \mathcal{L} L W \mathbf{W} W的梯度得到式(10),解出最优解 W ⋆ \mathbf{W^\star} W。现在我们比较两种形式对最优解的梯度。

  • 对于 t r ( Λ ( W T W − E ) ) tr(\mathbf{\Lambda(W^TW-E)}) tr(Λ(WTWE))
    ∂ t r ( Λ ( W T W − E ) ) ∂ W = 2 Λ W \frac{\partial tr(\mathbf{\Lambda(W^T W-E))}}{\partial \mathbf{W}}=2 \Lambda \mathbf{W} Wtr(Λ(WTWE))=W

  • 对于 Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)
    ∂ Λ ( W T W − E ) ∂ W = 2 Λ W \frac{\partial \mathbf{\Lambda(W^T W-E)}}{\partial \mathbf{W}}=2 \Lambda \mathbf{W} WΛ(WTWE)=W

从上面的梯度计算中,我们可以看到,两种形式的梯度在最优解处是相同的,因此在优化问题中 t r ( Λ ( W T W − E ) ) tr(\mathbf{\Lambda(W^TW-E)}) tr(Λ(WTWE)) Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)是等价。这意味着它们会产生相同的最优解。

我们将矩阵运算转化为迹(trace)形式在某些情况下具有优势,尤其是在涉及到矩阵的导数计算和优化问题时。以下是一些使用迹的好处:

  • 简化导数计算: 迹运算的导数计算相对简单,尤其是对于迹的线性性质,这可以简化复杂矩阵函数的导数计算。这种简化对于深度学习等领域中的梯度下降等优化问题很有用。

  • 矩阵的不可交换性: 在矩阵乘法中,矩阵的乘法是不可交换的,即 A B AB AB一般不等于 B A BA BA。但是,通过转化为迹形式,有时可以使计算更加简单。

  • 整合约束条件: 在优化问题中,通过引入拉格朗日乘子法,迹运算可以用于整合约束条件,使得问题的形式更加一致,更容易处理。

  • 向量化和矩阵形式: 将矩阵运算表示为迹形式有助于使用向量化和矩阵形式,从而更好地利用硬件加速(如GPU)来加速计算。

实验分析

数据集如下图所示:
西瓜书学习笔记——主成分分析(公式推导+举例应用)_第2张图片

读入数据集:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取数据
data = pd.read_csv('data/correlated_dataset.csv')

# 提取特征列
features = data.drop('Target', axis=1)

计算协方差矩阵以及特征值分解:

# 计算协方差矩阵
cov_matrix = features.cov()

# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

选择最小 d ′ d^\prime d值:

# 选择重构阈值
reconstruction_threshold = 0.95

# 计算特征值的累积和
eigenvalue_cumsum = np.cumsum(eigenvalues) / np.sum(eigenvalues)

# 找到满足阈值条件的最小d'
selected_d_prime = np.argmax(eigenvalue_cumsum >= reconstruction_threshold) + 1

# 输出选择的最小d'
print("选择的最小降维维度 d' =", selected_d_prime)

选择的最小降维维度 d' = 7

重新计算特征值和特征向量:

# 根据选择的最小d'重新计算选取的特征值和特征向量
selected_indices_reconstructed = np.argsort(eigenvalues)[-selected_d_prime:][::-1]
selected_eigenvalues_reconstructed = eigenvalues[selected_indices_reconstructed]
selected_eigenvectors_reconstructed = eigenvectors[:, selected_indices_reconstructed]

# 投影数据到新的空间
reduced_data_reconstructed = features.dot(selected_eigenvectors_reconstructed)

可视化数据降维后的数据:

plt.scatter(reduced_data_reconstructed.iloc[:, 0], reduced_data_reconstructed.iloc[:, 1], c=data['Target'], cmap='viridis')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Correlated Dataset (Reconstructed)')
plt.show()

西瓜书学习笔记——主成分分析(公式推导+举例应用)_第3张图片

你可能感兴趣的:(机器学习,学习,笔记,机器学习,降维)