【Python机器学习】之 PCA 算法(一)

PCA 原理

1、PCA 原理推导

​ 假设有 M 个样本 x 1 , x 2 , . . . , x m x_1, x_2, ..., x_m x1,x2,...,xm ,每个样本点 x i x_i xi 含有 N 个特征,则每个样本数据可以表示为: x i = ( x i ( 1 ) , ( x i ( 2 ) , . . . , ( x i ( n ) ) x_i =( x^{(1)}_i, (x^{(2)}_i,..., (x^{(n)}_i) xi=(xi(1),(xi(2),...,(xi(n)),整体样本数据在 N 维特征空间的原始坐标系为 I = ( i 1 , i 2 , . . . , i n ) I=(i_1, i_2, ..., i_n) I=(i1,i2,...,in) I I I 是一组标准正交基,即有如下性质:
∣ ∣ i s ∣ ∣ 2 =   1 i s T ⋅ i t =   0   ,   s ≠ t \begin{aligned} ||i_s||_2 =& \ 1 \\ i_s^T \cdot i_t =& \ 0 \ , \ s ≠ t \end{aligned} is2=isTit= 1 0 , s̸=t
​ 样本点 x i x_i xi 在原始坐标系中的表示为:
x i = ( i 1 , i 2 , . . . , i n ) ⋅ ( x i ( 1 ) x i ( 2 ) ⋮ x i ( n ) )   ,   i = 1 , 2 , 3... , m x_i= (i_1, i_2, ...,i_n)\cdot \begin{pmatrix} x^{(1)}_i \\ x^{(2)}_i \\ \vdots \\ x^{(n)}_i \end{pmatrix} \ , \ i=1,2,3...,m xi=(i1,i2,...,in)xi(1)xi(2)xi(n) , i=1,2,3...,m
​ 假设进行线性变换之后得到的新的坐标系为 J = ( j 1 , j 2 , . . . , j n ′ ) J=(j_1, j_2, ..., j_{n'}) J=(j1,j2,...,jn) J J J 同样是一组标准正交基,即满足上述正交基的性质。则样本点 x i x_i xi 在新的坐标系中的近似表示为:
x i ∼ = ( j 1 , j 2 , . . . , j n ′ ) ⋅ ( z i ( 1 ) z i ( 2 ) ⋮ z i ( n ′ ) )   ,   i = 1 , 2 , 3... , m \mathop{{x_i}}\limits^{\sim } = (j_1, j_2, ...,j_{n'})\cdot \begin{pmatrix} z^{(1)}_i \\ z^{(2)}_i \\ \vdots \\ z^{(n')}_i \end{pmatrix} \ , \ i=1,2,3...,m xi=(j1,j2,...,jn)zi(1)zi(2)zi(n) , i=1,2,3...,m
​ 根据正交基的性质, j s j_s js 可以等价于:
j s = ( i 1 , i 2 , . . . , i n ) ⋅ ( j s ⋅ i 1 j s ⋅ i 2 ⋮ j s ⋅ i n )   ,   s = 1 , 2 , 3... , m ′ j_s= (i_1, i_2, ...,i_n)\cdot \begin{pmatrix} j_s \cdot i_1 \\ j_s \cdot i_2 \\ \vdots \\ j_s \cdot i_n \\ \end{pmatrix} \ , \ s=1,2,3...,m' js=(i1,i2,...,in)jsi1jsi2jsin , s=1,2,3...,m
​ 令:
w s = ( j s ⋅ i 1 j s ⋅ i 2 ⋮ j s ⋅ i n )   ,   s = 1 , 2 , 3... , m ′ w_s= \begin{pmatrix} j_s \cdot i_1 \\ j_s \cdot i_2 \\ \vdots \\ j_s \cdot i_n \\ \end{pmatrix} \ , \ s=1,2,3...,m' ws=jsi1jsi2jsin , s=1,2,3...,m
​ 则 w s w_s ws 是一个新的基向量,其各分量就是基向量 j s j_s js 在原始坐标系 ( i 1 , i 2 , . . . , i n ) (i_1, i_2, ..., i_n) (i1,i2,...,in) 中的投影。所以, j s j_s js 可以写为:
j s = ( i 1 , i 2 , . . . , i n ) ⋅ w s   ,   s = 1 , 2 , . . . , n ′ j_s = (i_1, i_2, ...,i_n)\cdot w_s \ , \ s =1 ,2 ,..., n' js=(i1,i2,...,in)ws , s=1,2,...,n
​ 根据正交基性质,有 ∣ ∣ w s ∣ ∣ 2   =   1   ,   w s T ⋅ w t =   0   ,   s ≠ t ||w_s||_2\ =\ 1 \ , \ w_s^T \cdot w_t = \ 0 \ , \ s≠t ws2 = 1 , wsTwt= 0 , s̸=t

​ 类似的有 w 1 , w 2 , . . . , w n ′ w_1,w_2,...,w_{n'} w1,w2,...,wn,将其写成矩阵形式为:
W = [ w 1 , w 2 , . . . , w N ′ ] = ( j 1 ⋅ i 1 j 2 ⋅ i 1 ⋯ j n ′ ⋅ i 1 j 1 ⋅ i 2 j 2 ⋅ i 2 ⋯ j n ′ ⋅ i 2 ⋮ ⋮ ⋱ ⋮ j 1 ⋅ i n j 2 ⋅ i n ⋯ j n ′ ⋅ i n ) W = [w_1, w_2, ...,w_{N'}] = \begin{pmatrix} j_1 \cdot i_1 & j_2 \cdot i_1 & \cdots & j_{n'} \cdot i_1\\ j_1 \cdot i_2 & j_2 \cdot i_2 & \cdots & j_{n'} \cdot i_2\\ \vdots & \vdots & \ddots & \vdots \\ j_1 \cdot i_n & j_2 \cdot i_n & \cdots & j_{n'} \cdot i_n\\ \end{pmatrix} W=[w1,w2,...,wN]=j1i1j1i2j1inj2i1j2i2j2injni1jni2jnin
​ 则 W 就称为坐标变换矩阵,且有 W = W T ,   W W T = I W = W^T, \ WW^T =I W=WT, WWT=I 。根据坐标变换矩阵,新坐标系和原始坐标系直接的关系可以表示为:
( j 1 , j 2 , . . . , j n ′ ) = ( i 1 , i 2 , . . . , i n ) ⋅ W (j_1, j_2, ...,j_{n'}) = (i_1, i_2, ...,i_n)\cdot W (j1,j2,...,jn)=(i1,i2,...,in)W
​ 将其带入前面 x i x_i xi 在新坐标系中的近似表达式,可得:
x l ∼ = ( j 1 , j 2 , . . . , j n ′ ) ⋅ ( z i ( 1 ) z i ( 2 ) ⋮ z i ( n ′ ) ) = ( i 1 , i 2 , . . . , i n ) W ⋅ ( z i ( 1 ) z i ( 2 ) ⋮ z i ( n ′ ) ) \mathop{{x_l}}\limits^{\sim} = (j_1, j_2, ...,j_{n'})\cdot \begin{pmatrix} z^{(1)}_i \\ z^{(2)}_i \\ \vdots \\ z^{(n')}_i \end{pmatrix} = (i_1, i_2, ...,i_n) W \cdot \begin{pmatrix} z^{(1)}_i \\ z^{(2)}_i \\ \vdots \\ z^{(n')}_i \end{pmatrix} xl=(j1,j2,...,jn)zi(1)zi(2)zi(n)=(i1,i2,...,in)Wzi(1)zi(2)zi(n)
​ 再将其与 x i x_i xi 在原始坐标系中的表达式 x i = ( i 1 , i 2 , . . . , i n ) ⋅ ( x i ( 1 ) x i ( 2 ) ⋮ x i ( n ) ) x_i = (i_1, i_2, ...,i_n)\cdot \begin{pmatrix}x^{(1)}_i \\ x^{(2)}_i \\\vdots \\ x^{(n)}_i \end{pmatrix} xi=(i1,i2,...,in)xi(1)xi(2)xi(n) 比较可知,通过坐标变换来降维,相当于是用 W z i Wz_i Wzi 去近似表示了 x i x_i xi ,使:
x i = W z i x_i = W z_i xi=Wzi
​ 即:
z i = W − 1 x i = W T x i z_i = W^{-1}x_i=W^Tx_i zi=W1xi=WTxi
​ 则有:
z i = w s T x i   , s = 1 , 2 , 3... , n ′ z_i = w_s^Tx_i \ , \quad\quad\quad\quad s=1,2,3...,n' zi=wsTxi ,s=1,2,3...,n

一般, n ′ n' n 会远小于 n n n ,这样就可以达到降维的目的了。将维度由 M M M 降到 M ′ M' M ,相当于人为的丢弃了部分坐标。我们的要求是:基于将为后的坐标重构样本时,得到的重构样本与原始原本坐标尽量相同。对于样本点 x i x_i xi 来说,即要使 W z i W z_i Wzi x i x_i xi 的距离最小化,推广到整体样本点,即
m i n ∑ i = 1 M ∣ ∣ W z i − x i ∣ ∣ 2 2 min \sum\limits_{i=1}^M|| W z_i - x_i ||^2_2 mini=1MWzixi22
​ 先计算 ∣ ∣ W z i − x i ∣ ∣ 2 2 || W z_i - x_i ||^2_2 Wzixi22,即
∑ i = 1 M ∣ ∣ W z i − x i ∣ ∣ 2 2 = ( ∑ i = 1 M x i T x i ) − t r [ W T ( ∑ i = 1 M x i T x i ) W ] = ( ∑ i = 1 M x i T x i ) − t r ( W T X X T W ) \sum\limits_{i=1}^M|| W z_i - x_i ||^2_2 \\ \begin{aligned} &= (\sum\limits_{i=1}^Mx_i^Tx_i) - tr[W^T(\sum\limits_{i=1}^Mx_i^Tx_i)W] \\ &= (\sum\limits_{i=1}^Mx_i^Tx_i) - tr(W^TXX^TW) \end{aligned} i=1MWzixi22=(i=1MxiTxi)tr[WT(i=1MxiTxi)W]=(i=1MxiTxi)tr(WTXXTW)
​ 因为对于给定 M 个样本, ∑ i = 1 n x i T x i \sum\limits^n_{i=1}x_i^Tx_i i=1nxiTxi 是一个固定值,因此最小化上面的结果等价于:
m i n   − t r ( W T X X T W ) s . t . W T W = I min \ - tr(W^TXX^TW) \\ s.t. \quad W^TW=I min tr(WTXXTW)s.t.WTW=I
​ 构造拉格朗日函数:
L ( W ) = − t r ( W T X X T W ) + λ ( W T W − I ) L(W) = - tr(W^TXX^TW) + \lambda(W^TW-I) L(W)=tr(WTXXTW)+λ(WTWI)
​ 对 W W W 求导,可得:

− X X T W + λ W = 0 -XX^TW + \lambda W = 0 XXTW+λW=0

​ 移项可得;
X X T W = λ W XX^TW = \lambda W XXTW=λW

可以看出,坐标变换矩阵 W W W X X T XX^T XXT M ′ M' M 个特征向量组成的矩阵,而 λ \lambda λ X X T XX^T XXT 的特征值。当我们将原始数据集从 N N N 维降到 N ’ N’ N 维时,只需要找到 X X T XX^T XXT 最大的 N ’ N’ N 个特征值对应的特征向量,将其组成坐标变换矩阵(投影矩阵) W W W ,然后利用 z i = W T x i z_i = W^Tx_i zi=WTxi 即可实现降维的目的


文中实例及参考:

  • 《机器学习基础》

你可能感兴趣的:(机器学习)