简单回顾一下SVD分解
提到矩阵分解,相信大家最熟悉的一定是SVD分解,但是SVD分解有两个缺点:
与SVD相比,CUR分解的可解释性大大加强了。
对于一个矩阵 A ,我们能否将它分解为 只包含 A 中的一些行和列的组合呢?
更具体地讲,对于一个秩 k 矩阵 A ,如果我们选择其中 k 列张成矩阵 A 的列空间,选择其中 k 行张成矩阵 A 的行空间,那么我们也应该能够通过组合这些线性映射来恢复原矩阵。
定理: 对于 A ∈ K m × n A\in K^{m\times n} A∈Km×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∣=t≥k, ∣ J ∣ = s ≥ k \left| J \right| = s \geq k ∣J∣=s≥k, 令 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=CU†R
证明:
为了更加直观的理解记忆CUR矩阵分解,大家可以看下面这张图。
图中红色代表所选择的列,蓝色代表所选择的行,U就是这些行和列的交叉点,在图中用紫色表示。
从图中我们可以看出,CUR分解就像是找出了一个矩阵的 “骨架” ,这个骨架体现了这个矩阵最主要的信息。
以上就是对CUR分解的简单介绍。