PCA理论部分
PCA简介
顾名思义,主成分分析是分析一组数据中的主要成分。它是一种很好用的特征提取算法,用于降维。
PCA降维后的数据的各个维度之间是相互正交的,即提取出的特征之间是相互独立的,也就是这组数据的主要特征,而原始数据中可能某两个甚至多个字段之间存在着相关性,因此这个算法被称为主成分分析。
在很多情况下,无法人为去分辨一组数据中是否有冗余字段,因为这些字段之间可能存在着某种隐含的、人难以分辨的内在联系,或者得到的特征是一组计算出的向量,没有属性标签,在这种情况下,就需要对信息进行PCA降维。
PCA的作用
从名字上看,主成分分析,分析数据的主要成分,最直观的感受是可以提取出数据的主要的特征、防止过拟合、降低维度进而减少计算量等。
此外,由于PCA降维后的数据是原始数据在低维坐标系中的投影,并且要求投影后,各个坐标轴上的数据方差最大,这样在寻找投影方向时,起主要作用的是那些正常的数据,而噪点对整体的影响不大,因此PCA在一定程度上可以起到降噪的作用。
PCA的原理
前文已经点出,PCA降维后的数据是原始数据在低维坐标系中的投影,并且要求投影后,各个坐标轴上的数据方差最大且各个坐标轴之间相互正交。
使各个坐标轴上的数据方差最大是为了能够让降维后的数据尽可能保留更多的信息。举例来说,将二维空间中的点降到一维,如果降维后的两个点特别近,甚至重合了,那就丢失了一个点的信息,因此需要让降维后的点尽可能的离散。
使各个坐标轴之间相互正交是为了能够让降维后的数据在各个维度上没有相关性,这样就消除了冗余的信息,使保留下来的特征是最主要的。
PCA的优化目标
为了方便描述,设 X = { X 1 , X 2 , ⋯ , X N } N = 1 ∼ n X=\{X_1,X_2,\cdots,X_N\}_{N=1\sim n} X={X1,X2,⋯,XN}N=1∼n为原始数据,其中 X i X_i Xi为 m m m维的列向量,表示一条数据, X X X的均值为 X ˉ \bar{X} Xˉ, X X X的协方差矩阵为 C o v ( X ) Cov(X) Cov(X);使原始数据降到 k k k维的映射为 A A A,显然 A A A的形状为 k ∗ m k*m k∗m, A A A的每一行 A i A_i Ai都是单位向量,是新坐标系中各个坐标轴上的基;映影后的数据为 Y Y Y,显然 Y Y Y的形状为 k ∗ n k*n k∗n, Y Y Y的均值为 Y ˉ \bar{Y} Yˉ。
任务目标为使 Y Y Y的方差最大,且 Y Y Y的每一行之间线性无关。显然就是令 Y Y Y的协方差矩阵的对角元素最大,其他元素都为0。
设
Y
Y
Y的协方差矩阵为
C
o
v
(
Y
)
Cov(Y)
Cov(Y),则有:
C
o
v
(
Y
)
=
1
n
(
Y
−
Y
ˉ
)
(
Y
−
Y
ˉ
)
T
=
1
n
(
A
X
−
A
X
ˉ
)
(
A
X
−
A
X
ˉ
)
T
=
1
n
A
(
X
−
X
ˉ
)
(
X
−
X
ˉ
)
T
A
T
=
A
1
n
(
X
−
X
ˉ
)
(
X
−
X
ˉ
)
T
A
T
=
A
C
o
v
(
X
)
A
T
\begin{aligned} Cov(Y)&=\frac{1}{n}(Y-\bar{Y})(Y-\bar{Y})^T\\ &=\frac{1}{n}(AX-A\bar{X})(AX-A\bar{X})^T\\ &=\frac{1}{n}A(X-\bar{X})(X-\bar{X})^TA^T\\ &=A\frac{1}{n}(X-\bar{X})(X-\bar{X})^TA^T\\ &=ACov(X)A^T\\ \end{aligned}
Cov(Y)=n1(Y−Yˉ)(Y−Yˉ)T=n1(AX−AXˉ)(AX−AXˉ)T=n1A(X−Xˉ)(X−Xˉ)TAT=An1(X−Xˉ)(X−Xˉ)TAT=ACov(X)AT
至此,得到PCA的优化目标为:
max
A
A
C
o
v
(
X
)
A
T
s
.
t
.
对
∀
i
,
j
=
1
∼
k
且
i
≠
j
有
∣
∣
A
i
∣
∣
2
=
1
A
i
A
j
T
=
0
\begin{aligned} \max_{A}\quad&ACov(X)A^T\\ s.t.\quad&对\forall i,j=1\sim k且i≠j有\\ &||A_i||^2=1\\ &A_iA_j^T=0 \end{aligned}
Amaxs.t.ACov(X)AT对∀i,j=1∼k且i=j有∣∣Ai∣∣2=1AiAjT=0
求解PCA的优化问题
将目标函数拆开,并用拉格朗日乘子法合并约束条件
当
i
=
1
i=1
i=1时:
L
(
A
1
)
=
A
1
C
o
v
(
X
)
A
1
T
−
α
1
(
A
1
A
1
T
−
1
)
L(A_1)=A_1Cov(X)A_1^T-\alpha_1(A_1A_1^T-1)
L(A1)=A1Cov(X)A1T−α1(A1A1T−1)
对
A
1
A_1
A1求偏导有:
∂
L
∂
A
1
=
(
C
o
v
(
X
)
A
1
T
−
α
1
A
1
T
)
T
=
0
\frac{\partial L}{\partial A_1}=(Cov(X)A_1^T-\alpha_1 A_1^T)^T=0
∂A1∂L=(Cov(X)A1T−α1A1T)T=0
即
C
o
v
(
X
)
A
1
T
=
α
1
A
1
T
Cov(X)A_1^T=\alpha_1 A_1^T
Cov(X)A1T=α1A1T
当
i
=
2
i=2
i=2时:
L
(
A
2
)
=
A
2
C
o
v
(
X
)
A
2
T
−
α
1
(
A
2
A
2
T
−
1
)
−
β
2
A
1
T
L(A_2)=A_2Cov(X)A_2^T-\alpha_1(A_2A_2^T-1)-\beta_2A_1^T
L(A2)=A2Cov(X)A2T−α1(A2A2T−1)−β2A1T
对
A
2
A_2
A2求偏导有:
∂
L
∂
A
2
=
(
C
o
v
(
X
)
A
2
T
−
α
2
A
2
T
−
β
2
A
1
T
)
T
=
0
\frac{\partial L}{\partial A_2}=(Cov(X)A_2^T-\alpha_2 A_2^T-\beta_2A_1^T)^T=0
∂A2∂L=(Cov(X)A2T−α2A2T−β2A1T)T=0
在
(
C
o
v
(
X
)
A
2
T
−
α
2
A
2
T
−
β
2
A
1
T
)
T
=
0
(Cov(X)A_2^T-\alpha_2A_2^T-\beta_2A_1^T)^T=0
(Cov(X)A2T−α2A2T−β2A1T)T=0两侧同时乘
A
1
T
A_1^T
A1T得:
(
C
o
v
(
X
)
A
2
T
−
α
2
A
2
T
−
β
2
A
1
T
)
T
A
1
T
=
0
(Cov(X)A_2^T-\alpha_2A_2^T-\beta_2A_1^T)^TA_1^T=0
(Cov(X)A2T−α2A2T−β2A1T)TA1T=0
即
A
2
C
o
v
(
X
)
A
1
T
−
α
2
A
2
A
1
T
−
β
2
A
1
A
1
T
=
0
A_2Cov(X)A_1^T-\alpha_2A_2A_1^T-\beta_2A_1A_1^T=0
A2Cov(X)A1T−α2A2A1T−β2A1A1T=0
又因为
A
2
C
o
v
(
X
)
A
1
T
=
α
1
A
2
A
1
T
=
0
α
2
A
2
A
1
T
=
0
A
1
A
1
T
=
1
\begin{aligned} A_2Cov(X)A_1^T=\alpha_1A_2A_1^T=0\\ \alpha_2A_2A_1^T=0\\ A_1A_1^T=1 \end{aligned}
A2Cov(X)A1T=α1A2A1T=0α2A2A1T=0A1A1T=1
所以有 β 2 = 0 \beta_2=0 β2=0,即 C o v ( X ) A 2 T = α 2 A 2 T Cov(X)A_2^T=\alpha_2 A_2^T Cov(X)A2T=α2A2T;
当
i
=
3
i=3
i=3时:
L
(
A
3
)
=
A
3
C
o
v
(
X
)
A
3
T
−
α
1
(
A
3
A
3
T
−
1
)
−
β
31
A
1
T
−
β
32
A
2
T
L(A_3)=A_3Cov(X)A_3^T-\alpha_1(A_3A_3^T-1)-\beta_{31}A_1^T-\beta_{32}A_2^T
L(A3)=A3Cov(X)A3T−α1(A3A3T−1)−β31A1T−β32A2T
对
A
3
A_3
A3求偏导有:
∂
L
∂
A
3
=
(
C
o
v
(
X
)
A
3
T
−
α
3
A
3
T
−
β
31
A
1
T
−
β
32
A
2
T
)
T
=
0
\frac{\partial L}{\partial A_3}=(Cov(X)A_3^T-\alpha_3 A_3^T-\beta_{31}A_1^T-\beta_{32}A_2^T)^T=0
∂A3∂L=(Cov(X)A3T−α3A3T−β31A1T−β32A2T)T=0
在
(
C
o
v
(
X
)
A
3
T
−
α
3
A
3
T
−
β
31
A
1
T
−
β
32
A
2
T
)
T
=
0
(Cov(X)A_3^T-\alpha_3 A_3^T-\beta_{31}A_1^T-\beta_{32}A_2^T)^T=0
(Cov(X)A3T−α3A3T−β31A1T−β32A2T)T=0两侧同时乘
A
1
T
A_1^T
A1T得:
A
3
C
o
v
(
X
)
A
1
T
−
α
3
A
3
A
1
T
−
β
31
A
1
A
1
T
−
β
32
A
2
A
1
T
=
0
A_3Cov(X)A_1^T-\alpha_3A_3A_1^T-\beta_{31}A_1A_1^T-\beta_{32}A_2A_1^T=0
A3Cov(X)A1T−α3A3A1T−β31A1A1T−β32A2A1T=0
又因为
A
3
C
o
v
(
X
)
A
1
T
=
α
1
A
3
A
1
T
=
0
α
3
A
3
A
1
T
=
0
A
1
A
1
T
=
1
A
2
A
1
T
=
0
\begin{aligned} A_3Cov(X)A_1^T=\alpha_1A_3A_1^T=0\\ \alpha_3A_3A_1^T=0\\ A_1A_1^T=1\\ A_2A_1^T=0 \end{aligned}
A3Cov(X)A1T=α1A3A1T=0α3A3A1T=0A1A1T=1A2A1T=0
所以有 β 31 = 0 \beta_{31}=0 β31=0;
在 ( C o v ( X ) A 3 T − α 3 A 3 T − β 31 A 1 T − β 32 A 2 T ) T = 0 (Cov(X)A_3^T-\alpha_3 A_3^T-\beta_{31}A_1^T-\beta_{32}A_2^T)^T=0 (Cov(X)A3T−α3A3T−β31A1T−β32A2T)T=0两侧同时乘 A 2 T A_2^T A2T,可证 β 32 = 0 \beta_{32}=0 β32=0;
即 C o v ( X ) A 3 T = α 3 A 3 T Cov(X)A_3^T=\alpha_3 A_3^T Cov(X)A3T=α3A3T;
同理可证对
∀
i
=
1
∼
k
\forall i=1\sim k
∀i=1∼k都有
C
o
v
(
X
)
A
i
T
=
α
i
A
i
T
Cov(X)A_i^T=\alpha_i A_i^T
Cov(X)AiT=αiAiT
显然 A i T A_i^T AiT是 C o v ( X ) Cov(X) Cov(X)的特征向量, α i \alpha_i αi是 A i T A_i^T AiT对应的特征值;
对上式变形得:
A
i
C
o
v
(
X
)
A
i
T
=
α
i
A_iCov(X)A_i^T=\alpha_i
AiCov(X)AiT=αi
由此可见,将所有特征值由大到小排序,将其对应的特征向量归一化后拼到一起组成的A就是能使目标函数 A C o v ( X ) A T ACov(X)A^T ACov(X)AT最大的 A A A。
总结PCA算法流程
1.求 C o v ( X ) = 1 n ( X − X ˉ ) ( X − X ˉ ) T Cov(X)=\frac{1}{n}(X-\bar{X})(X-\bar{X})^T Cov(X)=n1(X−Xˉ)(X−Xˉ)T;
2.求 C o v ( X ) Cov(X) Cov(X)的特征值并从大到小排序,将对应的特征向量 A i T A_i^T AiT按相同的顺序排序;
3.将前k个特征向量转置得到 A i A_i Ai并对其归一化使得 A i A i T = 1 A_iA_i^T=1 AiAiT=1,最后将其纵向拼接组成矩阵A;
4. Y = A ( X − X ˉ ) Y=A(X-\bar{X}) Y=A(X−Xˉ)。