赞
踩
参考博客:
实际采集的数据常常充斥着大量的噪声和冗余信息,因此必须筛选出这些不必要的内容,仅保留下那些蕴含主要信息的数据特征。奇异值分解(SVD)技术可以用于简化数据,提取出数据的重要特征,同时剔除数据中的噪声和冗余。SVD 的应用范围广泛,例如在推荐系统中,它能够增强算法的准确性和效率;在图像处理领域,SVD 则被用来实现图像压缩,从而减少存储空间的需求。
线性代数警告⚠️
个人感觉,奇异值分解是特征值分解的一般情况,因此几乎所有 SVD 博客都会先讲特征值分解。
特征值和特征向量的定义如下:
A x = λ x Ax=\lambda x Ax=λx
其中, A A A 是一个 n × n n\times n n×n 阶矩阵, x x x 是一个 n n n 阶向量。如果上式成立,那么我们称 λ \lambda λ 是矩阵 A A A 的一个特征值,而 x x x 是特征值 λ \lambda λ 所对应的特征向量。
说明:本文使用大写字母代表矩阵,小写字母代表向量或者标量。一个矩阵 A A A 可以有若干个特征值 λ \lambda λ,而和特征值 λ \lambda λ 一起使等式成立的向量 x x x 被称为特征向量。
令矩阵 A A A 的所有特征值分别为:
{ λ 1 , λ 2 , . . . , λ n } ( λ 1 ≤ λ 2 ≤ . . . ≤ λ n ) \{\lambda_1,\lambda_2,...,\lambda_n\}\ (\lambda_1\le \lambda_2\le ...\le \lambda_n) {λ1,λ2,...,λn} (λ1≤λ2≤...≤λn)
这 n n n 个特征值所对应的特征向量为 { w 1 , w 2 , . . . , w n } \{w_1,w_2,...,w_n\} {w1,w2,...,wn}。如果同时满足这 n n n 个特征向量线性无关,那么矩阵 A A A 可以用下式的特征分解表示:
A = W Σ W − 1 A=W\Sigma W^{-1} A=WΣW−1
其中, W W W 是这 n n n 个特征向量拼成的 n × n n\times n n×n 阶矩阵,而 Σ \Sigma Σ 是以这 n n n 个特征值为对角线的 n × n n\times n n×n 阶矩阵。
注意: Σ \Sigma Σ 是一个名为 Sigma 的矩阵,而不是一个求和符号。
通常情况下,我们会把这 n n n 个特征向量标准化,即使其满足 ∥ w i ∥ 2 = 1 \left \| w_i \right \|_2=1 ∥wi∥2=1,从而有:
w i T w i = 1 w_i^Tw_i=1 wiTwi=1
此时 W W W 满足 W T W = I W^TW = I WTW=I,从而有 W T = W − 1 W^T = W^{-1} WT=W−1。这样特征分解表达式可以写成:
A = W Σ W T A=W\Sigma W^{T} A=WΣWT
注意:特征分解仅适用于方阵,即行数与列数相等的矩阵。如果遇到非方阵,即行数与列数不相等的矩阵,那么就需要采用奇异值分解 SVD 来处理了。
假设 A A A 是一个 m × n m\times n m×n 阶矩阵,其中的元素全部属于实数域或复数域,则存在一个分解使得:
A = U Σ V T A=U\Sigma V^T A=UΣVT
其中, U U U 是 m × m m\times m m×m 阶酋矩阵, Σ \Sigma Σ 是半正定的 m × n m\times n m×n 阶对角矩阵,而 V T V^T VT 是 V V V 的共轭转置,是 n × n n\times n n×n 阶酋矩阵。我们称这样的分解为矩阵 A A A 的奇异值分解,其中矩阵 Σ \Sigma Σ 主对角线上的元素 σ i \sigma_i σi 即为 A A A 的奇异值。
注意: Σ \Sigma Σ 是对角矩阵,但不一定是方阵。此外,假设 V V V 是一个复数矩阵,对 V V V 中的每个元素取共轭,再对 V V V 求转置,那么得到的就是 V V V 的共轭矩阵 V † V^\dagger V†。虽然标准的符号是 V † V^\dagger V†,但本文一直用的是 V T V^T VT。
一般 Σ \Sigma Σ 的形式如下:
Σ
=
[
σ
1
0
0
0
0
0
σ
2
0
0
0
0
0
.
.
.
0
0
0
0
0
.
.
.
0
]
m
×
n
\Sigma=
矩阵 Σ \Sigma Σ 只有对角元素,其他元素均为 0 0 0。另一个惯例是, Σ \Sigma Σ 的对角元素是按从大到小的顺序排列的。这些对角元素被称为奇异值。
在科学和工程领域,一个广为人知的观点是:当超过某个奇异值数目( r r r 个)之后,其余的奇异值都会变得很小,以至于可以忽略不计。这表明数据中只有 r r r 个特征是重要的,而其他的特征都可以视为噪声或冗余信息。
原文的意思貌似是,由于可以忽略不计,因此可以直接置为零。
补充:酋矩阵的定义
如果 n × n n\times n n×n 阶的复数矩阵 U U U 满足:
U † U = U U † = I U^\dagger U = UU^\dagger = I U†U=UU†=I
那么 U U U 是酋矩阵。其中, I I I 是 n n n 阶单位矩阵, U † U^\dagger U† 是 U U U 的共轭转置。换句话说,矩阵 U U U 为酋矩阵,当且仅当其共轭转置 U † U^\dagger U† 为其逆矩阵 U − 1 = U † U^{-1}=U^\dagger U−1=U† 时成立。
⚠️注意:有现成的库函数,不必非得看原理。
下图形象地展示了 SVD 的定义:
那么我们如何求解
U
,
Σ
,
V
U,\Sigma,V
U,Σ,V 这三个矩阵呢?
求解 V 矩阵
如果用 A T A^T AT 和 A A A 做矩阵乘法,那么会得到一个 n × n n\times n n×n 阶的方阵 A T A A^TA ATA。既然 A T A A^TA ATA 是方阵,那么就可以做特征分解了。特征值和特征向量满足下式:
( A T A ) v i = λ i v i (A^TA)v_i=\lambda_i v_i (ATA)vi=λivi
从而得到 A T A A^TA ATA 的 n n n 个特征值 λ i \lambda_i λi 及其对应的 n n n 个特征向量 v i v_i vi。将所有特征向量 v i v_i vi 拼成一个 n × n n\times n n×n 阶矩阵 V V V,即为 SVD 公式中的 V V V 矩阵。一般我们将 V V V 中的每个特征向量称为 A A A 的右奇异向量。
求解 U 矩阵
如果用 A A A 和 A T A^T AT 做矩阵乘法,那么会得到一个 m × m m\times m m×m 阶的方阵 A A T AA^T AAT。 既然 A A T AA^T AAT 是方阵,那么就可以做特征分解了。特征值和特征向量满足下式:
( A A T ) u i = λ i u i (AA^T)u_i=\lambda_i u_i (AAT)ui=λiui
从而得到 A A T AA^T AAT 的 n n n 个特征值 λ i \lambda_i λi 及其对应的 n n n 个特征向量 u i u_i ui。将所有特征向量 u i u_i ui 拼成一个 n × n n\times n n×n 阶矩阵 U U U,即为 SVD 公式中的 U U U 矩阵。一般我们将 U U U 中的每个特征向量称为 A A A 的左奇异向量。
求解 Σ 矩阵
由于 Σ \Sigma Σ 除对角线上的奇异值外,其余的位置都是 0 0 0,因此我们只需求出每个奇异值 σ i σ_i σi 即可。
我们注意到:
A
=
U
Σ
V
T
A
V
=
U
Σ
V
T
V
A
V
=
U
Σ
A
v
i
=
σ
i
u
i
σ
i
=
A
v
i
/
u
i
如此一来,我们就可以求出每个奇异值 σ i σ_i σi,进而求出奇异值矩阵 Σ \Sigma Σ。
我们说 A T A A^TA ATA 的特征向量组成了 SVD 中的 V V V 矩阵, A A T AA^T AAT 的特征向量组成了 SVD 中的 U U U 矩阵,这有什么依据吗?这个其实很容易证明,我们以 V V V 矩阵的证明为例:
A
=
U
Σ
V
T
⇒
A
T
=
V
Σ
T
U
T
A
T
A
=
V
Σ
T
U
T
U
Σ
V
T
=
V
Σ
T
Σ
V
T
=
V
Σ
2
V
T
上式证明使用了: U T U = I U^TU = I UTU=I 和 Σ T Σ = Σ 2 Σ^TΣ = Σ^2 ΣTΣ=Σ2。可以看出 A T A A^TA ATA 的特征向量矩阵的确是 SVD 中的 V V V 矩阵。同理可以证明 A A T AA^T AAT 的特征向量矩阵的确是 SVD 中的 U U U 矩阵。
说明:对比 A T A = V Σ 2 V T A^TA=V\Sigma^2 V^T ATA=VΣ2VT 和特征值分解公式 A = W Σ W T A=W\Sigma W^{T} A=WΣWT 可知, V V V 矩阵是 A T A A^TA ATA 的特征向量矩阵。
进一步我们还可以看出,特征值矩阵是奇异值矩阵的平方 Σ 2 Σ^2 Σ2,因此特征值 λ i \lambda_i λi 和奇异值 σ i \sigma_i σi 满足如下关系:
σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi
由此可见,我们可以不使用上面推导出的 σ i = A v i / u i \sigma_i = Av_i/u_i σi=Avi/ui 来计算奇异值,而是通过求 A T A A^TA ATA 的特征值 λ i \lambda_i λi 并对其开平方根来得到奇异值。
补充:通过 A T A A^TA ATA 或 A A T AA^T AAT 的特征值开平方根求解奇异值的注意点
如前所述,我们可以利用如下性质求解奇异值:
A
T
A
=
V
Σ
U
T
U
Σ
V
T
=
V
Σ
T
Σ
V
T
A
A
T
=
U
Σ
V
T
V
Σ
U
T
=
U
Σ
Σ
T
U
T
需要注意的是,上述 Σ T Σ \Sigma^T \Sigma ΣTΣ 和 Σ Σ T \Sigma \Sigma^T ΣΣT 在矩阵的角度上来讲是不同的,因为它们的维度不同 Σ T Σ ∈ R n × n , Σ Σ T ∈ R m × m \Sigma^T \Sigma \in \mathbb{R}^{n\times n},\Sigma \Sigma^T \in \mathbb{R}^{m\times m} ΣTΣ∈Rn×n,ΣΣT∈Rm×m。但是它们主对角线上的奇异值是相等的,即有:
Σ
T
Σ
=
[
σ
1
2
0
0
0
0
σ
2
2
0
0
0
0
.
.
.
0
0
0
0
.
.
.
]
n
×
n
Σ
Σ
T
=
[
σ
1
2
0
0
0
0
σ
2
2
0
0
0
0
.
.
.
0
0
0
0
.
.
.
]
m
×
m
\Sigma^T \Sigma=
因此,对 Σ T Σ \Sigma^T \Sigma ΣTΣ 或 Σ Σ T \Sigma \Sigma^T ΣΣT 的特征值开方,都可以得到所有奇异值。
个人理解:虽然 Σ T Σ \Sigma^T \Sigma ΣTΣ 和 Σ Σ T \Sigma \Sigma^T ΣΣT 的维度不同,但是它们的对角元素个数相同且数值相等,并且等于奇异值的平方。
上面我们对 SVD 的定义和计算做了详细的介绍,下面对 SVD 的性质进行分析。
奇异值分解中的奇异值,与特征分解中的特征值类似,在奇异值矩阵 Σ m × n \Sigma_{m\times n} Σm×n 中也是按照从大到小的顺序排列的。而且奇异值减小的特别快,在很多情况下,前 10 % 10\% 10% 甚至 1 % 1\% 1% 的奇异值的和就占了全部奇异值之和的 99 % 99\% 99% 以上。
这意味着我们可以用前 r r r 个奇异值以及相应的左右奇异向量来近似描述矩阵。也就是说,由于 r r r 要比 n n n 小很多,因此一个大的矩阵 A A A 可以用几个小的矩阵来近似表示。如下图所示:
说明:不难看出,上图中的 U r , Σ r , V r T U_r,\Sigma_r,V^T_r Ur,Σr,VrT 分别是由原来的 U , Σ , V T U,\Sigma,V^T U,Σ,VT 裁剪得到的矩阵,因此说大矩阵 A A A 可以由几个小矩阵来近似表示。此外,个人认为蓝色块只是为了标出左奇异向量、奇异值、右奇异向量分别是什么,并不是说只需要矩阵的这一部分
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/577799
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。