Small Tip: 一张图片的维度为N*N,M张图片列向量化后维度为N²*M,使得协方差矩阵C的维度为N²*N²。当N非常大时,直接对C进行特征值分解会导致计算非常慢,常常引起内存爆表,该怎么解决呢?
C
=
Φ
Φ
′
C=ΦΦ'
C=ΦΦ′
C
′
=
Φ
′
Φ
C'=Φ'Φ
C′=Φ′Φ 假设
v
i
v_i
vi为
C
C
C的第
i
i
i个特征向量,
e
i
e_i
ei为
C
′
C'
C′的第
i
i
i个特征向量。
C
′
e
i
=
λ
e
i
C'e_i=\lambda e_i
C′ei=λei
Φ
′
Φ
e
i
=
λ
e
i
Φ'Φe_i=\lambda e_i
Φ′Φei=λei
Φ
Φ
′
Φ
e
i
=
λ
Φ
e
i
ΦΦ'Φe_i=\lambda Φe_i
ΦΦ′Φei=λΦei
C
Φ
e
i
=
λ
Φ
e
i
CΦe_i=\lambda Φe_i
CΦei=λΦei 而
C
v
i
=
λ
v
i
Cv_i=\lambda v_i
Cvi=λvi
v
i
=
Φ
e
i
v_i=Φe_i
vi=Φei 因此可以先求得
C
′
C'
C′的特征向量,再通过左乘差值矩阵得到C的特征向量。 这种方法的好处是将对N²*N²矩阵进行特征值分解变成了对M*M矩阵进行特征值分解,大大减少了计算量。
|