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
Σ是所有奇异值从大到小排列组成的对角阵。从这个定义来看,奇异值分解是非常难的。但是前人已经总结出了一套算法了。奇异值分解为什么这么重要?因为这个分解提供了太多信息了。
- V V V的前 r r r个向量组成了矩阵行空间的一组正交基;
- V V V的后几个向量组成了矩阵零空间的一组正交基。
- U U U的前 r r r( r r r是矩阵的秩)个列向量组成了矩阵列空间的一组正交基;
- U U U的后几个向量组成了矩阵左零空间( N u l l ( A H ) Null(A^H) Null(AH))的一组正交基。
- V V V的前 r r r列由 A H A A^HA AHA的单位正交特征向量组成;
- U U U的前 r r r列由 A A H AA^H AAH的单位正交特征向量组成;
这么难吗?哈哈。其实,步骤主要分以下几步:
- 求 A A H AA^H AAH矩阵和 A H A A^HA AHA矩阵;
- 求 A A H AA^H AAH的所有非零特征值,开根号得到奇异值,再排序得到 Σ \\Sigma Σ;
- 求 A A H AA^H AAH的所有非零特征值的单位正交特征向量组成 U U U的前 r r r列;
- 求 A H A^H AH的零空间所有单位正交向量组成 U U U的后 m − r m-r m−r列;
- 求 A A H AA^H AAH的所有单位正交特征向量组成 V V V的前 r r r列;
- 求 A A A的零空间所有单位正交向量组成 V V V的后 n − r n-r n−r列;
- 返回 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 (np.linalg.svd) 进行奇异值分解