CUR矩阵分解(对比SVD)

CUR矩阵分解

简单回顾一下SVD分解

提到矩阵分解,相信大家最熟悉的一定是SVD分解,但是SVD分解有两个缺点:

  1. 可解释性较差:对于SVD分解,大家通常的理解应该是,左奇异向量以及右奇异向量分别张成了原始矩阵所在的列空间以及行空间,但是对于原始矩阵而言,并没有较强的可解释性。
  2. 太过密集:就算原始矩阵是一个稀疏矩阵,该矩阵所分解而成的U、V矩阵仍然是高度密集的,这在某些应用场景下是难以接受的。

与SVD相比,CUR分解的可解释性大大加强了。

CUR矩阵分解(对比SVD)_第1张图片

CUR矩阵分解

CUR矩阵分解(对比SVD)_第2张图片

对于一个矩阵 A ,我们能否将它分解为 只包含 A 中的一些行和列的组合呢?

更具体地讲,对于一个秩 k 矩阵 A ,如果我们选择其中 k 列张成矩阵 A 的列空间,选择其中 k 行张成矩阵 A 的行空间,那么我们也应该能够通过组合这些线性映射来恢复原矩阵。

定理: 对于 A ∈ K m × n A\in K^{m\times n} AKm×n, r a n k ( A ) = k rank\left( A \right) = k rank(A)=k,并且有 I ⊂ [ m ] I\subset \left[ m \right] I[m] , J ⊂ [ n ] J\subset \left[ n \right] J[n], ∣ I ∣ = t ≥ k \left| I \right| = t \geq k I=tk, ∣ J ∣ = s ≥ k \left| J \right| = s \geq k J=sk, 令 C = A ( : , J ) C = A\left( :,J \right) C=A(:,J), R = A ( I , : ) R = A\left( I,: \right) R=A(I,:), U = A ( I , J ) U = A\left(I,J \right) U=A(I,J), 如果 r a n k ( U ) = r a n k ( A ) rank\left( U \right) = rank\left( A \right) rank(U)=rank(A),那么 A = C U † R A = CU^{\dagger}R A=CUR

证明:

  1. r a n k ( U ) = r a n k ( A ) rank\left( U \right) = rank\left( A \right) rank(U)=rank(A)的约束下,我们能得到 r a n k ( C ) = r a n k ( R ) = r a n k ( A ) rank\left( C \right) = rank\left( R \right)= rank\left( A \right) rank(C)=rank(R)=rank(A)。因此,必定存在 X X X,使得 A = C X A=CX A=CX
  2. 假设 P I P_{I} PI 代表根据索引集 I I I 选择 A A A 中特定行的行选择矩阵,那么, P I A = R P_{I}A=R PIA=R,同样地, P I C = U P_{I}C=U PIC=U,从而有了一下推导: 在这里插入图片描述
    第一个等价关系的正向过程很明显成立,其逆向过程是由于 r a n k ( C ) = r a n k ( R ) = r a n k ( A ) rank\left( C \right) = rank\left( R \right)= rank\left( A \right) rank(C)=rank(R)=rank(A)这个假设前提,在此基础上, P I P_{I} PI 的作用就相当于是消除了 A A A 中那些对其他行有依赖关系的冗余行,所以第一个等价关系的逆向过程成立。
  3. 根据 R = U X R=UX R=UX,得 X = U † R X=U^{\dagger}R X=UR,结合第一步中的 A = C X A=CX A=CX,就得到 A = C U † R A=CU^{\dagger}R A=CUR

为了更加直观的理解记忆CUR矩阵分解,大家可以看下面这张图。
CUR矩阵分解(对比SVD)_第3张图片
图中红色代表所选择的列,蓝色代表所选择的行,U就是这些行和列的交叉点,在图中用紫色表示。

从图中我们可以看出,CUR分解就像是找出了一个矩阵的 “骨架” ,这个骨架体现了这个矩阵最主要的信息。

以上就是对CUR分解的简单介绍。

你可能感兴趣的:(矩阵)