主成分分析(principal component analysis, PCA)公式

  • Post author:
  • Post category:其他




主成分分析



摘要

主成分分析作为一种常见的数据降维(dimension reduction)的方法,在数据科学的许多领域(比如图像压缩,时间序列预测等)都有广泛的应用。本文将简要介绍主成分分析的概念及相关公式。



什么是主成分

要对一组数据进行主成分分析(principal component analysis, PCA),我们首先要理解什么是主成分。概括地说,主成分是一个向量,这个向量在较低维度上概括了原来的较高维度数据的分布。假设我们的原始数据(红色的点)如下图中红色的点所示。

PCA示例

我们看到,每一个红色的点都有两个坐标,我们记为



(

x

,

y

)

(x, \, y)






(


x


,






y


)





。但是我们发现红色点的分布可以用蓝色的直线来近似。如果对于每一个红色的点



(

x

i

,

y

i

)

(x_i, \, y_i)






(



x










i


















,







y










i


















)





,我们由



(

x

i

,

y

i

)

(x_i, \, y_i)






(



x










i


















,







y










i


















)





向蓝色的线做垂线(即做投影),那么我们将在蓝色的线上得到一个与



(

x

i

,

y

i

)

(x_i, \, y_i)






(



x










i


















,







y










i


















)





对应的点。如果我们在蓝色的线上规定一个原点,那么这个点在蓝色的线上对应的坐标就是一个实数,记为



z

i

z_i







z










i





















。于是,对于每一个红色的点



(

x

i

,

y

i

)

(x_i, \, y_i)






(



x










i


















,







y










i


















)





,我们有一个对应的点



z

i

z_i







z










i





















。这样,我们就把一个二维的数据转化为用一维数据来表示。这条蓝色的直线所代表的方向就是红色点集合的第一主成分。

对于三维的数据,类似的,我们同样可以根据数据点的分布找到能代表数据的主成分方向,如图2所示。图中蓝色的点代表原始的三维数据,而橙色的平面表示原始数据第一主成分与第二主成分所构成的平面。那么,我们将原始的数据向这个平面投影,每个三维的数据点



(

x

i

,

y

i

,

z

i

)

(x_i, \, y_i, \, z_i)






(



x










i


















,







y










i


















,







z










i


















)





就会映射成一个二维的点



(

w

1

i

,

w

2

i

)

(w_{1i}, \, w_{2i})






(



w











1


i



















,







w











2


i



















)





通过上面两个例子,我们看到主成分分析可以帮助我们将原始的高维数据用低维的数据来表示,从而实现数据降维(dimension reduction)的目的。这在数据维度非常多的情况下,可以大大减少数据维度与存储空间。

3维PCA示例

对于二维和三维的情况,我们尚且能通过画图看出数据的大致分布。但是对于



p

p






p









(

p

3

)

(p \geq 3)






(


p













3


)





的数据,我们不能将数据绘制出来。这时候怎么办呢?这正是我们须要用主成分分析(principal component analysis, PCA)的地方。PCA 可以帮助我们将高维的数据转化成低维的表示。

当然,在这个过程中,我们只是用低维数据去近似表示原来的高维数据。也就是说,我们筛选出了原来高维数据中信息含量最大的那些维度。



求解 PCA 的公式

怎么去求PCA中的主成分方向(或是主成分向量)呢?我们先将问题用数学化的语言来描述。假设我们有



n

n






n





个数据,数据的维度是



p

p






p





。这



n

n






n





个数据所组成的矩阵记为



X

X






X









X

X






X





是一个



n

×

p

n \times p






n




×








p





的矩阵。



X

X






X





的每一行代表一个数据。我们可以将矩阵



X

X






X





写成





X

=

(

X

1

,

X

2

,


,

X

p

)

\displaystyle X = (X_1, \, X_2, \, \cdots, \, X_p)






X




=








(



X










1


















,







X










2


















,













,







X










p


















)





这里的



X

j

,

1

j

p

X_j, \, 1 \leq j \leq p







X










j


















,






1













j













p





是一个



n

×

1

n \times 1






n




×








1





的列向量,表示第



i

i






i





个 feature 在每一个数据点的值。为了方便起见,我们假设每一个 feature 在



n

n






n





个数据点测得的值的均值为0。于是



i

=

1

n

x

i

j

=

0

,

j

=

1

,

2

,


,

p

\displaystyle \sum_{i = 1}^n x_{ij} = 0, \forall j = 1, \, 2, \, \cdots, \, p















i


=


1


















n




















x











ij





















=








0


,







j




=








1


,






2


,













,






p





。那么,我们所要求的第一主值向量



ϕ

1

=

(

ϕ

11

,

ϕ

21

,


,

ϕ

p

1

)

T

\phi_1 = (\phi_{11}, \phi_{21}, \cdots, \, \phi_{p1})^T







ϕ










1




















=








(



ϕ











11



















,





ϕ











21



















,











,







ϕ











p


1




















)










T












是使得线性映射





Z

1

=

ϕ

11

X

1

+

ϕ

21

X

2

+

+

ϕ

p

1

X

p

Z_1 = \phi_{11} X_1 + \phi_{21} X_2 + \cdots + \phi_{p1} X_p







Z










1




















=









ϕ











11




















X










1




















+









ϕ











21




















X










2




















+













+









ϕ











p


1




















X










p






















方差最大的那个向量 [1]。 注意,这里我们须要加一个限制条件,就是



i

=

1

p

ϕ

i

1

2

=

1

\displaystyle \sum_{i = 1}^p \phi_{i1}^2 = 1















i


=


1


















p




















ϕ











i


1









2




















=








1





。否则,只要我们增大



ϕ

i

1

\phi_{i1}







ϕ











i


1


























Z

1

Z_1







Z










1





















的方差就可以变得无限大。

因为每个



X

j

X_j







X










j





















均为



n

×

1

n \times 1






n




×








1





的向量,这里得到的



Z

1

Z_1







Z










1





















也将是一个



n

×

1

n \times 1






n




×








1





的向量。我们记





Z

1

=

(

z

11

z

21

z

n

1

)

Z_1 = \begin{pmatrix} z_{11} \\ z_{21} \\ \vdots \\ z_{n1} \\ \end{pmatrix}







Z










1




















=
































































z











11


























z











21







































z











n


1























































































这里



z

i

1

z_{i1}







z











i


1


























Z

1

Z_1







Z










1





















的第



i

i






i





个分量 (



i

=

1

,

2

,


,

n

i = 1, 2, \cdots, \, n






i




=








1


,




2


,











,






n





),





z

i

1

=

ϕ

11

x

i

1

+

ϕ

21

x

i

2

+

+

ϕ

p

1

x

i

p

z_{i1} = \phi_{11} x_{i1} + \phi_{21} x_{i2} + \cdots + \phi_{p1} x_{ip}







z











i


1





















=









ϕ











11




















x











i


1





















+









ϕ











21




















x











i


2





















+













+









ϕ











p


1




















x











i


p























事实上,我们可以将




Z

1

=

ϕ

11

X

1

+

ϕ

21

X

2

+

+

ϕ

p

1

X

p

Z_1 = \phi_{11} X_1 + \phi_{21} X_2 + \cdots + \phi_{p1} X_p







Z










1




















=









ϕ











11




















X










1




















+









ϕ











21




















X










2




















+













+









ϕ











p


1




















X










p






















写成矩阵的形式:




Z

1

=

ϕ

11

X

1

+

ϕ

21

X

2

+

+

ϕ

p

1

X

p

=

X

ϕ

1

Z_1 = \phi_{11} X_1 + \phi_{21} X_2 + \cdots + \phi_{p1} X_p = X \phi_1







Z










1




















=









ϕ











11




















X










1




















+









ϕ











21




















X










2




















+













+









ϕ











p


1




















X










p




















=








X



ϕ










1






















那么,



Z

1

Z_1







Z










1





















的样本方差就为



1

n

i

=

1

n

(

Z

i

1

E

(

Z

1

)

)

2

\frac{1}{n} \sum_{i = 1}^n (Z_{i1} – \mathbb{E}(Z_1))^2


















n
















1




































i


=


1









n


















(



Z











i


1






























E


(



Z










1


















)



)










2
















E

(

Z

1

)

\mathbb{E}(Z_1)






E


(



Z










1


















)





是样本平均数。

要使得



Z

1

Z_1







Z










1





















的方差最大,我们须要找到



(

ϕ

11

,

ϕ

21

,


,

ϕ

p

1

)

(\phi_{11}, \phi_{21}, \cdots, \, \phi_{p1})






(



ϕ











11



















,





ϕ











21



















,











,







ϕ











p


1



















)





,使得



1

n

i

=

1

n

(

Z

i

1

E

(

Z

1

)

)

2

\frac{1}{n} \sum_{i = 1}^n (Z_{i1} – \mathbb{E}(Z_1))^2


















n
















1




































i


=


1









n


















(



Z











i


1






























E


(



Z










1


















)



)










2












最大。这样求解第一主成分的问题就转化成了最大化某个函数值的过程。我们注意到,





E

(

Z

1

)

=

1

n

i

=

1

n

z

i

1

=

1

n

i

=

1

n

(

ϕ

11

x

i

1

+

ϕ

21

x

i

2

+

+

ϕ

p

1

x

i

p

)

=

1

n

i

=

1

n

j

=

1

p

ϕ

j

1

x

i

j

=

1

n

j

=

1

p

ϕ

j

1

i

=

1

n

x

i

j

\begin{aligned} \displaystyle \mathbb{E}(Z_1) &= \frac{1}{n} \sum_{i = 1}^n z_{i1} \\ &= \frac{1}{n} \sum_{i = 1}^n ( \phi_{11} x_{i1} + \phi_{21} x_{i2} + \cdots + \phi_{p1} x_{ip}) \\ &= \frac{1}{n} \sum_{i = 1}^n \sum_{j = 1}^p \phi_{j1} x_{ij} \\ &= \frac{1}{n} \sum_{j = 1}^p \phi_{j1} \sum_{i = 1}^n x_{ij} \end{aligned}
















E


(



Z










1


















)















































=















n














1































i


=


1


















n




















z











i


1





























=















n














1































i


=


1


















n

















(



ϕ











11




















x











i


1





















+





ϕ











21




















x











i


2





















+









+





ϕ











p


1




















x











i


p



















)












=















n














1































i


=


1


















n




























j


=


1


















p




















ϕ











j


1




















x











ij





























=















n














1































j


=


1


















p




















ϕ











j


1






























i


=


1


















n




















x











ij









































但是根据上面我们的约定,每一个 feature 在



n

n






n





个数据点测得的值的均值为0。于是



i

=

1

n

x

i

j

=

0

,

j

=

1

,

2

,


,

p

\displaystyle \sum_{i = 1}^n x_{ij} = 0, \forall j = 1, \, 2, \, \cdots, \, p















i


=


1


















n




















x











ij





















=








0


,







j




=








1


,






2


,













,






p





。我们就有



E

(

Z

1

)

=

0

\displaystyle \mathbb{E}(Z_1) =0






E


(



Z










1


















)




=








0





。我们的最大化问题随之变成了:





maximize

ϕ

11

,

ϕ

21

,


,

ϕ

p

1

1

n

i

=

1

n

(

j

=

1

p

ϕ

j

1

x

i

j

)

2

\underset{\phi_{11},\, \phi_{21}, \, \cdots, \phi_{p1}}{\text{maximize}} \frac{1}{n} \sum_{i = 1}^n \left(\sum_{j = 1}^p \phi_{j1} x_{ij} \right)^2

















ϕ











11



















,





ϕ











21



















,









,



ϕ











p


1




























maximize































n














1































i


=


1


















n






















(












j


=


1


















p




















ϕ











j


1




















x











ij




















)












2












可以证明,这个最大化问题的解就是矩阵



1

n

X

T

X

\displaystyle \frac{1}{n} X^T X

















n














1





















X










T









X





最大的那个特征值所对应的特征向量。我们称矩阵



1

n

X

T

X

\displaystyle \frac{1}{n} X^T X

















n














1





















X










T









X





是 样本矩阵



X

X






X





的协方差矩阵。这个协方差矩阵是半正定的 (positive semidefinite)。所以它的特征值均是非负的。



数学证明

为什么矩阵



1

n

X

T

X

\displaystyle \frac{1}{n} X^T X

















n














1





















X










T









X





最大的那个特征值所对应的特征向量就是第一主成分向量(即



ϕ

1

\phi_1







ϕ










1





















)呢?这一部分我们将从数学上给出证明。

我们首先看要求的优化问题:





maximize

ϕ

11

,

ϕ

21

,


,

ϕ

p

1

1

n

i

=

1

n

(

j

=

1

p

ϕ

j

1

x

i

j

)

2

\underset{\phi_{11},\, \phi_{21}, \, \cdots, \phi_{p1}}{\text{maximize}} \frac{1}{n} \sum_{i = 1}^n \left(\sum_{j = 1}^p \phi_{j1} x_{ij} \right)^2

















ϕ











11



















,





ϕ











21



















,









,



ϕ











p


1




























maximize































n














1































i


=


1


















n






















(












j


=


1


















p




















ϕ











j


1




















x











ij




















)












2














我们可以将



1

n

i

=

1

n

(

j

=

1

p

ϕ

j

1

x

i

j

)

2

\displaystyle \frac{1}{n} \sum_{i = 1}^n \left(\sum_{j = 1}^p \phi_{j1} x_{ij} \right)^2

















n














1































i


=


1


















n






















(












j


=


1


















p




















ϕ











j


1




















x











ij




















)












2












写成一个矩阵的形式。




1

n

i

=

1

n

(

j

=

1

p

ϕ

j

1

x

i

j

)

2

=

1

n

X

ϕ

1

2

\displaystyle \frac{1}{n} \sum_{i = 1}^n \left(\sum_{j = 1}^p \phi_{j1} x_{ij} \right)^2 = \frac{1}{n} || X \phi_1 || ^2

















n














1































i


=


1


















n






















(












j


=


1


















p




















ϕ











j


1




















x











ij




















)












2











=



















n














1




















∣∣


X



ϕ










1

































2












。回忆



X

X






X









n

×

p

n \times p






n




×








p





的矩阵,



ϕ

1

\phi_1







ϕ










1

























p

×

1

p \times 1






p




×








1





的列向量。而



X

ϕ

1

2

\displaystyle || X \phi_1 || ^2






∣∣


X



ϕ










1

































2












又可以写成



ϕ

1

T

X

T

X

ϕ

1

\phi_1^T X^T X \phi_1







ϕ










1








T



















X










T









X



ϕ










1





















。所以我们的优化问题就转化成了:





maximize

ϕ

11

,

ϕ

21

,


,

ϕ

p

1

1

n

ϕ

1

T

X

T

X

ϕ

1

=

maximize

ϕ

11

,

ϕ

21

,


,

ϕ

p

1

ϕ

1

T

(

1

n

X

T

X

)

ϕ

1

\underset{\phi_{11},\, \phi_{21}, \, \cdots, \phi_{p1}}{\text{maximize}} \frac{1}{n} \phi_1^T X^T X \phi_1 = \underset{\phi_{11},\, \phi_{21}, \, \cdots, \phi_{p1}}{\text{maximize}} \phi_1^T \left( \frac{1}{n} X^T X \right) \phi_1

















ϕ











11



















,





ϕ











21



















,









,



ϕ











p


1




























maximize































n














1





















ϕ










1








T



















X










T









X



ϕ










1




















=



















ϕ











11



















,





ϕ











21



















,









,



ϕ











p


1




























maximize





















ϕ










1








T






















(














n














1





















X










T









X



)







ϕ










1





















为了证明使得



ϕ

1

T

(

1

n

X

T

X

)

ϕ

1

\phi_1^T \left( \frac{1}{n} X^T X \right) \phi_1







ϕ










1








T






















(















n
















1






















X










T









X



)







ϕ










1





















最大化的



ϕ

1

\phi_1







ϕ










1





















就是



1

n

X

T

X

\frac{1}{n} X^T X


















n
















1






















X










T









X





最大的特征值对应的特征向量,我们先证明下面的引理。


Lema



如果



A

R

p

×

p

A \in \mathbb{R}^{p \times p}






A














R











p


×


p













是一个对称的positive semidefinite 的矩阵。



A

A






A





的 特征值为



λ

1

>

λ

2

>

λ

p

\lambda_1 > \lambda_2 \cdots > \lambda_p







λ










1




















>









λ










2

























>









λ










p





















,对应的特征向量为



ϕ

1

,

ϕ

2

,


,

ϕ

p

\phi_1, \, \phi_2, \cdots, \phi_p







ϕ










1


















,







ϕ










2


















,











,





ϕ










p





















。那么



ϕ

1

\phi_1







ϕ










1





















就是下面优化问题的解。





max

x

R

p

,

x

2

=

1

x

T

A

x

\max\limits_{x \in \mathbb{R}^p, ||x||^2 = 1} x^T A x















x






R










p









,


∣∣


x

















2









=


1









max




















x










T









A


x






简要证明:

因为



A

R

p

×

p

A \in \mathbb{R}^{p \times p}






A














R











p


×


p













是一个对称的positive semidefinite 的矩阵,我们可以将



A

A






A





分解为



A

=

Φ

D

Φ

T

A = \Phi D \Phi^T






A




=








Φ


D



Φ










T












。其中



Φ

\Phi






Φ









A

A






A





的特征向量组成的矩阵。即



Φ

=

(

ϕ

1

,

ϕ

2

,


,

ϕ

p

)

\Phi = (\phi_1, \, \phi_2, \cdots, \phi_p)






Φ




=








(



ϕ










1


















,







ϕ










2


















,











,





ϕ










p


















)









A

ϕ

i

=

λ

i

ϕ

i

A \phi_i = \lambda_i \phi_i






A



ϕ










i




















=









λ










i



















ϕ










i





















,这里每一个



ϕ

i

\phi_i







ϕ










i





















均为



p

×

1

p \times 1






p




×








1





的列向量。并且



Φ

Φ

T

=

I

p

×

p

\Phi \Phi^T = \mathbb{I}_{p \times p}






Φ



Φ










T











=









I











p


×


p

























D

D






D





是由特征值



λ

i

\lambda_i







λ










i





















组成的对角矩阵,




D

=

(

λ

1

λ

p

)

D = \begin{pmatrix} \lambda_1 & & \\ & \ddots & \\ & & \lambda_p \end{pmatrix}






D




=
































































λ










1
















































































































λ










p




















































































对于任意的列向量



x

R

p

,

x

2

=

1

x \in \mathbb{R}^p, \, ||x||^2 = 1






x














R










p









,






∣∣


x

















2











=








1





,我们有





x

T

A

x

=

x

T

Φ

D

Φ

T

x

=

i

=

1

p

λ

i

x

T

ϕ

i

ϕ

i

T

x

=

i

=

1

p

λ

i

ϕ

i

T

x

2

i

=

1

p

λ

1

ϕ

i

T

x

2

=

λ

1

i

=

1

p

ϕ

i

T

x

2

=

λ

1

Φ

x

2

=

λ

1

(

x

T

Φ

T

Φ

x

)

=

λ

1

x

T

x

=

λ

1

\begin{aligned} x^T A x &= x^T \Phi D \Phi^T x \\ &= \sum_{i = 1}^p \lambda_i x^T \phi_i \phi_i^T x \\ &= \sum_{i = 1}^p \lambda_i || \phi_i^T x||^2 \\ &\leq \sum_{i = 1}^p \lambda_1 || \phi_i^T x||^2 \\ &= \lambda_1 \sum_{i = 1}^p || \phi_i^T x||^2 \\ &= \lambda_1 || \Phi x||^2 \\ &= \lambda_1 (x^T \Phi^T \Phi x) = \lambda_1 x^T x = \lambda_1 \end{aligned}

















x










T









A


x

































































=





x










T









Φ


D



Φ










T









x












=













i


=


1


















p




















λ










i



















x










T










ϕ










i



















ϕ










i








T


















x












=













i


=


1


















p




















λ










i


















∣∣



ϕ










i








T


















x

















2

































i


=


1


















p




















λ










1


















∣∣



ϕ










i








T


















x

















2



















=





λ










1





























i


=


1


















p



















∣∣



ϕ










i








T


















x

















2



















=





λ










1


















∣∣Φ


x

















2



















=





λ










1


















(



x










T










Φ










T









Φ


x


)




=





λ










1



















x










T









x




=





λ










1






































于是我们知道



max

x

R

p

,

x

2

=

1

x

T

A

x

λ

1

\max\limits_{x \in \mathbb{R}^p, ||x||^2 = 1} x^T A x \leq \lambda_1















x






R










p









,


∣∣


x

















2









=


1









max




















x










T









A


x














λ










1





















。如果我们取



x

=

ϕ

1

x = \phi_1






x




=









ϕ










1





















,我们有



x

T

A

x

=

ϕ

1

A

ϕ

1

=

λ

1

x^T A x = \phi_1 A \phi_1 = \lambda_1







x










T









A


x




=









ϕ










1


















A



ϕ










1




















=









λ










1





















。所以,



ϕ

1

\phi_1







ϕ










1





















就是最优问题



max

x

R

p

,

x

2

=

1

x

T

A

x

\max\limits_{x \in \mathbb{R}^p, ||x||^2 = 1} x^T A x















x






R










p









,


∣∣


x

















2









=


1









max




















x










T









A


x





的解。



程序验证

我们先用求特征值的方法来求主成分向量。我们的数据是有2个feature,一共有10 个数据。即

X.shape = (10, 2)

np.random.seed(1)
m = 20
x = np.random.uniform(1, 10, m)
y = 2 * x + 1 + np.random.normal(0, 1, m)
x = x - np.mean(x)
y = y - np.mean(y)
X = np.vstack((x, y)).T # X is the data set, X.shape = (m, 2)

我们来求协方差矩阵的特征值和特征向量。

eig_vals, eig_vecs = np.linalg.eig(1 / 2 * np.dot(X.T, X))

eig_vals

array([ 1.12975274, 236.75469475])

eig_vecs # The eigenvectors are eig_vecs[:,1], eig_vecs[:, 2]

array([[-0.89631173, -0.44342449],

[ 0.44342449, -0.89631173]])

我们看到,最大的特征值是 236.75,对应的特征向量(即第一主成分)为 (-0.443, -0.896)。第二主成分为 (-0.896, 0.443)。

我们可以检验这两个主成分与用 sklearn 中的PCA 方法得到的结果是一样的。

pca = PCA(n_components=2, svd_solver='full')
pca.fit(X)
pca_phis = pca.components_

PCA(copy=True, iterated_power=‘auto’, n_components=2, random_state=None,

svd_solver=‘full’, tol=0.0, whiten=False)

array([[ 0.44342449, 0.89631173],

[-0.89631173, 0.44342449]])

可以看到,得到的第一主成分是(0.443, 0.896),第二主成分是 (-0.896, 0.443)。这些结果与求解特征值与特征向量得到的结果相同。

原始数据



X

X






X





(红色) 与第一主成分(蓝色)、第二主成分(绿色)如下图所示。

PCA demo



参考文献

[1] An introduction to statistical learning: with applications in R, Gareth James, Daniela Witten, Trevor Hastie, and Robert Tibshirani, Springer.



版权声明:本文为kdazhe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。