奇异值分解(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} Σ= σ10⋮00⋮00σ2⋮00⋮0⋯⋯⋱⋯⋯⋱⋯00⋮σr0⋮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= 147258369
- 计算 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= 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.15−0.500.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.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.37−0.60−0.71−0.69−0.110.720.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.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.15−0.500.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=λi1ATVAAT
其中 λ 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.531 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.341 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.37−0.60−0.71−0.69−0.110.720.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=λi1AUATA
其中 λ 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.531 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.341 258 ≈ 0.490.550.61
最终我们可以得到 A = U Σ V T A = U \Sigma V^T A=UΣVT。