PCA主成分分析
给定一组数据 { x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn}
预处理
将每一维特征的均值中心化,方差归一化
- u = 1 n ∑ i = 1 n x i u = \frac {1}{n}\sum_{i=1}^nx_i u=n1∑i=1nxi // u u u就是数据中心
- { x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn} = { x 1 − u , x 2 − u , . . . , x n − u x_1-u,x_2-u,...,x_n-u x1−u,x2−u,...,xn−u} // 数据中心化:将坐标原点移到数据的中心点: 其中: u = { u 1 , u 2 , . . . , u m } T u=\lbrace u_1,u_2,...,u_m\rbrace^T u={u1,u2,...,um}T,是一个 n n n维列向量。
- σ j 2 = 1 m ∑ j ( x i j ) \sigma_j^2=\frac{1}{m}\sum_{j}(x_i^j) σj2=m1∑j(xij)
- x i j = x i j / σ j x_i^j= x_i^j/\sigma_j xij=xij/σj
PCA的数学目标
特征的主方向,就是特征幅度变化最大的方向。为了找到特征变化最大的方向,假设单位方向矢量
u
u
u,则特征点
x
x
x在
u
u
u方向上的投影点
x
’
x^’
x’距离原点的距离
d
=
x
T
u
d=x^Tu
d=xTu。所有的样本点都在一个方向上投影后,它们就都在同一直线上了。
要比较它们之间变化的程度,只要比较
d
d
d的方差就行了。方差最大的
u
u
u对应的方向就是要找的主方向。
注:方差计算:
因此,目标函数就成了:
m
a
x
u
1
n
∑
i
=
1
n
(
x
i
T
u
)
2
=
m
a
x
u
1
n
∑
i
=
1
n
u
T
x
i
x
i
T
u
=
m
a
x
u
u
T
(
1
n
∑
i
=
1
n
x
i
x
i
T
)
u
max_u\frac{1}{n}\sum_{i=1}^n(x_i^Tu)^2 \\=max_u\frac{1}{n} \sum_{i=1}^nu^Tx_ix_i^Tu\\=max_uu^T(\frac{1}{n}\sum_{i=1}^nx_ix_i^T)u
maxun1i=1∑n(xiTu)2=maxun1i=1∑nuTxixiTu=maxuuT(n1i=1∑nxixiT)u
其中
x
i
x_i
xi表示第
i
i
i个样本,
n
n
n表示样本总数。(因为
x
x
x已中心化,所以
x
i
T
u
x_i^Tu
xiTu的均值也是0,因此
x
i
T
u
x_i^Tu
xiTu的平方之和就是方差)
上式括号中的一项非常熟悉,就是协方差矩阵
∑
\sum
∑,再看上面的式子,协方差矩阵与投影的方向无关,只与样本有关。因此协方差矩阵完全决定了数据的分布情况。
所以目标函数如下:
m
a
x
u
u
T
∑
u
s
.
t
.
u
T
u
=
1
max_uu^T\sum u \\ s.t.u^Tu=1
maxuuT∑us.t.uTu=1
利用拉格朗日乘子法可求解上面的最大化问题:
∑
u
=
λ
u
\sum u=\lambda u
∑u=λu
由上,
u
u
u就是
∑
\sum
∑的特征向量,
λ
\lambda
λ就是特征值。带入目标函数得:
m
a
x
u
u
T
∑
u
=
m
a
x
u
u
T
λ
u
=
m
a
x
u
λ
u
T
u
=
m
a
x
u
λ
max_uu^T\sum u =max_uu^T\lambda u=max_u\lambda u^Tu=max_u\lambda
maxuuT∑u=maxuuTλu=maxuλuTu=maxuλ
所以,可以通过协方差矩阵的迹来衡量方差的大小。最大的特征值
λ
\lambda
λ对应的特征向量
u
u
u决定了数据变化最大的方向。
u
u
u就是要求的单位向量。
因此,PCA的求解过程就是对协方差矩阵进行特征值分解,并且找到最大的几个特征值的过程。