SVD如何分解矩阵?
奇异值分解(Singular Value Decomposition,简称SVD)是一种将矩阵分解为三个矩阵乘积的方法,其用途广泛,包括矩阵压缩、降维、最小二乘问题等。下面我将详细解释SVD分解矩阵 A的过程,并提供一个简单的例子。
给定一个矩阵 A,其SVD表示为:
A
=
U
Σ
V
T
A = U \Sigma V^T
A=UΣVT
其中,U和 V是正交矩阵,
Σ
\Sigma
Σ 是对角矩阵。下面是详细的步骤:
-
计算 A T A A^TA ATA 和 A A T AA^T AAT 的特征值和特征向量:
计算矩阵 A T A A^TA ATA和 A A T AA^T AAT 的特征值和特征向量。这些特征值将被用于构建奇异值矩阵 Σ \Sigma Σ。
-
构建奇异值矩阵 Σ \Sigma Σ:
从 A T A A^TA ATA 和 A A T AA^T AAT 的特征值中得到奇异值(singular values)。
Σ = [ σ 1 0 ? 0 0 σ 2 ? 0 ? ? ? ? 0 0 ? σ r 0 0 ? 0 ? ? ? ? 0 0 ? 0 ] \Sigma = \begin{bmatrix} \sigma_1 & 0 & \cdots & 0 \\ 0 & \sigma_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \sigma_r \\ 0 & 0 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 \\ \end{bmatrix} Σ= ?σ1?0?00?0?0σ2??00?0?????????00?σr?0?0? ?
其中, σ 1 , σ 2 , … , σ r \sigma_1, \sigma_2, \ldots, \sigma_r σ1?,σ2?,…,σr? 是非零的奇异值, r r r 是矩阵 A 的秩。
-
计算左奇异向量矩阵 U U U:
将 U的列设置为 A的特征向量,归一化每一列。如果 A 是一个 m × n m \times n m×n矩阵,那么 U 是一个 m × m m \times m m×m 正交矩阵。
-
计算右奇异向量矩阵 V V V:
将 V V V 的列设置为 A T A^T AT 的特征向量,归一化每一列。如果 A A A 是一个 m × n m \times n m×n 矩阵,那么 V V V 是一个 n × n n \times n n×n 正交矩阵。
最后,将这三个矩阵相乘,即 A = U Σ V T A = U \Sigma V^T A=UΣVT。
现在,让我们看一个简单的例子。考虑矩阵:
A = [ 1 2 3 4 5 6 7 8 9 ] A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ \end{bmatrix} A= ?147?258?369? ?
- 计算 A T A A^TA ATA 和 A A T AA^T AAT 的特征值和特征向量。
- 从特征值中构建奇异值矩阵 Σ \Sigma Σ。
- 计算左奇异向量矩阵 U U U。
- 计算右奇异向量矩阵 V V V。
步骤1 - 计算 A T A A^TA ATA 和 A A T AA^T AAT 的特征值和特征向量:
计算 A T A A^TA ATA 和 A A T AA^T AAT:
A T A = [ 66 78 90 78 93 108 90 108 126 ] A^TA = \begin{bmatrix} 66 & 78 & 90 \\ 78 & 93 & 108 \\ 90 & 108 & 126 \\ \end{bmatrix} ATA= ?667890?7893108?90108126? ?
A A T = [ 14 32 50 32 77 122 50 122 194 ] AA^T = \begin{bmatrix} 14 & 32 & 50 \\ 32 & 77 & 122 \\ 50 & 122 & 194 \\ \end{bmatrix} AAT= ?143250?3277122?50122194? ?
计算它们的特征值和特征向量(详细计算过程请查阅线性代数相关书籍)。
A
A
T
AA^T
AAT特征值矩阵:
Λ A A T = [ 221.53 0 0 0 7.34 0 0 0 0 ] \Lambda_{AA^T} = \begin{bmatrix} 221.53 & 0 & 0 \\ 0 & 7.34 & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} ΛAAT?= ?221.5300?07.340?000? ?
A A T AA^T AAT对应的特征向量矩阵:
V A A T = [ 0.25 0.85 0.45 0.58 0.15 ? 0.79 0.77 ? 0.50 0.42 ] V_{AA^T} = \begin{bmatrix} 0.25 & 0.85 & 0.45 \\ 0.58 & 0.15 & -0.79 \\ 0.77 & -0.50 & 0.42 \\ \end{bmatrix} VAAT?= ?0.250.580.77?0.850.15?0.50?0.45?0.790.42? ?
A T A A^TA ATA特征值矩阵:
Λ A T A = [ 221.53 0 0 0 7.34 0 0 0 0 ] \Lambda_{A^TA} = \begin{bmatrix} 221.53 & 0 & 0 \\ 0 & 7.34 & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} ΛATA?= ?221.5300?07.340?000? ?
A T A A^TA ATA对应的特征向量矩阵:
V A T A = [ ? 0.37 ? 0.69 0.61 ? 0.60 ? 0.11 ? 0.79 ? 0.71 0.72 0.14 ] V_{A^TA} = \begin{bmatrix} -0.37 & -0.69 & 0.61 \\ -0.60 & -0.11 & -0.79 \\ -0.71 & 0.72 & 0.14 \\ \end{bmatrix} VATA?= ??0.37?0.60?0.71??0.69?0.110.72?0.61?0.790.14? ?
步骤2 - 构建奇异值矩阵
Σ
\Sigma
Σ:
奇异值矩阵是一个对角矩阵,其对角线上的元素是特征值的平方根。对于矩阵
A
A
A:
σ
1
=
221.53
≈
14.90
\sigma_1 = \sqrt{221.53} \approx 14.90
σ1?=221.53?≈14.90
σ 2 = 7.34 ≈ 2.71 \sigma_2 = \sqrt{7.34} \approx 2.71 σ2?=7.34?≈2.71
σ 3 = 0 = 0 \sigma_3 = \sqrt{0} = 0 σ3?=0?=0
Σ = [ 23.69 0 0 0 1.08 0 0 0 0 ] \Sigma = \begin{bmatrix} 23.69 & 0 & 0 \\ 0 & 1.08 & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} Σ= ?23.6900?01.080?000? ?
步骤3 - 计算左奇异向量矩阵 U U U:
左奇异向量矩阵 U U U 的列是 A A T AA^T AAT 的特征向量单位化后的形式。我们已经计算了 A A T AA^T AAT 的特征值和特征向量:
特征值矩阵:
Λ A A T = [ 221.53 0 0 0 7.34 0 0 0 0 ] \Lambda_{AA^T} = \begin{bmatrix} 221.53 & 0 & 0 \\ 0 & 7.34 & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} ΛAAT?= ?221.5300?07.340?000? ?
对应的特征向量矩阵:
V A A T = [ 0.25 0.85 0.45 0.58 0.15 ? 0.79 0.77 ? 0.50 0.42 ] V_{AA^T} = \begin{bmatrix} 0.25 & 0.85 & 0.45 \\ 0.58 & 0.15 & -0.79 \\ 0.77 & -0.50 & 0.42 \\ \end{bmatrix} VAAT?= ?0.250.580.77?0.850.15?0.50?0.45?0.790.42? ?
由于 U U U的列是 A A T AA^T AAT 的特征向量的单位化形式,我们可以得到 U U U:
U = 1 λ i A T V A A T U = \frac{1}{\sqrt{\lambda_i}} A^T V_{AA^T} U=λi??1?ATVAAT?
其中 λ i \lambda_i λi?是 A A T AA^T AAT 的非零特征值。
所以,对于第一个列向量 u 1 u_1 u1?,我们有:
u 1 = 1 221.53 [ 14 32 50 ] ≈ [ 0.06 0.13 0.20 ] u_1 = \frac{1}{\sqrt{221.53}} \begin{bmatrix} 14 \\ 32 \\ 50 \end{bmatrix} \approx \begin{bmatrix} 0.06 \\ 0.13 \\ 0.20 \end{bmatrix} u1?=221.53?1? ?143250? ?≈ ?0.060.130.20? ?
对于第二个列向量 u 2 u_2 u2?,我们有:
u 2 = 1 7.34 [ 32 77 122 ] ≈ [ 0.47 0.55 0.67 ] u_2 = \frac{1}{\sqrt{7.34}} \begin{bmatrix} 32 \\ 77 \\ 122 \end{bmatrix} \approx \begin{bmatrix} 0.47 \\ 0.55 \\ 0.67 \end{bmatrix} u2?=7.34?1? ?3277122? ?≈ ?0.470.550.67? ?
步骤4 - 计算右奇异向量矩阵 V V V:
右奇异向量矩阵 V V V 的列是 A T A A^TA ATA 的特征向量单位化后的形式。我们已经计算了 A T A A^TA ATA的特征值和特征向量:
特征值矩阵:
Λ A T A = [ 221.53 0 0 0 7.34 0 0 0 0 ] \Lambda_{A^TA} = \begin{bmatrix} 221.53 & 0 & 0 \\ 0 & 7.34 & 0 \\ 0 & 0 & 0 \\ \end{bmatrix} ΛATA?= ?221.5300?07.340?000? ?
对应的特征向量矩阵:
V A T A = [ ? 0.37 ? 0.69 0.61 ? 0.60 ? 0.11 ? 0.79 ? 0.71 0.72 0.14 ] V_{A^TA} = \begin{bmatrix} -0.37 & -0.69 & 0.61 \\ -0.60 & -0.11 & -0.79 \\ -0.71 & 0.72 & 0.14 \\ \end{bmatrix} VATA?= ??0.37?0.60?0.71??0.69?0.110.72?0.61?0.790.14? ?
由于 V V V 的列是 A T A A^TA ATA 的特征向量的单位化形式,我们可以得到 V V V:
V = 1 λ i A U A T A V = \frac{1}{\sqrt{\lambda_i}} A U_{A^TA} V=λi??1?AUATA?
其中 λ i \lambda_i λi? 是 A T A A^TA ATA 的非零特征值。
所以,对于第一个列向量 v 1 v_1 v1?,我们有:
v 1 = 1 221.53 [ 1 4 7 ] ≈ [ 0.15 0.30 0.44 ] v_1 = \frac{1}{\sqrt{221.53}} \begin{bmatrix} 1 \\ 4 \\ 7 \end{bmatrix} \approx \begin{bmatrix} 0.15 \\ 0.30 \\ 0.44 \end{bmatrix} v1?=221.53?1? ?147? ?≈ ?0.150.300.44? ?
对于第二个列向量 v 2 v_2 v2?,我们有:
v 2 = 1 7.34 [ 2 5 8 ] ≈ [ 0.49 0.55 0.61 ] v_2 = \frac{1}{\sqrt{7.34}} \begin{bmatrix} 2 \\ 5 \\ 8 \end{bmatrix} \approx \begin{bmatrix} 0.49 \\ 0.55 \\ 0.61 \end{bmatrix} v2?=7.34?1? ?258? ?≈ ?0.490.550.61? ?
最终我们可以得到 A = U Σ V T A = U \Sigma V^T A=UΣVT。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!