赞
踩
主成分分析( Principal components analysis),简称PCA,是最主要的数据降维方法之一。本文从PCA的思想开始,一步一步推导PCA。
对于
X
=
[
x
1
x
2
.
.
.
x
n
]
X =
我们既可以降维到第一主成分轴,也可以降维到第二主成分轴。直观上,第一主成分轴 优于 第二主成分轴,即具有最大可分性。
那么如何找到这这些主成分轴并且选择最优成分轴呢?
下面解决一些基本概念。
欲获得原始数据新的表示空间,最简单的方法是对原始数据进行线性变换(基变换):
Y = P X Y = PX Y=PX
其中 X X X是原始样本, P P P是基向量, Y Y Y是新表达。
数学表达:
[
p
1
p
2
⋮
p
R
]
R
×
N
[
x
1
x
2
⋯
x
M
]
N
×
M
=
[
p
1
x
1
p
1
x
2
⋯
p
1
x
M
p
2
x
1
p
2
x
2
⋯
p
2
x
M
⋮
⋮
⋱
⋮
p
R
x
1
p
R
x
2
⋯
p
R
x
M
]
R
×
M
其中
p
i
p_i
pi是行向量,表示第
i
i
i个基,
x
j
x_j
xj是一个列向量,表示第
j
j
j个原始数据记录.
当
R
<
N
R < N
R<N时即 基的维度 < 数据维度时,可达到降维的目的。即:
X
∈
R
N
×
M
→
Y
∈
R
R
×
M
X \in R^{N \times M} \rightarrow Y \in R^{R \times M}
X∈RN×M→Y∈RR×M
以直角坐标系下的点(3,2)为例,欲将点(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。
实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:
[
1
2
1
2
−
1
2
1
2
]
[
3
2
]
=
[
5
2
−
1
2
]
可以稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:
[
1
2
1
2
−
1
2
1
2
]
[
1
2
3
1
2
3
]
=
[
2
2
4
2
6
2
0
0
0
]
回顾一下,我们的目的是希望在降维过程中损失最少,换言之,我们希望投影后的数据尽可能分散开。这种分散程度可以用方差来表达,方差 越大,数据越分散。
定义方差 V a r Var Var:对于单一随机变量 a a a,
V a r ( a ) = 1 m ∑ i = 1 m ( a i − μ ) 2 Var(a) = \frac{1}{m} \sum_{i = 1}^m (a_i - \mu)^2 Var(a)=m1i=1∑m(ai−μ)2
对数据做去中心化(方便后面操作):
V a r ( a ) = 1 m ∑ i = 1 m a i 2 Var(a) = \frac{1}{m} \sum_{i = 1}^m a_i ^2 Var(a)=m1i=1∑mai2
随机变量 a a a表达了 a a a的取值与其数学期望之间的偏离程度。若 V a r ( a ) Var(a) Var(a)较小,意味着 a a a的取值主要集中在期望 μ \mu μ也就是 E ( a ) E(a) E(a)的附近,反之,若 V a r ( a ) Var(a) Var(a)较大,意味着 a a a的取值比较分散。
为了避免过于抽象,我们以一个具体的例子展开。假设我们5个样本数据,分别是
x
1
=
[
1
1
]
,
x
2
=
[
1
3
]
,
x
3
=
[
2
3
]
,
x
4
=
[
4
4
]
,
x
5
=
[
2
4
]
x_1 =
X
=
[
1
1
2
4
2
1
3
3
4
4
]
X =
为了后续处理方便,我们首先将每个字段内所有值都减去字段均值,其结果是将每个字段都变为均值为0.
我们看上面的数据,设第一个特征为
a
a
a ,第二个特征为
b
b
b, 此时某一个样本可以写作:
x
i
=
[
a
b
]
x_i =
且特征
a
a
a的均值为2, 特征
b
b
b的均值为3,所以变换后:
X
=
[
−
1
−
1
0
2
0
−
2
0
0
1
1
]
X =
V a r ( a ) = 6 5 Var(a ) = \frac{\sqrt 6} {5} Var(a)=56 V a r ( b ) = 6 5 Var(b ) = \frac{\sqrt 6} {5} Var(b)=56
协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。
比如对于二维随机变量
x
i
=
[
a
b
]
x_i =
定义协方差 C o v Cov Cov:
C o v ( a , b ) = 1 m ∑ i = 1 m a i b i Cov(a, b) = \frac{1}{m}\sum_{i = 1}^m a_i b_i Cov(a,b)=m1i=1∑maibi
当 C o v ( a , b ) = 0 Cov(a, b) = 0 Cov(a,b)=0时,变量 a , b a,b a,b完全独立,这也是我们希望达到的优化目标。
方差是协方差的一种特殊情况,即当两个变量是相同的情况:
C
o
v
(
a
,
a
)
=
V
a
r
(
a
)
Cov(a, a) = Var(a)
Cov(a,a)=Var(a)
对于二维随机变量
x
i
=
[
a
b
]
x_i =
定义协方差矩阵 C C C:
C = [ V a r ( a ) C o v ( a , b ) C o v ( b , a ) V a r ( b ) ] C =C=[Var(a)Cov(b,a)Cov(a,b)Var(b)][Var(a)Cov(b,a)amp;Cov(a,b)amp;Var(b)]
对于n维随机变量
x
i
=
[
x
1
x
2
⋮
x
n
]
x_i =
C = [ V a r ( x 1 ) C o v ( x 1 , x 2 ) ⋯ C o v ( x 1 , x n ) C o v ( x 2 , x 1 ) V a r ( x 2 ) ⋯ C o v ( x 1 , x n ) ⋮ ⋮ ⋱ ⋮ C o v ( x n , x 1 ) C o v ( x n , x 2 ) ⋯ V a r ( x n ) ] C =
C=⎣⎢⎢⎢⎡Var(x1)Cov(x2,x1)⋮Cov(xn,x1)Cov(x1,x2)Var(x2)⋮Cov(xn,x2)⋯⋯⋱⋯Cov(x1,xn)Cov(x1,xn)⋮Var(xn)⎦⎥⎥⎥⎤⎡⎣⎢⎢⎢⎢⎢Var(x1)Cov(x2,x1)⋮Cov(xn,x1)amp;Cov(x1,x2)amp;Var(x2)amp;⋮amp;Cov(xn,x2)amp;⋯amp;⋯amp;⋱amp;⋯amp;Cov(x1,xn)amp;Cov(x1,xn)amp;⋮amp;Var(xn)⎤⎦⎥⎥⎥⎥⎥
可见,协方差矩阵是 n n n行 n n n列的对称矩阵,主对角线上是方差,而协对角线上是协方差。
依然我们以一个具体的例子展开,还是这5个样本数据,
x
1
=
[
1
1
]
,
x
2
=
[
1
3
]
,
x
3
=
[
2
3
]
,
x
4
=
[
4
4
]
,
x
5
=
[
2
4
]
x_1 =
X
=
[
−
1
−
1
0
2
0
−
2
0
0
1
1
]
X =
那如果有
m
m
m个样本的话,
X
=
[
a
1
a
2
⋯
a
m
b
1
b
2
⋯
b
m
]
X =
对
X
X
X做一些变换,用
X
X
X乘以
X
X
X的转置,并乘上系数1/m:
1
m
X
X
T
=
1
m
[
a
1
a
2
⋯
a
m
b
1
b
2
⋯
b
m
]
[
a
1
b
1
a
2
b
2
⋮
⋮
a
m
b
m
]
\frac{1}{m}XX^T = \frac{1}{m}
这不正是协方差矩阵嘛!
现在我们可以说:
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设 C = 1 m X X T C = \frac{1}{m}XX^T C=m1XXT,则 C C C是一个对称矩阵,其对角线分别个各个特征的方差,而第i行j列和j行i列元素相同,表示i和j两个特征之间的协方差。
回顾一下:
设 X X X的协方差矩阵为 C C C, Y Y Y的协方差矩阵为 D D D,且 Y = P X Y = PX Y=PX。
我们的目的变为:对原始数据 X X X做PCA后,得到的 Y Y Y的协方差矩阵 D D D的各个方向方差最大,协方差为0。
那么 C C C与 D D D是什么关系呢?
D
=
1
m
Y
Y
T
D = \frac{1}{m}YY^T
D=m1YYT
=
1
m
(
P
X
)
(
P
X
)
T
= \frac{1}{m} (PX)(PX)^T
=m1(PX)(PX)T
=
1
m
P
X
X
T
P
T
= \frac{1}{m}PXX^TP^T
=m1PXXTPT
=
1
m
P
(
X
X
T
)
P
T
= \frac{1}{m}P(XX^T)P^T
=m1P(XXT)PT
=
P
C
P
T
= PCP^T
=PCPT
=
P
[
1
m
∑
i
=
1
m
a
i
2
1
m
∑
i
=
1
m
a
i
b
i
1
m
∑
i
=
1
m
a
i
b
i
1
m
∑
i
=
1
m
b
i
2
]
P
T
= P
我们要找的 P P P不是别的,而是能让原始协方差矩阵对角化的 P P P。
换句话说,优化目标变成了寻找一个矩阵 P P P,满足 P C P T PCP^T PCPT是一个对角矩阵,并且对角元素按从大到小依次排列,那么 P P P的前 K K K行就是要寻找的基,用P的前K行组成的矩阵乘以 X X X就使得 X X X从 N N N维降到了 K K K维并满足上述优化条件。
现在所有焦点都聚焦在了协方差矩阵对角化问题上。
由上文知道,协方差矩阵 C C C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:
1)实对称矩阵不同特征值对应的特征向量必然正交。
2)设特征向量 λ \lambda λ重数为 r r r,则必然存在 r r r个线性无关的特征向量对应于 λ \lambda λ,因此可以将这 r r r个特征向量单位正交化。
由上面两条可知,一个
n
n
n行
n
n
n列的实对称矩阵一定可以找到
n
n
n个单位正交特征向量,设这
n
n
n个特征向量为
e
1
,
e
2
,
⋯
,
e
n
e_1,e_2,⋯,e_n
e1,e2,⋯,en,我们将其按列组成矩阵:
E
=
[
e
1
e
2
⋯
e
n
]
E =
则对协方差矩阵
C
C
C有如下结论:
E
T
C
E
=
Λ
=
[
λ
1
λ
2
⋱
λ
n
]
E^T C E = \Lambda =
其中 Λ \Lambda Λ为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。
结合上面的公式:
D
=
P
C
P
T
D = PCP^T
D=PCPT
其中,
D
D
D为对角矩阵,我们可以得到:
P
=
E
T
P = E^T
P=ET
P
P
P是协方差矩阵
C
C
C的特征向量单位化后按行排列出的矩阵,其中每一行都是
C
C
C的一个特征向量。如果设
P
P
P按照
Λ
\Lambda
Λ中特征值的从大到小,将特征向量从上到下排列,则用
P
P
P的前
K
K
K行组成的矩阵乘以原始数据矩阵
X
X
X,就得到了我们需要的降维后的数据矩阵
Y
Y
Y。
总结一下PCA的算法步骤:
设有 m m m条 n n n维数据。
1)将原始数据按列组成 n n n行 m m m列矩阵X
2)将 X X X的每一行(代表一个特征)进行零均值化,即减去这一行的均值
3)求出协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^T C=m1XXT
4)求出协方差矩阵 C C C的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k k k行组成矩阵 P P P
6) Y = P X Y=PX Y=PX即为降维到 k k k维后的数据
这里以上文提到的:
x
1
=
[
1
1
]
,
x
2
=
[
1
3
]
,
x
3
=
[
2
3
]
,
x
4
=
[
4
4
]
,
x
5
=
[
2
4
]
x_1 =
X
=
[
1
1
2
4
2
1
3
3
4
4
]
X =
我们用PCA方法将这组二维数据其降到一维。
为了后续处理方便,我们首先将每个特征内所有值都减去字段均值,其结果是将每个字段都变为均值为0.
X
=
[
−
1
−
1
0
2
0
−
2
0
0
1
1
]
X =
因为这个矩阵的每行已经是零均值,这里我们直接求协方差矩阵:
C
=
1
5
[
−
1
−
1
0
2
0
−
2
0
0
1
1
]
[
−
1
−
2
−
1
0
0
0
2
1
0
1
]
=
[
6
5
4
5
4
5
6
5
]
C = \frac{1}{5}
对于矩阵
C
C
C:
C
=
[
6
5
4
5
4
5
6
5
]
C =
λ
\lambda
λ和
v
v
v分别是特征值和特征向量,
∵
C
v
=
λ
v
\because Cv = \lambda v
∵Cv=λv,则:
(
C
−
λ
I
)
v
=
0
(C - \lambda I)v = 0
(C−λI)v=0
为了使这个方程式有非零解,矩阵
(
C
−
λ
I
)
(C - \lambda I)
(C−λI)的行列式必须是0:
d
e
t
(
C
−
λ
I
)
=
0
det(C - \lambda I) = 0
det(C−λI)=0
即:
d
e
t
(
[
6
5
−
λ
4
5
4
5
6
5
−
λ
]
)
=
0
det(
则:
(
6
5
−
λ
)
2
−
16
25
=
0
(\frac{6}{5}-\lambda) ^2 -\frac{16}{25} = 0
(56−λ)2−2516=0
分解得:
(
λ
−
2
)
(
5
λ
−
2
)
=
0
(\lambda -2)(5\lambda -2) = 0
(λ−2)(5λ−2)=0
找到2个特征值,
λ
=
2
\lambda = 2
λ=2,
λ
=
2
5
\lambda = \frac{2}{5}
λ=52,
when
λ
=
2
\lambda = 2
λ=2:
(
C
−
λ
I
)
v
=
0
(C - \lambda I)v = 0
(C−λI)v=0
即:
[
−
4
5
4
5
4
5
−
4
5
]
[
v
1
v
2
]
=
[
0
0
]
则:
v
1
−
v
2
=
0
v_1 - v_2 = 0
v1−v2=0
v
1
v_1
v1 和
v
2
v_2
v2可以取任意值,我们取归一化的
v
1
v_1
v1 和
v
2
v_2
v2,即:
v
1
2
+
v
2
2
=
1
v_1^2 + v_2^2 = 1
v12+v22=1,
此时
v
1
=
2
2
v_1 = \frac{\sqrt{2} } {2}
v1=22
和
v
2
=
2
2
v_2 = \frac{\sqrt{2} } {2}
v2=22
v
=
[
2
2
2
2
]
v =
when
λ
=
2
5
\lambda = \frac{2}{5}
λ=52:
(
C
−
λ
I
)
v
=
0
(C - \lambda I)v = 0
(C−λI)v=0
即:
[
4
5
4
5
4
5
4
5
]
[
v
1
v
2
]
=
[
0
0
]
则:
v
1
+
v
2
=
0
v_1 + v_2 = 0
v1+v2=0
v
1
v_1
v1 和
v
2
v_2
v2可以取任意值,我们取归一化的
v
1
v_1
v1 和
v
2
v_2
v2,即:
v
1
2
+
v
2
2
=
1
v_1^2 + v_2^2 =1
v12+v22=1
此时
v
1
=
2
2
v_1 = \frac{\sqrt{2} } {2}
v1=22
和
v
2
=
−
2
2
v_2 = -\frac{\sqrt{2} } {2}
v2=−22
v
=
[
−
2
2
2
2
]
v =
所以:
P
=
[
2
2
2
2
−
2
2
2
2
]
P =
可以验证协方差矩阵C的对角化:
P
C
P
T
=
[
2
2
2
2
−
2
2
2
2
]
[
6
5
4
5
4
5
6
5
]
[
2
2
−
2
2
2
2
2
2
]
=
[
2
0
0
2
5
]
PCP^T =
最后我们用
P
P
P的第一行乘以数据矩阵,就得到了降维后的表示:
Y
=
P
X
=
[
2
2
2
2
]
[
−
1
−
1
0
2
0
−
2
0
0
1
1
]
=
[
−
3
2
2
−
2
2
0
3
2
2
2
2
]
Y = PX =
降维投影结果如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。