7.4.7 2DPCA
回顾PCA方法本质是求向量
α
\mathbf{\alpha}
α 使所有样本与之内积最大,样本只能是向量数据。
u
1
=
a
r
g
m
a
x
α
∑
a
i
∈
A
(
α
T
a
i
)
2
\mathbf{u}_1 = argmax_{\mathbf{\alpha}} \sum_{\mathbf{a}_{i} \in A} (\mathbf{\alpha}^T\mathbf{a}_i)^2
u 1 = a r g m a x α a i ∈ A ∑ ( α T a i ) 2
如果样本是图像,则样本都是矩阵数据,怎么推广PCA使之能适用矩阵数据呢?一种最简单的方法是把矩阵拉伸为向量,然后采用PCA。拉伸方法很简单,把矩阵所有列向量拼接为一个向量即可。例如矩阵有两个列向量:
(
1
,
2
)
,
(
3
,
4
)
(1,2),(3,4)
( 1 , 2 ) , ( 3 , 4 ) , 则拉伸为一个向量是
(
1
,
2
,
3
,
4
)
(1,2,3,4)
( 1 , 2 , 3 , 4 ) 。这个方法很直观,但缺点是当矩阵尺寸很大时,拉伸向量维度很高,进行特征值分解或奇异值分解都比较困难,难以获得精确的主成分。那能不能直接从矩阵计算呢,显然是可以的。
样本都是向量时,
∑
a
i
∈
A
(
a
i
T
α
)
2
=
∑
a
i
∈
A
(
α
T
a
i
)
(
a
i
T
α
)
=
α
T
[
∑
a
i
∈
A
(
a
i
a
i
T
)
]
α
=
α
T
A
A
T
α
\sum_{\mathbf{a}_{i} \in A} (\mathbf{a}^T_{i}\mathbf{\alpha})^2 \\ = \sum_{\mathbf{a}_{i} \in A} (\mathbf{\alpha}^T\mathbf{a}_{i})(\mathbf{a}^T_{i}\mathbf{\alpha}) \\ = \mathbf{\alpha}^T [\sum_{\mathbf{a}_{i} \in A} (\mathbf{a}_{i}\mathbf{a}^T_{i})] \mathbf{\alpha}\\ = \mathbf{\alpha}^T AA^T \mathbf{\alpha}\\
a i ∈ A ∑ ( a i T α ) 2 = a i ∈ A ∑ ( α T a i ) ( a i T α ) = α T [ a i ∈ A ∑ ( a i a i T ) ] α = α T A A T α
显然主成分
α
\mathbf{\alpha}
α 是矩阵
A
A
T
AA^T
A A T 的特征向量,该矩阵为协方差矩阵。
如果样本都是矩阵
A
i
A_i
A i ,上面公式核心
(
a
i
T
α
)
2
(\mathbf{a}^T_{i}\mathbf{\alpha})^2
( a i T α ) 2 可改为
J
i
=
∥
A
i
T
α
∥
2
J_i = \|A^T_{i}\mathbf{\alpha}\|^2
J i = ∥ A i T α ∥ 2 则
J
=
∑
i
J
i
=
∑
A
i
∈
A
∥
A
i
T
α
∥
2
=
∑
A
i
∈
A
(
A
i
T
α
)
T
(
A
i
T
α
)
=
∑
A
i
∈
A
α
T
A
i
A
i
T
α
=
α
T
[
∑
A
i
∈
A
(
A
i
A
i
T
)
]
α
J = \sum_i J_i = \sum_{A_{i} \in A} \|A^T_{i}\mathbf{\alpha}\|^2 \\ = \sum_{A_{i} \in A} (A^T_{i}\mathbf{\alpha})^T(A^T_{i}\mathbf{\alpha})\\ = \sum_{A_{i} \in A} \mathbf{\alpha}^TA_{i}A^T_{i}\mathbf{\alpha}\\ = \mathbf{\alpha}^T [\sum_{A_{i} \in A} (A_{i}A^T_{i})] \mathbf{\alpha}
J = i ∑ J i = A i ∈ A ∑ ∥ A i T α ∥ 2 = A i ∈ A ∑ ( A i T α ) T ( A i T α ) = A i ∈ A ∑ α T A i A i T α = α T [ A i ∈ A ∑ ( A i A i T ) ] α
令
S
=
∑
A
i
∈
A
(
A
i
A
i
T
)
S = \sum_{A_{i} \in A} (A_{i}A^T_{i})
S = ∑ A i ∈ A ( A i A i T ) 为对称矩阵,可称为广义协方差矩阵。
主成分
α
\mathbf{\alpha}
α 是矩阵
S
S
S 的特征向量,则前
k
k
k 个主成分即是使
J
J
J 最大的
k
k
k 个投影方向。
我们来分析主成分的几何意义
J
i
=
∥
A
i
T
α
∥
2
=
∑
i
(
a
i
T
α
)
2
J_i = \|A^T_{i}\mathbf{\alpha}\|^2 \\ = \sum_i (\mathbf{a}^T_{i}\mathbf{\alpha})^2
J i = ∥ A i T α ∥ 2 = i ∑ ( a i T α ) 2
J
i
J_i
J i 是矩阵
A
i
A_{i}
A i 所有列向量投影平方和,则
J
J
J 是所有矩阵
A
i
A_{i}
A i 的所有列向量投影平方和,即把矩阵看作列向量组,求所有列向量的投影,投影平方和最大的方向即为主方向,其本质和PCA一样!都是求向量组投影平方和最大值。
令矩阵
S
S
S 前
k
k
k 个主成分和特征值分别为
u
1
,
⋯
,
u
k
\mathbf{u}_{1},\cdots,\mathbf{u}_{k}
u 1 , ⋯ , u k 和
σ
1
,
⋯
,
σ
k
\sigma_1,\cdots,\sigma_k
σ 1 , ⋯ , σ k 。 则
v
j
=
A
i
T
u
j
\mathbf{v}_j = A^T_{i}\mathbf{u}_j
v j = A i T u j 表示样本矩阵
A
i
A_{i}
A i 每个列向量在主方向
u
j
\mathbf{u}_j
u j 坐标值构成的向量,称为主成分分量。令矩阵
U
=
[
u
1
,
⋯
,
u
k
]
U = [\mathbf{u}_{1},\cdots,\mathbf{u}_{k}]
U = [ u 1 , ⋯ , u k ] ,则
V
=
[
A
i
T
u
1
,
⋯
,
A
i
T
u
k
]
=
A
i
T
U
V = [A^T_{i}\mathbf{u}_1,\cdots,A^T_{i}\mathbf{u}_k] = A^T_{i}U
V = [ A i T u 1 , ⋯ , A i T u k ] = A i T U 为样本
A
i
A_{i}
A i 前
k
k
k 个主成分分量,即样本矩阵 2DPCA 降维后的矩阵表示。利用样本矩阵 2DPCA 降维后的矩阵表示重构原样本矩阵为
A
ˉ
i
T
=
V
U
T
=
∑
j
v
j
u
j
T
\bar A^T_{i} = VU^T = \sum_j \mathbf{v}_j \mathbf{u}^T_j
A ˉ i T = V U T = j ∑ v j u j T
以上内容就是 2DPCA 的核心内容。实际计算过程中,计算广义协方差矩阵
S
=
∑
A
i
∈
A
(
A
i
A
i
T
)
S = \sum_{A_{i} \in A} (A_{i}A^T_{i})
S = ∑ A i ∈ A ( A i A i T ) 的特征值分解时,需先对其进行中心化。由于 2DPCA 本质是求所有列向量的投影平方和,故仅需对样本矩阵中列向量进行中心化。所以提出一种新的中心化方法,这种方法不同于提出 2DPCA 原始论文的方法 。令所有样本矩阵的所有列向量的平均向量为
a
ˉ
=
1
m
n
∑
i
,
j
a
j
i
其
中
a
j
i
是
样
本
矩
阵
A
i
的
第
j
个
列
向
量
,
n
是
样
本
数
量
,
m
是
样
本
矩
阵
的
列
数
\bar{\mathbf{a}} = \frac{1}{mn} \sum_{i,j} \mathbf{a}^i_j \\ 其中 \mathbf{a}^i_j 是样本矩阵 A_i 的第 j 个列向量,n 是样本数量,m 是样本矩阵的列数
a ˉ = m n 1 i , j ∑ a j i 其 中 a j i 是 样 本 矩 阵 A i 的 第 j 个 列 向 量 , n 是 样 本 数 量 , m 是 样 本 矩 阵 的 列 数
故中心化为
a
j
i
ˉ
=
a
j
i
−
a
ˉ
\bar{\mathbf{a}^i_j}= \mathbf{a}^i_j - \bar{\mathbf{a}}
a j i ˉ = a j i − a ˉ 。
原始论文的中心化方法为,求样本矩阵的平均矩阵
A
ˉ
=
1
n
∑
i
A
i
\bar A = \frac{1}{n} \sum_{i} A_i
A ˉ = n 1 ∑ i A i ,样本中心化为
A
ˉ
i
=
A
i
−
A
ˉ
\bar A_i = A_i - \bar A
A ˉ i = A i − A ˉ ,即对样本矩阵的每个列向量独立进行中心化。
以上是对列向量计算投影平方和,同理可对行向量计算投影平方和,原理完全一致,即令
J
i
=
∥
A
i
α
∥
2
J_i = \|A_{i}\mathbf{\alpha}\|^2
J i = ∥ A i α ∥ 2 则
J
=
∑
i
J
i
=
α
T
[
∑
A
i
∈
A
(
A
i
T
A
i
)
]
α
J = \sum_i J_i = \mathbf{\alpha}^T [\sum_{A_{i} \in A} (A^T_{i}A_{i})] \mathbf{\alpha}
J = i ∑ J i = α T [ A i ∈ A ∑ ( A i T A i ) ] α
令
S
=
∑
A
i
∈
A
(
A
i
T
A
i
)
S = \sum_{A_{i} \in A} (A^T_{i}A_{i})
S = ∑ A i ∈ A ( A i T A i ) 为对称矩阵,可称为广义协方差矩阵。
主成分
α
\mathbf{\alpha}
α 是矩阵
S
S
S 的特征向量,则前
k
k
k 个主成分即是使
J
J
J 最大的
k
k
k 个投影方向
u
i
\mathbf{u}_{i}
u i 。令矩阵
U
=
[
u
1
,
⋯
,
u
k
]
U = [\mathbf{u}_{1},\cdots,\mathbf{u}_{k}]
U = [ u 1 , ⋯ , u k ] ,则
V
=
[
A
i
u
1
,
⋯
,
A
i
u
k
]
=
A
i
U
V = [A_{i}\mathbf{u}_1,\cdots,A_{i}\mathbf{u}_k] = A_{i}U
V = [ A i u 1 , ⋯ , A i u k ] = A i U 为样本
A
i
A_{i}
A i 前
k
k
k 个主成分分量,即样本矩阵 2DPCA 降维后的矩阵表示。利用样本矩阵 2DPCA 降维后的矩阵表示重构原样本矩阵为
A
ˉ
i
=
V
U
T
=
∑
j
v
j
u
j
T
\bar A_{i} = VU^T = \sum_j \mathbf{v}_j \mathbf{u}^T_j
A ˉ i = V U T = j ∑ v j u j T
令所有样本矩阵的所有行向量的平均向量为
a
ˉ
=
1
m
n
∑
i
,
j
a
j
c
i
其
中
a
j
c
i
是
样
本
矩
阵
A
i
的
第
j
个
行
向
量
,
n
是
样
本
数
量
,
m
是
样
本
矩
阵
的
行
数
\bar {\mathbf{a}} = \frac{1}{mn} \sum_{i,j} \mathbf{a}^{ci}_j \\ 其中 \mathbf{a}^{ci}_j 是样本矩阵 A_i 的第 j 个行向量,n 是样本数量,m 是样本矩阵的行数
a ˉ = m n 1 i , j ∑ a j c i 其 中 a j c i 是 样 本 矩 阵 A i 的 第 j 个 行 向 量 , n 是 样 本 数 量 , m 是 样 本 矩 阵 的 行 数
故中心化为
a
j
c
i
ˉ
=
a
j
c
i
−
a
ˉ
\bar {\mathbf{a}^{ci}_j} = \mathbf{a}^{ci}_j - \bar {\mathbf{a}}
a j c i ˉ = a j c i − a ˉ 。
实际应用时,可先对样本矩阵进行列方向的 2DPCA 得到样本矩阵
V
V
V ,然后对
V
V
V 进行行方向的 2DPCA 得到样本矩阵
W
W
W 。
上面介绍的所有PCA方法有两点需要特别强调,第一,为什么需要先对数据进行中心化?中心化主要有两个目的,第一,使矩阵
A
A
T
AA^T
A A T 是协方差矩阵,奇异值平方为属性方差,物理意义很明显。第二,就不是那么明显了,PCA主要目的是降维,利用少数几个主成分表示样本所有属性,所以前提是样本点云位于样本空间中的低维子空间,如果点云覆盖了整个样本空间,则不可降维,PCA就失去意义。点云形状本质上是由样本属性决定的,不可能通过中心化改变,中心化是样本减去均值向量,是平移操作即把空间原点移到点云中心,平移操作看似平凡,但确实能对点云降维。举个例子更能说明问题,假设三维空间中点云成一条直线,直线是一维的,所以其应该位于一维子空间中,但如果直线不通过空间原点,则该直线其实是位于二维子空间!只需要简单的平移操作,使空间原点位于直线上,则直线就变为一维!这就是平移的力量!
再强调下旋转操作的力量。如果同学对刚体运动比较了解,知道不管刚体运动如何复杂,都可以简化为平移和旋转复合运动。对数据点云的操作同样如此,可以采用平移和旋转。平移的力量已经展示了。旋转的力量就是PCA操作,PCA本质是就是旋转操作,根据公式
Y
T
=
U
T
A
Y^T = U^TA
Y T = U T A ,矩阵
U
U
U 是正交矩阵,就是对点云矩阵
A
A
A 的旋转操作。所以可见,PCA加上中心化预处理,本质上就是对点云进行了刚体运动:平移和旋转。注意没有进行形变操作如尺度变换,加上尺度变换就是白化,后面详细介绍。
平移操作有个比较麻烦的地方,不能用矩阵变换表示平移!根据奇异值分解,矩阵只能表示旋转和尺度变换操作,没有平移。但由于平移操作在物理学中十分重要,矩阵不能表示平移则会极大限制矩阵在物理学中的应用,为了使矩阵能表示平移,在数学上有个技巧,采用『齐次坐标』,增加一个维度就可以是矩阵『表示』平移操作。
第二点需要强调的是,对点云
A
A
A 进行PCA变换,样本点的顺序会对结果造成影响吗?矩阵
A
A
A 列向量是样本点向量,样本点顺序不同则矩阵
A
A
A 不同,所以表面上看可能会影响PCA结果。但前面指出,PCA本质上就是对点云进行了旋转操作,旋转由方差最大方向决定。样本方差与样本顺序无关,所以PCA结果不会受到样本顺序的影响。实际上,PCA核心是计算协方差矩阵的特征值,协方差为
A
A
T
=
∑
a
i
∈
A
a
i
a
i
T
AA^T=\sum_{\mathbf{a}_{i} \in A} \mathbf{a}_{i}\mathbf{a}^T_{i}
A A T = ∑ a i ∈ A a i a i T ,等于所有样本外积之和,与样本顺序无关,所以PCA结果不会受到样本顺序的影响。这个结论可以推广,对数据矩阵
A
A
A 的任何变换,一般来说,都与样本顺序无关,如果真的有关,则肯定哪里有问题。数据矩阵与样本顺序无关这个性质,是矩阵表示样本的一个简洁之处,是优点。但同时也是缺点,样本顺序一般会包含样本很多信息,比如如果样本是时间序列,即按时间顺序采样获得的样本,时间关系就包含在样本顺序里面。现在数据矩阵与顺序无关即数据矩阵不能表示时间关系,这样就会丢失很多信息,数据矩阵表示能力受限,这是矩阵论的一个致命缺陷,难以克服。例如图像用矩阵表示,表面上看,矩阵列向量是按图像的列对应排序,表示了图像顺序关系,但本质并没有,因为对图像矩阵的操作本质上是对列操作的集合,例如上面介绍的2DPCA,表面上是矩阵操作,本质是列操作。所以数据矩阵只能看作是样本的集合,集合是不考虑元素的顺序。
矩阵看成数据矩阵时,是列向量的集合;看成线性变换时,是个不可分割的整体,不能看成是列向量集合。矩阵乘法充分展示了这点
A
B
=
A
[
b
1
,
⋯
,
b
n
]
=
[
A
b
1
,
⋯
,
A
b
n
]
AB=A[\mathbf{b}_1,\cdots,\mathbf{b}_n]=[A\mathbf{b}_1,\cdots,A\mathbf{b}_n]
A B = A [ b 1 , ⋯ , b n ] = [ A b 1 , ⋯ , A b n ] ,矩阵
A
A
A 就是变换,是整体;矩阵
B
B
B 是列向量集合。