SVD如何分解矩阵?

发布时间:2024年01月07日

奇异值分解(Singular Value Decomposition,简称SVD)是一种将矩阵分解为三个矩阵乘积的方法,其用途广泛,包括矩阵压缩、降维、最小二乘问题等。下面我将详细解释SVD分解矩阵 A的过程,并提供一个简单的例子。

给定一个矩阵 A,其SVD表示为:
A = U Σ V T A = U \Sigma V^T A=UΣVT
其中,U和 V是正交矩阵, Σ \Sigma Σ 是对角矩阵。下面是详细的步骤:

  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 的特征值和特征向量。这些特征值将被用于构建奇异值矩阵 Σ \Sigma Σ

  2. 构建奇异值矩阵 Σ \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 的秩。

  3. 计算左奇异向量矩阵 U U U

    将 U的列设置为 A的特征向量,归一化每一列。如果 A 是一个 m × n m \times n m×n矩阵,那么 U 是一个 m × m m \times m m×m 正交矩阵。

  4. 计算右奇异向量矩阵 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? ?

  1. 计算 A T A A^TA ATA A A T AA^T AAT 的特征值和特征向量。
  2. 从特征值中构建奇异值矩阵 Σ \Sigma Σ
  3. 计算左奇异向量矩阵 U U U
  4. 计算右奇异向量矩阵 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

文章来源:https://blog.csdn.net/weixin_45055461/article/details/135394166
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。