PCA
当数据特征较多时,为方便运算和简化分析,我们能不能从中提取有效信息,把原数据用更低维数据表示?
假设现在有n个样本,有如下的二维数据: [x1, y1 ; x2, y2 ; … ;xn, yn] 先将数据规范化(中心化),即均将所有点的横坐标均值与纵坐标均值变成0,处理方法为每个点的横坐标减去所有点横坐标均值,纵坐标同理。 在主成分分析中,若有一低维平面能有效提取原数据信息,则它应一般满足最大可分性:样本点在这一低维平面的投影尽可能分开,也就是方差最大原则。 从下面图片就能看出,主成分最好选择Component 1,这时数据在Component 1上的投影较Component 2上方差明显大。 那如何确定主成分,确定后如何选择主成分?下面进行简单算法推导。 我们将原数据写成矩阵的形式如下:
A
=
[
x
1
y
1
x
2
y
2
.
.
.
.
.
.
x
n
y
n
]
(3)
A= \left[\begin{matrix} x_1 & y_1 \\ x_2 & y_2 \\ ... &... \\ x_n & y_n \end{matrix} \right] \tag{3}
A=?????x1?x2?...xn??y1?y2?...yn???????(3) 其中
x
 ̄
=
0
,
y
 ̄
=
0
\overline{x}=0,\overline{y}=0
x=0,y?=0,则 横坐标方差
S
2
(
x
)
=
∑
i
=
1
n
x
i
2
n
?
1
S^2(x)=\frac{\displaystyle\sum_{i=1}^nx_i^2}{n-1}
S2(x)=n?1i=1∑n?xi2?? 纵坐标方差
S
2
(
y
)
=
∑
i
=
1
n
y
i
2
n
?
1
S^2(y)=\frac{\displaystyle\sum_{i=1}^ny_i^2}{n-1}
S2(y)=n?1i=1∑n?yi2?? 协方差为
c
o
v
(
x
,
y
)
=
∑
i
=
1
n
x
i
y
i
n
?
1
cov(x,y)=\frac{\displaystyle\sum_{i=1}^nx_iy_i}{n-1}
cov(x,y)=n?1i=1∑n?xi?yi?? 协方差矩阵为:
C
=
[
S
2
(
x
)
c
o
v
(
x
,
y
)
c
o
v
(
x
,
y
)
S
2
(
y
)
]
=
A
T
A
n
?
1
(3)
C= \left[\begin{matrix} S^2(x) & cov(x,y) \\ cov(x,y) & S^2(y) \end{matrix} \right] \tag{3}=\frac{A^TA}{n-1}
C=[S2(x)cov(x,y)?cov(x,y)S2(y)?]=n?1ATA?(3) 现定义一单位向量
u
u
u,求各样本点所表示向量在
u
u
u方向上投影的长度,使长度方差最大。 设一样本对应向量为
a
a
a,即其在
u
u
u上投影长度表示为两向量的点乘:
a
?
?
u
?
=
∣
a
∣
∣
u
∣
c
o
s
θ
=
∣
a
∣
c
o
s
θ
\vec{a}*\vec{u}=|a||u|cos\theta=|a|cos\theta
a
?u
=∣a∣∣u∣cosθ=∣a∣cosθ 设,每个样本在
u
u
u上的投影长度为
s
i
s_i
si?,因为数据为中心化的数据, 所以长度的方差为
S
2
=
∑
i
=
1
n
s
i
2
n
?
1
=
u
?
A
T
?
(
u
?
A
T
)
T
n
?
1
=
u
?
A
T
A
n
?
1
u
?
T
=
u
?
C
u
?
T
S^2=\frac{\displaystyle\sum_{i=1}^ns_i^2}{n-1}=\frac{\vec{u}A^T*(\vec{u}A^T)^T}{n-1}=\vec{u}\frac{A^TA}{n-1}\vec{u}^T=\vec{u}C\vec{u}^T
S2=n?1i=1∑n?si2??=n?1u
AT?(u
AT)T?=u
n?1ATA?u
T=u
Cu
T 所以我们的目标转化为使
S
2
S^2
S2即
u
?
C
u
?
T
\vec{u}C\vec{u}^T
u
Cu
T最大。 现利用拉氏函数求目标函数
J
J
J的最大值。 目标函数:
J
=
S
2
=
u
?
C
u
?
T
J=S^2=\vec{u}C\vec{u}^T
J=S2=u
Cu
T 约束条件:
u
?
u
?
T
=
1
\vec{u}\vec{u}^T=1
u
u
T=1 拉氏函数:
F
(
u
?
)
=
u
?
C
u
?
T
?
λ
(
1
?
u
?
u
?
T
)
F(\vec{u})=\vec{u}C\vec{u}^T-\lambda(1-\vec{u}\vec{u}^T)
F(u
)=u
Cu
T?λ(1?u
u
T) 对
u
?
\vec{u}
u
求偏导:
?
F
?
u
?
=
0
?
C
u
?
T
=
λ
u
?
T
\frac{\partial^{}F}{\partial \vec{u}^{}}=0\Rightarrow C\vec{u}^T=\lambda\vec{u}^T
?u
?F?=0?Cu
T=λu
T 此时
C
C
C已知,为协方差矩阵,
u
?
,
λ
\vec{u},\lambda
u
,λ分别为
C
C
C的特征向量、特征值,可以求出。 此时
A
u
?
T
A\vec{u}^T
Au
T代表原二维坐标平面在一维向量
u
?
\vec{u}
u
上的投影,或者是在以
u
?
\vec{u}
u
方向轴上的坐标,形状为nx1,此时
A
u
?
T
A\vec{u}^T
Au
T就可以作为原数据的一个主成分。 但此时根据
C
C
C可以求出两个不同的特征向量,方向分别对应Component 1,Component 2。如何选取? 答:看
S
2
S^2
S2,也就是在特征向量方向轴上的投影长度方差,方差越大,可以认为,含有原数据信息量越全面。 前面提到长度的方差
S
2
=
u
?
C
u
?
T
S^2=\vec{u}C\vec{u}^T
S2=u
Cu
T,而由拉式函数偏导结果
C
u
?
T
=
λ
u
?
T
C\vec{u}^T=\lambda\vec{u}^T
Cu
T=λu
T带进
S
2
S^2
S2,得到
S
2
=
λ
S^2=\lambda
S2=λ,即原数据在对应特征向量方向轴上的方差就是该特征向量对应的特征值!!! 可以看出,特征值越大,方差越大,对原数据的信息保留越全面。 第i主成分覆盖信息率为
λ
i
λ
1
+
λ
2
+
.
.
.
+
λ
n
\frac{\lambda_i}{\lambda_1+\lambda_2+...+\lambda_n}
λ1?+λ2?+...+λn?λi?? 我们应选取覆盖信息率高的主成分作为原数据的主成分,主成分为
A
u
?
T
A\vec{u}^T
Au
T。
|