SVD如何分解矩阵?

奇异值分解(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} Σ= σ100000σ200000σr00

    其中, σ 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= 147258369

  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= 667890789310890108126

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= 143250327712250122194

计算它们的特征值和特征向量(详细计算过程请查阅线性代数相关书籍)。
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.530007.340000

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.770.850.150.500.450.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.530007.340000

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.370.600.710.690.110.720.610.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.690001.080000

步骤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.530007.340000

对应的特征向量矩阵:

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.770.850.150.500.450.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 1ATVAAT

其中 λ 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.530007.340000

对应的特征向量矩阵:

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.370.600.710.690.110.720.610.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 1AUATA

其中 λ 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

你可能感兴趣的:(数学,矩阵,线性代数,自动驾驶,机器人)