6.9 奇异值分解

Posted 醒过来摸鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.9 奇异值分解相关的知识,希望对你有一定的参考价值。

文章目录

定义

  拖了很久没写这篇奇异值分解文章,今天把它给写了。因为奇异值分解太重要了。任意矩阵都有奇异值分解,它是将矩阵分解为三部分相乘:
A m × n = U m × m ( Σ r × r 0 0 0 ) m × n V n × n H A_m \\times n=U_m \\times m\\beginpmatrix \\Sigma_r \\times r & \\bold 0 \\\\ \\bold 0 & \\bold 0\\endpmatrix_m \\times nV^H_n \\times n Am×n=Um×m(Σr×r000)m×nVn×nH
  其中 U U U是m阶酉矩阵, V V V是n阶酉矩阵, Σ \\Sigma Σ是所有奇异值从大到小排列组成的对角阵。从这个定义来看,奇异值分解是非常难的。但是前人已经总结出了一套算法了。奇异值分解为什么这么重要?因为这个分解提供了太多信息了。

  1. V V V的前 r r r个向量组成了矩阵行空间的一组正交基;
  2. V V V的后几个向量组成了矩阵零空间的一组正交基。
  3. U U U的前 r r r( r r r是矩阵的秩)个列向量组成了矩阵列空间的一组正交基;
  4. U U U的后几个向量组成了矩阵左零空间( N u l l ( A H ) Null(A^H) Null(AH))的一组正交基。
  5. V V V的前 r r r列由 A H A A^HA AHA的单位正交特征向量组成;
  6. U U U的前 r r r列由 A A H AA^H AAH的单位正交特征向量组成;

  这么难吗?哈哈。其实,步骤主要分以下几步:

  1. A A H AA^H AAH矩阵和 A H A A^HA AHA矩阵;
  2. A A H AA^H AAH的所有非零特征值,开根号得到奇异值,再排序得到 Σ \\Sigma Σ
  3. A A H AA^H AAH的所有非零特征值的单位正交特征向量组成 U U U的前 r r r列;
  4. A H A^H AH的零空间所有单位正交向量组成 U U U的后 m − r m-r mr列;
  5. A A H AA^H AAH的所有单位正交特征向量组成 V V V的前 r r r列;
  6. A A A的零空间所有单位正交向量组成 V V V的后 n − r n-r nr列;
  7. 返回 U , V , Σ U,V,\\Sigma U,V,Σ

举例

  求这个矩阵的奇异值分解:
( 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 ) \\beginpmatrix 0 & 1 & 0 & 0\\\\ 0 & 0 & 2 & 0\\\\ 0 & 0 & 0 & 3\\\\ 0 & 0 & 0 & 0 \\endpmatrix 0000100002000030
 一步一步来,首先求 A A H AA^H AAH矩阵和 A H A A^HA AHA矩阵:
A A H = ( 0 0 0 0 0 1 0 0 0 0 4 0 0 0 0 9 ) A H A = ( 0 0 0 0 0 1 0 0 0 0 4 0 0 0 0 9 ) AA^H=\\beginpmatrix0 & 0 & 0 & 0\\\\ 0 & 1 & 0 & 0\\\\ 0 & 0 & 4 & 0\\\\ 0 & 0 & 0 & 9\\\\ \\endpmatrix\\\\ A^HA=\\beginpmatrix0 & 0 & 0 & 0\\\\ 0 & 1 & 0 & 0\\\\ 0 & 0 & 4 & 0\\\\ 0 & 0 & 0 & 9\\\\ \\endpmatrix AAH= 0000010000400009 AHA= 0000010000400009
  再求 求 A A H AA^H AAH的所有非零特征值,得到三个奇异值:
3 , 2 , 1 3,2,1 3,2,1
  再求 A A H AA^H AAH非零特征值的的特征空间:
s p a n ( 0 0 1 0 ) , ( 0 1 0 0 ) , ( 1 0 0 0 ) span\\ \\beginpmatrix0\\\\ 0\\\\ 1\\\\ 0\\\\ \\endpmatrix,\\beginpmatrix0\\\\ 1\\\\ 0\\\\ 0\\\\ \\endpmatrix, \\beginpmatrix1\\\\ 0\\\\ 0\\\\ 0\\\\ \\endpmatrix \\ span 0010 ,python numpy svd

numpy奇异值分解,广义逆矩阵与行列式

使用 Numpy (np.linalg.svd) 进行奇异值分解

奇异值分解 (SVD) 输出一维奇异值数组,而不是二维对角矩阵 [Python]

python3-特征值,特征分解,SVD奇异值分解

5.6 tensorflow2实现奇异值分解(SVD)——python实战(下篇)