PCA
主成分分析(PCA,Principle Component Analysis)就是在寻找使方差最大的方向,并在该方向上投影。(通常方差越大被视为越重要,方差也常常被称为能量)
Y
=
A
(
X
−
X
‾
)
Y=A\left( X-\overline{X} \right)
Y=A(X−X)
Y Y Y是PCA的输出, a a a是投影的方向矩阵, X X X是PCA的输入, X ‾ \overline{X} X是 X X X的期望(通常也可以用均值代替 X ‾ = 1 P ∑ i = 1 P X i \overline{X}=\frac{1}{P}\sum_{i=1}^P{X_i} X=P1∑i=1PXi)。
其中: Y Y Y是 M × 1 M\times1 M×1矩阵, a a a是 M × N M\times N M×N矩阵, X X X和 X ‾ \overline{X} X是 N × 1 N \times1 N×1矩阵。可以看出,PCA把 N N N维的数据 X X X投影到了以 a i a_i ai为基向量的空间中得到 M M M维的 Y Y Y,完成降维。( M < N M<N M<N)
A = [ a 1 a 2 ⋮ a M ] A=\left[ \begin{array}{c} a_1\\ a_2\\ \vdots\\ a_M\\ \end{array} \right] A=⎣⎢⎢⎢⎡a1a2⋮aM⎦⎥⎥⎥⎤
PCA的推导
假设训练样本有
{
X
i
}
i
=
1
∼
P
\left\{ X_i \right\} _{i=1\sim P}
{Xi}i=1∼P,则
Y
i
Y_i
Yi可以写成:
Y
i
=
[
y
i
1
y
i
2
⋮
y
i
M
]
=
[
a
1
(
X
i
−
X
‾
)
a
2
(
X
i
−
X
‾
)
⋮
a
M
(
X
i
−
X
‾
)
]
(
i
=
1
∼
P
)
\begin{aligned} Y_i=\left[ \begin{array}{c} y_{i1}\\ y_{i2}\\ \vdots\\ y_{iM}\\ \end{array} \right] =\left[ \begin{array}{c} a_1\left( X_i-\overline{X} \right)\\ a_2\left( X_i-\overline{X} \right)\\ \vdots\\ a_M\left( X_i-\overline{X} \right)\\ \end{array} \right] \,\, \quad\quad \left( i=1\sim P \right) \end{aligned}
Yi=⎣⎢⎢⎢⎡yi1yi2⋮yiM⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡a1(Xi−X)a2(Xi−X)⋮aM(Xi−X)⎦⎥⎥⎥⎤(i=1∼P)
由主成分的含义, y i 1 y_{i1} yi1有最大的方差,因此我们需要最大化 v a r ( y 1 ) = ∑ i = 1 P ( y i 1 − y i 1 ‾ ) 2 var(y_{1})=\sum_{i=1}^P{\left( y_{i1}-\overline{y_{i1}} \right)^2} var(y1)=∑i=1P(yi1−yi1)2。
又因为:
y
i
1
‾
=
1
P
∑
i
=
1
P
y
i
1
=
1
P
∑
i
=
1
P
a
i
(
X
i
−
X
‾
)
=
a
i
P
(
∑
i
=
1
P
X
i
−
P
X
‾
)
=
0
\overline{y_{i1}}=\frac{1}{P}\sum_{i=1}^P{y_{i1}}=\frac{1}{P}\sum_{i=1}^P{a_i\left( X_i-\overline{X} \right)}=\frac{a_i}{P}\left( \sum_{i=1}^P{X_i}-P\overline{X} \right) =0
yi1=P1i=1∑Pyi1=P1i=1∑Pai(Xi−X)=Pai(i=1∑PXi−PX)=0
所以有:
v
a
r
(
y
1
)
=
∑
i
=
1
P
(
y
i
1
−
y
i
1
‾
)
2
=
∑
i
=
1
P
y
i
1
2
=
∑
i
=
1
P
[
a
1
(
X
i
−
X
‾
)
]
2
=
∑
i
=
1
P
[
a
1
(
X
i
−
X
‾
)
]
[
a
1
(
X
i
−
X
‾
)
]
T
=
a
1
∑
i
=
1
P
[
(
X
i
−
X
‾
)
(
X
i
−
X
‾
)
T
]
a
1
T
=
a
1
Σ
a
1
T
\begin{aligned} var(y_{1})&=\sum_{i=1}^P{\left( y_{i1}-\overline{y_{i1}} \right) ^2}=\sum_{i=1}^P{y_{i1}^2}=\sum_{i=1}^P{\left[ a_1\left( X_i-\overline{X} \right) \right] ^2} \\ &=\sum_{i=1}^P{\left[ a_1\left( X_i-\overline{X} \right) \right] \left[ a_1\left( X_i-\overline{X} \right) \right] ^T} \\ &=a_1\sum_{i=1}^P{\left[ \left( X_i-\overline{X} \right) \left( X_i-\overline{X} \right) ^T \right]}a_1^T \\ &=a_1\varSigma a_1^T \end{aligned}
var(y1)=i=1∑P(yi1−yi1)2=i=1∑Pyi12=i=1∑P[a1(Xi−X)]2=i=1∑P[a1(Xi−X)][a1(Xi−X)]T=a1i=1∑P[(Xi−X)(Xi−X)T]a1T=a1Σa1T
其中
Σ
=
∑
i
=
1
P
(
X
i
−
X
‾
)
(
X
i
−
X
‾
)
T
\varSigma =\sum_{i=1}^P{ \left( X_i-\overline{X} \right) \left( X_i-\overline{X} \right) ^T }
Σ=∑i=1P(Xi−X)(Xi−X)T称为
X
X
X的协方差矩阵。在上式中,我们不希望
y
1
y_{1}
y1的大小和
a
1
a_1
a1有关,因为
a
1
a_1
a1只是一个基向量,控制投影的方向,我们希望
a
1
a_1
a1是一个单位向量。因此,上述求最大值变成以下优化问题:
max
:
a
1
Σ
a
1
T
s
.
t
.
a
1
a
1
T
=
∥
a
1
∥
2
=
1
\begin{aligned} &\max:\quad a_1\varSigma a_1^T \\ &s.t. \quad a_1a_1^T=\lVert a_1 \rVert ^2 =1 \end{aligned}
max:a1Σa1Ts.t.a1a1T=∥a1∥2=1
解上面优化问题可以使用拉格朗日乘数法:
E
(
a
1
)
=
a
1
Σ
a
1
T
−
λ
1
(
a
1
a
1
T
−
1
)
∂
E
(
a
1
)
∂
a
1
=
2
(
Σ
a
1
T
−
λ
1
a
1
T
)
T
=
0
\begin{aligned} &E\left( a_1 \right) =a_1\varSigma a_1^T-\lambda_1 \left( a_1a_1^T-1 \right) \\ &\frac{\partial E\left( a_1 \right)}{\partial a_1}=2\left( \varSigma a_1^T-\lambda_1 a_1^T \right) ^T=0 \end{aligned}
E(a1)=a1Σa1T−λ1(a1a1T−1)∂a1∂E(a1)=2(Σa1T−λ1a1T)T=0
得到:
Σ
a
1
T
=
λ
1
a
1
T
\varSigma a_1^T=\lambda_1 a_1^T
Σa1T=λ1a1T(即
a
1
T
a_1^T
a1T是
Σ
\Sigma
Σ的特征向量,
λ
1
\lambda_1
λ1是对应的特征值)
目标函数变为:
v
a
r
(
y
1
)
=
a
1
Σ
a
1
T
=
λ
1
a
1
a
1
T
=
λ
1
var(y_1)=a_1\varSigma a_1^T=\lambda_1 a_1a_1^T=\lambda_1
var(y1)=a1Σa1T=λ1a1a1T=λ1
则当
a
1
a_1
a1是
Σ
\Sigma
Σ最大的特征值
λ
1
\lambda_{1}
λ1对应的特征向量时,
a
1
a_1
a1是此优化问题的解。
我们称 y 1 = a 1 ( X − X ‾ ) y_1=a_1\left( X-\overline{X} \right) y1=a1(X−X)为 X X X的第一主成分, a 1 a_1 a1是 Σ \Sigma Σ最大的特征值 λ 1 \lambda_{1} λ1对应的特征向量。
我们接着求
a
2
a_2
a2,我们希望求出的主成分之间是不相关的,即:
c
o
v
(
y
1
,
y
2
)
=
∑
i
P
(
y
i
1
−
y
i
1
‾
)
(
y
i
2
−
y
i
2
‾
)
=
∑
i
P
y
i
1
y
i
2
=
∑
i
P
[
a
1
(
X
i
−
X
ˉ
)
]
[
a
2
(
X
i
−
X
ˉ
)
]
T
=
a
1
Σ
a
2
T
=
0
\begin{aligned} cov\left( y_1,y_2 \right) &=\sum_i^P{\left( y_{i1}-\overline{y_{i1}} \right) \left( y_{i2}-\overline{y_{i2}} \right)}=\sum_i^P{y_{i1}y_{i2}} \\ &=\sum_i^P{\left[ a_1\left( X_i-\bar{X} \right) \right] \left[ a_2\left( X_i-\bar{X} \right) \right] ^T} \\ &=a_1\varSigma a_2^T=0 \end{aligned}
cov(y1,y2)=i∑P(yi1−yi1)(yi2−yi2)=i∑Pyi1yi2=i∑P[a1(Xi−Xˉ)][a2(Xi−Xˉ)]T=a1Σa2T=0
同理,由
c
o
v
(
y
2
,
y
1
)
=
0
cov\left( y_2,y_1 \right)=0
cov(y2,y1)=0推出
a
2
Σ
a
1
T
=
0
a_2\varSigma a_1^T=0
a2Σa1T=0,且由上面的推导可知,
a
2
Σ
a
1
T
=
λ
1
a
2
a
1
T
=
0
a_2\varSigma a_1^T=\lambda _1a_2a_1^T=0
a2Σa1T=λ1a2a1T=0推出
a
2
a
1
T
=
0
a_2a_1^T=0
a2a1T=0,即
a
1
a_1
a1与
a
2
a_2
a2正交。
求解 a 2 a_2 a2变成了下列优化问题:
max
:
a
2
Σ
a
2
T
s
.
t
.
a
2
a
2
T
=
∥
a
2
∥
2
=
1
,
a
1
a
2
T
=
a
2
a
1
T
=
0
\begin{aligned} &\max :\quad a_2\varSigma a_{2}^{T} \\ &s.t.\quad a_2a_{2}^{T}=\lVert a_2 \rVert ^2=1,a_1a_{2}^{T}=a_2a_{1}^{T}=0 \end{aligned}
max:a2Σa2Ts.t.a2a2T=∥a2∥2=1,a1a2T=a2a1T=0
解上面优化问题可以使用拉格朗日乘数法:
E
(
a
2
)
=
a
2
Σ
a
2
T
−
λ
2
(
a
2
a
2
T
−
1
)
−
β
a
1
a
2
T
∂
E
(
a
2
)
∂
a
2
=
(
2
Σ
a
2
T
−
2
λ
2
a
2
T
−
β
a
1
T
)
T
=
0
\begin{aligned} &E\left( a_2 \right) =a_2\varSigma a_{2}^{T}-\lambda _2\left( a_2a_{2}^{T}-1 \right) -\beta a_1a_{2}^{T} \\ &\frac{\partial E\left( a_2 \right)}{\partial a_2}=\left( 2\varSigma a_{2}^{T}-2\lambda_2 a_{2}^{T}-\beta a_{1}^{T} \right) ^T=0 \end{aligned}
E(a2)=a2Σa2T−λ2(a2a2T−1)−βa1a2T∂a2∂E(a2)=(2Σa2T−2λ2a2T−βa1T)T=0
得到:
(
2
Σ
a
2
T
−
2
λ
2
a
2
T
−
β
a
1
T
)
T
=
2
a
2
Σ
T
−
2
λ
2
a
2
−
β
a
1
=
2
a
2
Σ
−
2
λ
2
a
2
−
β
a
1
=
0
(
2
a
2
Σ
−
2
λ
2
a
2
−
β
a
1
)
a
1
T
=
2
a
2
Σ
a
1
T
−
2
λ
2
a
2
a
1
T
−
β
a
1
a
1
T
=
−
β
=
0
\begin{aligned} \left( 2\varSigma a_{2}^{T}-2\lambda _2a_{2}^{T}-\beta a_{1}^{T} \right) ^T&=2a_2\varSigma ^T-2\lambda _2a_2-\beta a_1=2a_2\varSigma -2\lambda _2a_2-\beta a_1=0 \\ \left(2 a_2\varSigma -2\lambda _2a_2-\beta a_1 \right) a_{1}^{T}&=2a_2\varSigma a_{1}^{T}-2\lambda _2a_2a_{1}^{T}-\beta a_1a_{1}^{T}=-\beta =0 \end{aligned}
(2Σa2T−2λ2a2T−βa1T)T(2a2Σ−2λ2a2−βa1)a1T=2a2ΣT−2λ2a2−βa1=2a2Σ−2λ2a2−βa1=0=2a2Σa1T−2λ2a2a1T−βa1a1T=−β=0
将
β
=
0
\beta=0
β=0带入
∂
E
(
a
2
)
∂
a
2
\frac{\partial E\left( a_2 \right)}{\partial a_2}
∂a2∂E(a2)得到:
Σ
a
2
T
−
λ
2
a
2
T
=
0
\varSigma a_{2}^{T}-\lambda _2a_{2}^{T}=0
Σa2T−λ2a2T=0
即
a
2
T
a_2^T
a2T是
Σ
\Sigma
Σ的特征向量,
λ
2
\lambda_2
λ2是对应的特征值
目标函数变为:
v
a
r
(
y
2
)
=
a
2
Σ
a
2
T
=
λ
2
a
2
a
2
T
=
λ
2
var(y_2)=a_2\varSigma a_2^T=\lambda_2 a_2a_2^T=\lambda_2
var(y2)=a2Σa2T=λ2a2a2T=λ2
则当
a
2
a_2
a2是
Σ
\Sigma
Σ第二大的特征值
λ
2
\lambda_2
λ2对应的特征向量时,
a
2
a_2
a2是此优化问题的解。
Σ \Sigma Σ最大的特征值 λ 1 \lambda_1 λ1已经分配给 v a r ( y 1 ) var(y_1) var(y1)了
我们称 y 2 = a 2 ( X − X ‾ ) y_2=a_2\left( X-\overline{X} \right) y2=a2(X−X)为 X X X的第二主成分, a 2 a_2 a2是 Σ \Sigma Σ最大的特征值 λ 2 \lambda_{2} λ2对应的特征向量。
按照上述方法可以求得第一、第二、直到第 M M M主成分 y i y_i yi,其系数向量 a 1 T , a 2 T , ⋯ , a M T a_1^T,a_2^T,\cdots ,a_M^T a1T,a2T,⋯,aMT分别是 Σ \Sigma Σ的第一个、第二个、直到第 M M M个单位特征向量, λ 1 , λ 2 , ⋯ , λ M \lambda_1,\lambda_2,\cdots,\lambda_M λ1,λ2,⋯,λM分别是对应的特征值,其值依次递减。并且,第 k k k主成分的方差等于 Σ \Sigma Σ的第 k k k个特征值。
PCA算法总结
PCA算法:
-
求 Σ = ∑ i = 1 P ( X i − X ‾ ) ( X i − X ‾ ) T \varSigma =\sum_{i=1}^P{ \left( X_i-\overline{X} \right) \left( X_i-\overline{X} \right) ^T } Σ=∑i=1P(Xi−X)(Xi−X)T
-
求 Σ \varSigma Σ的特征值并按从大到小排序 [ λ 1 , λ 2 , ⋯ , λ M ] \left[ \lambda _1,\lambda _2,\cdots ,\lambda _M \right] [λ1,λ2,⋯,λM],对应特征值 [ a 1 T , a 2 T , ⋯ , a M T ] \left[ a_1^T,a_2^T,\cdots ,a_M^T \right] [a1T,a2T,⋯,aMT]
-
归一化所有 a i T a_i^T aiT,使 ∥ a i T ∥ = 1 \lVert a_{i}^{T} \rVert =1 ∥aiT∥=1
-
A = [ a 1 a 2 ⋮ a M ] A=\left[ \begin{array}{c} a_1\\ a_2\\ \vdots\\ a_M\\ \end{array} \right] A=⎣⎢⎢⎢⎡a1a2⋮aM⎦⎥⎥⎥⎤
-
Y = A ( X − X ‾ ) Y=A\left( X-\overline{X} \right) Y=A(X−X)
SVD(Singular Value Decomposition)算法可以快速求得特征值