PCA主成分分析是一种数据降维的方法,它的目的是找到一组新的正交基,使得数据在这组基上的投影能够最大化方差,从而保留数据的主要信息。PCA主成分分析的公式有以下几个:
- 数据矩阵 X X X,每一行是一个样本,每一列是一个特征。
- 均值向量 x ˉ \bar{x} xˉ,每个元素是对应特征的均值,即 x ˉ i = 1 n ∑ j = 1 n x j i \bar{x}_i=\frac{1}{n}\sum_{j=1}^n x_{ji} xˉi=n1∑j=1nxji。
- 去均值化后的数据矩阵 Z Z Z,每个元素是对应特征减去均值,即 z i j = x i j − x ˉ i z_{ij}=x_{ij}-\bar{x}_i zij=xij−xˉi。
- 协方差矩阵 C C C,每个元素是对应特征之间的协方差,即 c i j = 1 n − 1 ∑ k = 1 n ( z k i z k j ) c_{ij}=\frac{1}{n-1}\sum_{k=1}^n (z_{ki}z_{kj}) cij=n−11∑k=1n(zkizkj)。协方差矩阵也可以写成 C = 1 n − 1 Z T Z C=\frac{1}{n-1}Z^TZ C=n−11ZTZ。
- 特征值 λ i \lambda_i λi和特征向量 v i v_i vi,满足 C v i = λ i v i Cv_i=\lambda_iv_i Cvi=λivi。特征值表示对应特征向量方向上的方差大小,特征向量表示新的正交基方向。
- 主成分 t i t_i ti,是数据在特征向量上的投影,即 t i = Z v i t_i=Zv_i ti=Zvi。主成分也可以看作是新的特征空间中的坐标。
- 降维后的数据矩阵 Y Y Y,是将数据投影到前 k k k个最大特征值对应的特征向量上,即 Y = Z V k Y=ZV_k Y=ZVk,其中 V k V_k Vk是由前 k k k个特征向量组成的矩阵。
对于公式的解析,可以参考以下几个方面:
- PCA主成分分析是一种线性变换,它将原始数据从 n n n维空间变换到 k k k维空间,其中 k < n k<n k<n。这种变换可以看作是一种旋转和压缩的过程,旋转是为了让新的坐标轴与数据的主要变化方向一致,压缩是为了去除那些方差较小或者不相关的维度。
- PCA主成分分析的目标是最大化数据在新坐标轴上的方差,这样可以保留数据中最重要的信息。这个目标可以通过求解协方差矩阵的特征值和特征向量来实现。协方差矩阵反映了数据各个特征之间的相关性,其对角线上的元素是各个特征自身的方差。协方差矩阵的特征值表示了各个特征向量方向上的方差大小,特征向量表示了新坐标轴的方向。选择最大的 k k k个特征值对应的特征向量作为新坐标轴,就可以实现数据降维。
- PCA主成分分析有两种常用的实现方法:基于特征值分解协方差矩阵和基于奇异值分解(SVD)协方差矩阵。基于特征值分解协方差矩阵的方法需要先计算协方差矩阵,然后对其进行特征值分解,得到特征值和特征向量。基于奇异值分解协方差矩阵的方法不需要显式地计算协方差矩阵,而是直接对数据矩阵进行奇异值分解,得到奇异值和奇异向量。两种方法的结果是一致的,但是基于奇异值分解协方差矩阵的方法更加稳定和高效。
好的,我可以给你一个具体的例子来帮助你理解主成分分析的数学推导³ 。
假设我们有以下四个样本,每个样本有两个特征 x 1 x_1 x1和 x 2 x_2 x2:
样本编号 | x 1 x_1 x1 | x 2 x_2 x2 |
---|---|---|
1 | 1 | 2 |
2 | 3 | 3 |
3 | 4 | 5 |
4 | 6 | 7 |
我们可以将这些样本用矩阵表示为:
X = [ 1 2 3 3 4 5 6 7 ] X=\begin{bmatrix} 1 & 2 \\ 3 & 3 \\ 4 & 5 \\ 6 & 7 \end{bmatrix} X= 13462357
我们的目标是将这些样本从二维降维到一维,即找到一个新的坐标轴 u 1 u_1 u1,使得样本在这个坐标轴上的投影能够最大化方差,从而保留数据的主要信息。我们可以用以下公式表示这个投影:
y i = u 1 T x i y_i=u_1^Tx_i yi=u1Txi
其中 y i y_i yi是第 i i i个样本的投影值, u 1 u_1 u1是一个单位向量, x i x_i xi是第 i i i个样本的原始值。
我们可以看到,不同的 u 1 u_1 u1会导致不同的投影方差,我们想要找到一个最优的 u 1 u_1 u1,使得投影方差最大。我们可以用以下公式表示投影方差:
σ 2 = 1 n ∑ i = 1 n ( y i − y ˉ ) 2 \sigma^2=\frac{1}{n}\sum_{i=1}^n(y_i-\bar{y})^2 σ2=n1i=1∑n(yi−yˉ)2
其中 y ˉ \bar{y} yˉ是投影值的均值,即 y ˉ = 1 n ∑ i = 1 n y i \bar{y}=\frac{1}{n}\sum_{i=1}^ny_i yˉ=n1∑i=1nyi。我们可以对这个公式进行一些变换,得到:
σ 2 = 1 n ∑ i = 1 n ( y i − y ˉ ) 2 = 1 n ∑ i = 1 n ( y i − 1 n ∑ i = 1 n y i ) 2 = 1 n ∑ i = 1 n ( y i − u 1 T x ˉ ) 2 = 1 n ∑ i = 1 n ( u 1 T x i − u 1 T x ˉ ) 2 = 1 n ∑ i = 1 n ( u 1 T ( x i − x ˉ ) ) 2 = 1 n ∑ i = 1 n u 1 T ( x i − x ˉ ) ( x i − x ˉ ) T u 1 = u 1 T ( 1 n ∑ i = 1 n ( x i − x ˉ ) ( x i − x ˉ ) T ) u 1 = u 1 T C u 1 \begin{aligned} \sigma^2&=\frac{1}{n}\sum_{i=1}^n(y_i-\bar{y})^2\\ &=\frac{1}{n}\sum_{i=1}^n(y_i-\frac{1}{n}\sum_{i=1}^ny_i)^2\\ &=\frac{1}{n}\sum_{i=1}^n(y_i-u_1^T\bar{x})^2\\ &=\frac{1}{n}\sum_{i=1}^n(u_1^Tx_i-u_1^T\bar{x})^2\\ &=\frac{1}{n}\sum_{i=1}^n(u_1^T(x_i-\bar{x}))^2\\ &=\frac{1}{n}\sum_{i=1}^nu_1^T(x_i-\bar{x})(x_i-\bar{x})^Tu_1\\ &=u_1^T(\frac{1}{n}\sum_{i=1}^n(x_i-\bar{x})(x_i-\bar{x})^T)u_1\\ &=u_1^TCu_1 \end{aligned} σ2=n1i=1∑n(yi−yˉ)2=n1i=1∑n(yi−n1i=1∑nyi)2=n1i=1∑n(yi−u1Txˉ)2=n1i=1∑n(u1Txi−u1Txˉ)2=n1i=1∑n(u1T(xi−xˉ))2=n1i=1∑nu1T(xi−xˉ)(xi−xˉ)Tu1=u1T(n1i=1∑n(xi−xˉ)(xi−xˉ)T)u1=u1TCu1
其中 x ˉ \bar{x} xˉ是原始数据的均值向量,即 x ˉ = 1 n ∑ i = 1 n x i \bar{x}=\frac{1}{n}\sum_{i=1}^nx_i xˉ=n1∑i=1nxi, C C C是原始数据的协方差矩阵,即 C = 1 n ∑ i = 1 n ( x i − x ˉ ) ( x i − x ˉ ) T C=\frac{1}{n}\sum_{i=1}^n(x_i-\bar{x})(x_i-\bar{x})^T C=n1∑i=1n(xi−xˉ)(xi−xˉ)T。我们可以对原始数据进行中心化处理,即减去均值向量,得到:
Z = X − [ x ˉ x ˉ ⋮ x ˉ ] = [ x 1 − x ˉ x 2 − x ˉ ⋮ x n − x ˉ ] Z=X-\begin{bmatrix} \bar{x}\\ \bar{x}\\ \vdots\\ \bar{x}\\ \end{bmatrix}= \begin{bmatrix} x_1-\bar{x}\\ x_2-\bar{x}\\ \vdots\\ x_n-\bar{x} \end{bmatrix} Z=X− xˉxˉ⋮xˉ = x1−xˉx2−xˉ⋮xn−xˉ
这样,协方差矩阵可以简化为 C = 1 n Z T Z C=\frac{1}{n}Z^TZ C=n1ZTZ,投影方差可以简化为 σ 2 = u 1 T ( 1 n Z T Z ) u 1 \sigma^2=u_1^T(\frac{1}{n}Z^TZ)u_1 σ2=u1T(n1ZTZ)u1。我们的优化目标是:
max u 1 u 1 T ( 1 n Z T Z ) u 1 \max_{u_1}u_1^T(\frac{1}{n}Z^TZ)u_1 u1maxu1T(n1ZTZ)u1
同时,我们还有一个约束条件,就是 u 1 u_1 u1必须是一个单位向量,即 u 1 T u 1 = 1 u_1^Tu_1=1 u1Tu1=1。这样,我们可以用拉格朗日乘数法来构造一个拉格朗日函数:
L ( u 1 , λ ) = u 1 T ( 1 n Z T Z ) u 1 + λ ( 1 − u 1 T u 1 ) L(u_1,\lambda)=u_1^T(\frac{1}{n}Z^TZ)u_1+\lambda(1-u_1^Tu_1) L(u1,λ)=u1T(n1ZTZ)u1+λ(1−u1Tu1)
对这个函数求偏导,得到:
∂ L ∂ u 1 = 2 ( 1 n Z T Z ) u 1 − 2 λ u 1 \frac{\partial L}{\partial u_1}=2(\frac{1}{n}Z^TZ)u_1-2\lambda u_1 ∂u1∂L=2(n1ZTZ)u1−2λu1
令偏导为零,得到:
( 1 n Z T Z ) u 1 = λ u 1 (\frac{1}{n}Z^TZ)u_1=\lambda u_1 (n1ZTZ)u1=λu1
观察上式可以发现, λ \lambda λ是 ( 1 n Z T Z ) (\frac{1}{n}Z^TZ) (n1ZTZ)的特征值, u 1 u_1 u1是对应的特征向量。我们只要求解 ( 1 n Z T Z ) (\frac{1}{n}Z^TZ) (n1ZTZ)的特征值和特征向量,然后选择最大的特征值对应的特征向量作为 u 1 u_1 u1,就可以实现数据降维。
回到我们的例子中,我们先对原始数据进行中心化处理,得到:
Z = [ − 3 − 3 − 1 − 2 0 0 2 2 ] Z=\begin{bmatrix} -3 & -3 \\ -1 & -2 \\ 0 & 0 \\ 2 & 2 \end{bmatrix} Z= −3−102−3−202
然后计算协方差矩阵:
C = 1 4 Z T Z = [ 5 5 5 5 ] C=\frac{1}{4}Z^TZ=\begin{bmatrix} 5 & 5 \\ 5 & 5 \end{bmatrix} C=41ZTZ=[5555]
然后求解协方差矩阵的特征值和特征向量:
∣ C − λ I ∣ = 0 ∣ 5 − λ 5 5 5 − λ ∣ = 0 ( 5 − λ ) 2 − 25 = 0 λ 2 − 10 λ = 0 λ ( λ − 10 ) = 0 λ = 0 , 10 \begin{aligned} |C-\lambda I|&=0\\ \begin{vmatrix} 5-\lambda & 5 \\ 5 & 5-\lambda \end{vmatrix}&=0\\ (5-\lambda)^2-25&=0\\ \lambda^2-10\lambda&=0\\ \lambda(\lambda-10)&=0\\ \lambda&=0,10\\ \end{aligned} ∣C−λI∣ 5−λ555−λ (5−λ)2−25λ2−10λλ(λ−10)λ=0=0=0=0=0=0,10
当 λ = 10 \lambda=10 λ=10时,代入协方差矩阵得到:
( C − 10 I ) u 1 = 0 [ − 5 5 5 − 5 ] u 1 = 0 u 1 = [ a a ] (C-10I)u_1=0\\ \begin{bmatrix} -5 & 5 \\ 5 & -5 \end{bmatrix}u_1=0\\ u_1=\begin{bmatrix} a \\ a \end{bmatrix} (C−10I)u1=0[−555−5]u1=0u1=[aa]
由于 u 1 u_1 u1是单位向量,所以 a = 1 2 a=\frac{1}{\sqrt{2}} a=21或 a = − 1 2 a=-\frac{1}{\sqrt{2}} a=−21。我们可以任意选择一个作为 u 1 u_1 u1,比如:
u 1 = [ 1 2 1 2 ] u_1=\begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix} u1=[2121]
这样,我们就得到了最优的坐标轴 u 1 u_1 u1,它能够最大化数据的投影方差。我们可以用这个坐标轴来计算每个样本的投影值:
y i = u 1 T x i y = [ y 1 y 2 y 3 y 4 ] = X u 1 = [ 3 / 2 6 / 2 9 / 2 13 / 2 ] y_i=u_1^Tx_i\\ y=\begin{bmatrix} y_1 \\ y_2 \\ y_3 \\ y_4 \end{bmatrix}=Xu_1=\begin{bmatrix} 3/\sqrt{2} \\ 6/\sqrt{2} \\ 9/\sqrt{2} \\ 13/\sqrt{2} \end{bmatrix} yi=u1Txiy= y1y2y3y4 =Xu1= 3/26/29/213/2