Principal components analysis 尝试寻找
n
n
n 维原空间的一个
M
M
M 维子空间,使样本集在其上的投影保留了尽量多的信息。在 PCA 之前,我们首先需要对数据集归一
x
i
:
=
x
i
−
x
ˉ
x_i := x_i - \bar x
xi:=xi−xˉ
使用设计矩阵的定义
X
=
[
x
1
,
x
2
,
…
,
x
m
]
T
X = [x_1, x_2,\dots,x_m]^T
X=[x1,x2,…,xm]T 我们可以完成从原空间到子空间的映射
Y
=
X
P
Y = XP
Y=XP
其中 P = [ u 1 , u 2 , … , u M ] P = [u_1, u_2, \dots, u_M] P=[u1,u2,…,uM] 是由一组单位正交向量构成的变换矩阵。对于保留尽量多的原始信息这一目标,存在着下面两种理解
- Y Y Y 的样本方差尽可能大
- 从 Y Y Y 恢复到原空间后偏差尽可能小
下面将会证明这两种理解是等价的。
最大方差思想
假设
M
=
1
M = 1
M=1 则算法只需找到一个向量
u
u
u 满足
max
u
∣
∣
X
u
∣
∣
2
/
m
s
.
t
.
u
T
u
=
1
\begin{array}{rl} \max\limits_u & ||Xu||^2 / m\\ s.t. & u^Tu = 1 \end{array}
umaxs.t.∣∣Xu∣∣2/muTu=1
设协方差矩阵
Σ
=
1
m
X
T
X
\Sigma = \frac{1}{m} X^TX
Σ=m1XTX
则优化目标可以化为
u
T
Σ
u
u^T\Sigma u
uTΣu 。应用拉格朗日乘数法可以得到
∂
∂
u
(
u
T
Σ
u
+
λ
(
u
T
u
−
1
)
)
=
Σ
u
+
λ
u
=
0
\frac{\partial}{\partial u} (u^T\Sigma u + \lambda(u^Tu - 1)) = \Sigma u + \lambda u = 0
∂u∂(uTΣu+λ(uTu−1))=Σu+λu=0
因此
u
u
u 和
λ
\lambda
λ 分别是
Σ
\Sigma
Σ 的特征向量和对应特征值。重新考察目标函数
u
T
Σ
u
=
λ
u
T
u
=
λ
u^T\Sigma u = \lambda u^Tu = \lambda
uTΣu=λuTu=λ
也就是说,样本在特征向量 u u u 方向上的投影,所构成的样本集的方差即为其特征值。因此 u u u 应该是 Σ \Sigma Σ 的最大特征值对应的特征向量,称为 first principal components 。一般地对于 M ≠ 1 M \ne 1 M=1 的情况,可以循环地执行以下步骤
- 选取原空间中的第一主成分 u u u
- 取原空间对于向量 u u u 的补空间作为下一次循环的原空间
最小均方误差思想
假设存在原空间的某个坐标系 [ u 1 , u 2 , … , u n ] [u_1, u_2, \dots, u_n] [u1,u2,…,un] ,取其中前 M M M 个坐标轴 [ u 1 , u 2 , … , u M ] [u_1, u_2, \dots, u_M] [u1,u2,…,uM] 构成子空间坐标变换矩阵 P P P 。不妨设某个样本 x x x 在这样的坐标系下具有坐标 ( x 1 , x 2 , … , x n ) (x_1, x_2, \dots, x_n) (x1,x2,…,xn) ,则容易证明其对应的 y = ( x 1 , x 2 , … , x M ) y = (x_1, x_2, \dots, x_M) y=(x1,x2,…,xM) 。
现在我们希望找到一种方法使
y
y
y 恢复到原空间,并与
x
x
x 尽可能一致。但是由于缺少
x
M
+
1
,
x
M
+
2
,
…
,
x
n
x_{M + 1}, x_{M + 2}, \dots, x_n
xM+1,xM+2,…,xn 的信息,我们只能用其均值
0
0
0 来进行估计。也就是说重构得到的向量
x
~
=
(
y
1
,
y
2
,
…
,
y
M
,
0
,
…
,
0
)
\tilde x = (y_1, y_2, \dots, y_M, 0, \dots, 0)
x~=(y1,y2,…,yM,0,…,0)
这时就会引入重构误差
J
=
∣
∣
x
−
x
~
∣
∣
2
=
∑
i
=
M
+
1
n
x
i
2
=
∑
i
=
M
+
1
n
u
i
T
x
x
T
u
i
J = ||x - \tilde x||^2 = \sum\limits_{i = M + 1}^n x_i^2 = \sum\limits_{i = M + 1}^n u_i^Txx^Tu_i
J=∣∣x−x~∣∣2=i=M+1∑nxi2=i=M+1∑nuiTxxTui
对于所有样本,均方误差的定义如下
J
=
∑
i
=
M
+
1
n
u
i
T
Σ
u
i
J = \sum\limits_{i = M + 1}^n u_i^T \Sigma u_i
J=i=M+1∑nuiTΣui
接下来的讨论与最大方差思想类似。不同点在于这里需要选出 n − M n - M n−M 个特征向量使特征值最小。这些特征向量将作为补空间的一组基,而子空间的基则是剩余的 M M M 个主成分。因此在结论上,最小均方误差思想和最大方差思想一致。
处理高维数据
模型求解可以通过 SVD 完成,但是对于高维数据
n
≫
m
n \gg m
n≫m 计算量会大一些。对于这种情况我们可以计算矩阵
X
X
T
XX^T
XXT 的特征值
λ
\lambda
λ 和特征向量
u
u
u 。这个矩阵的维数是
m
m
m 因此比较容易计算。算出来之后可以证明
X
T
X
(
X
T
u
)
=
X
T
⋅
λ
u
X^TX(X^Tu) = X^T\cdot \lambda u
XTX(XTu)=XT⋅λu
因此
X
T
u
X^Tu
XTu 即为
Σ
\Sigma
Σ 的特征向量,同时特征值
λ
\lambda
λ 并没有改变。因为1
∣
∣
X
T
u
∣
∣
2
=
λ
||X^Tu||^2 = \lambda
∣∣XTu∣∣2=λ 所以归一化可得特征向量
v
=
X
T
u
λ
v = \frac{X^Tu}{\sqrt{\lambda}}
v=λXTu
相关系数矩阵
如果原空间中数据的各个特征量纲不同,可以使用数据的相关系数矩阵代替原数据。但是计算相关系数时,需要保证特征的标准差非零。当且仅当某个特征的取值为常数,其标准差才会为零。因此可以将标准差为零的特征提前删除,而不会造成误差。
结果分析
设
F
j
=
X
u
j
F_j = Xu_j
Fj=Xuj 表示第
j
j
j 个主成分的取值。不难证明
F
i
T
F
j
=
u
i
T
X
T
X
u
j
=
{
m
λ
j
i
=
j
0
i
≠
j
F_i^TF_j = u_i^TX^TXu_j = \begin{cases} m\lambda_j & i = j\\ 0 & i \ne j \end{cases}
FiTFj=uiTXTXuj={mλj0i=ji=j
因为
X
X
X 经过了归一化,因此
V
a
r
(
F
j
)
=
λ
j
C
o
v
(
F
i
,
F
j
)
=
0
\begin{array}{rcl} Var(F_j) &=& \lambda_j\\ Cov(F_i, F_j) &=& 0 \end{array}
Var(Fj)Cov(Fi,Fj)==λj0
贡献率
从最大方差的角度思考,我们的目标是最大化
∑
j
=
1
M
V
a
r
(
F
j
)
\sum_{j = 1}^M Var(F_j)
∑j=1MVar(Fj) 。因此某个主成分对整体的贡献可以被
λ
\lambda
λ 所度量。定义第
j
j
j 主成分贡献率
c
j
=
λ
j
∑
j
=
1
n
λ
j
c_j = \frac{\lambda_j}{\sum_{j = 1}^n \lambda_j}
cj=∑j=1nλjλj
不难看出随着 j j j 的增大,贡献率在逐渐减小,但累积贡献率 ∑ i = 1 j c i \sum_{i = 1}^j c_i ∑i=1jci 却在增大。实际应用中,一般对累积贡献率设定某个阈值 ξ \xi ξ 来确定主成分的个数。
被提取率
对于原数据中的每个特征,其信息可能分散到多个主成分中
x
=
[
u
1
,
u
2
,
…
,
u
n
]
y
x = [u_1, u_2, \dots, u_n]y
x=[u1,u2,…,un]y
我们同样使用方差作为信息的度量,设
V
a
r
(
x
i
)
=
σ
i
2
=
V
a
r
(
∑
j
=
1
n
(
u
j
)
i
F
j
)
=
∑
j
=
1
n
(
u
j
)
i
2
λ
j
Var(x_i) = \sigma_i^2 = Var\left(\sum_{j = 1}^n (u_j)_iF_j\right) = \sum_{j = 1}^n (u_j)_i^2\lambda_j
Var(xi)=σi2=Var(j=1∑n(uj)iFj)=j=1∑n(uj)i2λj
其中
(
u
j
)
i
(u_j)_i
(uj)i 表示主成分
u
j
u_j
uj 的第
i
i
i 个元素。定义
Ω
i
=
∑
j
=
1
M
(
u
j
)
i
2
λ
j
σ
i
2
\Omega_i = \sum_{j = 1}^M \frac{(u_j)_i^2\lambda_j}{\sigma_i^2}
Ωi=j=1∑Mσi2(uj)i2λj
为特征
x
i
x_i
xi 的被提取率。事实上相关系数
ρ
(
x
i
,
F
j
)
=
(
u
j
)
i
λ
j
σ
i
\rho(x_i, F_j) = \frac{(u_j)_i\sqrt{\lambda_j}}{\sigma_i}
ρ(xi,Fj)=σi(uj)iλj
因此被提取率还可以被定义为
Ω
i
=
∑
j
=
1
M
ρ
2
(
x
i
,
F
j
)
\Omega_i = \sum_{j = 1}^M \rho^2(x_i, F_j)
Ωi=j=1∑Mρ2(xi,Fj)
设矩阵 A T A A^TA ATA 有特征值 λ i \lambda_i λi 和特征向量 v i v_i vi ,则 ∣ ∣ A v i ∣ ∣ 2 = ( A v i ) T A v i = v i T A T A v i = v i T ( λ i v i ) = λ i \begin{array}{rcl} ||Av_i||^2 &=& (Av_i)^TAv_i\\ &=& v_i^TA^TAv_i\\ &=& v_i^T(\lambda_iv_i)\\ &=& \lambda_i \end{array} ∣∣Avi∣∣2====(Avi)TAviviTATAviviT(λivi)λi ↩︎