求解线性方程组:
A
x
=
b
Ax=b
Ax=b,其解可以表示为
x
=
A
\
b
x=A \backslash b
x=A\b.
为了提高运算速度,节约存储空间,通常会采用矩阵分解的方案,常见的矩阵分解有LU分解、QR分解、Cholesky分解、Schur分解、SVD奇异分解等。这里简单介绍几种。
-
LU分解:如果方阵A是非奇异的,LU分解总可进行。一个矩阵可以表示为一个交换下三角矩阵和一个上三角矩阵的乘机。更整洁的形式是:一个矩阵可以表示为一个上三角矩阵和一个下三角矩阵以及一个置换矩阵的形式,即:
P
X
=
L
U
PX=LU
PX=LU,从而方程的解可以表示为
x
=
U
\
(
L
\
P
b
)
x=U \backslash (L \backslash Pb)
x=U\(L\Pb) -
QR分解:矩阵可以分解为一个正交矩阵Q和一个上三角矩阵R的乘机形式。类似于LU,通常有一个正交矩阵Q,一个上三角矩阵R及一个 置换矩阵E,满足:XE=QR,方程的解为:x=E(R
\
\backslash
\(Q
\
\backslash
\b)) -
Cholesky分解:如果矩阵X是对称正定的,X可以分解为一个下三角矩阵和上三角矩阵的乘机,且下三角和上三角互为转置。X=R^{T}R 如果任何非零向量z,都有
z
T
X
z
>
0
z^{T}Xz>0
zTXz>0,则X为正定矩阵。虫咬条件是X的特征值全为正。 -
特征值分解EVD:任意n阶方阵X可以分解为
X
V
=
V
D
XV=VD
XV=VD,其中D为特征值对角阵,V是特征向量矩阵。 -
奇异值分解SVD:任意一个mn维的矩阵X可以分解为
X
=
U
S
V
T
X=USV^{T}
X=USVT,其中
U
V
UV
UV为酉矩阵,S是mn维的对角矩阵,其对角线元素为X的从大到小排序的非负奇异值。SVD分解十分强大且适用,因为任意一个矩阵都可以实现SVD分解,相比与SVD分解,特征值分解只能应用于方阵。
LU 分解
矩阵
A
A
A 的因式分解是把
A
A
A 表示为两个或更多个矩阵的乘积。矩阵乘法是数据的综合 (把两个或更多个线性变换的作用结合成一个矩阵) 矩阵因式分解是数据分解。在计算机科学中,将
A
A
A 表示为矩阵的乘积对应于对
A
A
A 中数据的预处理过程, 把这些数据分成两个或更多个部 分, 这种结构可能更有用, 或者更便于计算。 现实中,有可能会求解一系列系数矩阵
A
A
A 相同, 但
b
b
b 不相同的线性方程:
A
x
=
b
1
,
A
x
=
b
2
,
…
,
A
x
=
b
p
A \boldsymbol{x}=\boldsymbol{b}_{1}, \quad A \boldsymbol{x}=\boldsymbol{b}_{2}, \quad \ldots, \quad A \boldsymbol{x}=\boldsymbol{b}_{p}
Ax=b1?,Ax=b2?,…,Ax=bp? 如果能将
A
A
A 预处理为另一种形式, 使得每次求解上述任意方程时的计算量减少,那么即使预处理会耗费一些精力, 那也是值得的。LU分 解就是这样一个预处理过程, 通过LU分解, 可以使得每一个形如
A
x
=
b
A x=b
Ax=b 的方程求解过程变得更为简单。 首先, 设
A
A
A 是
m
×
n
m \times n
m×n 矩阵, 它可以行化简为阶梯形而不必进行行对换 (后面再考虑一般情形),则
A
A
A 可写成形式
A
=
L
U
,
L
A=L U, L
A=LU,L 是
m
×
m
m \times m
m×m 下三角矩阵, 主对角线元素全是
1
,
U
1, U
1,U 是
A
A
A 的一个
m
×
n
m \times n
m×n 阶梯形矩阵。这样一个分解称为LU分解, 矩阵
L
L
L 是可逆的, 称为单位下三角矩 阵。 一旦矩阵
A
A
A 可以写成
A
=
L
U
A=L U
A=LU 的形式, 方程
A
x
=
b
A \boldsymbol{x}=\boldsymbol{b}
Ax=b 可写成
L
(
U
x
)
=
b
L(U \boldsymbol{x})=\boldsymbol{b}
L(Ux)=b, 把
U
x
U \boldsymbol{x}
Ux 写成
y
\boldsymbol{y}
y, 可以解下面一堆方程来求解
x
:
\boldsymbol{x}:
x:
L
y
=
b
U
x
=
y
\begin{aligned} L \boldsymbol{y} &=\boldsymbol{b} \\ U \boldsymbol{x} &=\boldsymbol{y} \end{aligned}
LyUx?=b=y? 首先解
L
y
=
b
L \boldsymbol{y}=\boldsymbol{b}
Ly=b 求得
y
\boldsymbol{y}
y, 然后解
U
x
=
y
U \boldsymbol{x}=\boldsymbol{y}
Ux=y 求得
x
\boldsymbol{x}
x, 由于
L
L
L 和
U
U
U 都是三角矩阵, 因此每个方程都比较容易解。
QR分解
QR分解定义
一个矩阵
A
∈
R
m
×
n
,
m
≥
n
A \in \mathbb{R}^{m \times n}, m \geq n
A∈Rm×n,m≥n 可以被分解成
A
=
Q
R
A=Q R
A=QR, 其中:
-
Q
∈
R
m
×
m
Q \in \mathbb{R}^{m \times m}
Q∈Rm×m 是正交矩阵 -
R
≡
[
R
^
0
]
∈
R
m
×
n
R \equiv\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right] \in \mathbb{R}^{m \times n}
R≡[R^0?]∈Rm×n -
R
^
∈
R
n
×
n
\hat{R} \in \mathbb{R}^{n \times n}
R^∈Rn×n 是上三角矩阵
正交矩阵的性质
Q
T
Q
=
Q
Q
T
=
I
Q^{T} Q=Q Q^{T}=I
QTQ=QQT=I
左乘一个正交矩阵对欧式范数的结果不影响 (在下面证明eq.2的时候会用到
)
)
)
∥
Q
v
∥
2
2
=
v
T
Q
T
Q
v
=
v
T
v
=
∥
v
∥
2
2
\|Q v\|_{2}^{2}=v^{T} Q^{T} Q v=v^{T} v=\|v\|_{2}^{2}
∥Qv∥22?=vTQTQv=vTv=∥v∥22?
从QR分解角度看线性最小二乘
对于一个over-determined线性最小二乘问题
A
x
?
b
,
A x \simeq b ,
Ax?b, 其目标函数是
?
(
x
)
=
∥
r
(
x
)
∥
2
2
=
∥
b
?
A
x
∥
2
2
=
∥
b
?
Q
[
R
^
0
]
x
∥
2
2
=
∥
Q
T
(
b
?
Q
[
R
^
0
]
x
)
∥
2
2
=
∥
Q
T
b
?
[
R
^
0
]
x
∥
2
2
\begin{aligned} \phi(x)=\|r(x)\|_{2}^{2} &=\|b-A x\|_{2}^{2}=\left\|b-Q\left[\begin{array}{c} \hat{R} \\ 0 \end{array}\right] x\right\|_{2}^{2} \\ &=\left\|Q^{T}\left(b-Q\left[\begin{array}{c} \hat{R} \\ 0 \end{array}\right] x\right)\right\|_{2}^{2} \\ &=\left\|Q^{T} b-\left[\begin{array}{c} \hat{R} \\ 0 \end{array}\right] x\right\|_{2}^{2} \end{aligned}
?(x)=∥r(x)∥22??=∥b?Ax∥22?=∥∥∥∥?b?Q[R^0?]x∥∥∥∥?22?=∥∥∥∥?QT(b?Q[R^0?]x)∥∥∥∥?22?=∥∥∥∥?QTb?[R^0?]x∥∥∥∥?22?? 这里
Q
∈
R
m
×
m
,
Q
b
∈
R
m
×
1
,
[
R
^
0
]
∈
R
m
×
n
,
[
R
^
0
]
x
∈
R
m
×
1
Q \in \mathbb{R}^{m \times m}, \quad Q b \in \mathbb{R}^{m \times 1},\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right] \in \mathbb{R}^{m \times n}, \quad\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right] x \in \mathbb{R}^{m \times 1}
Q∈Rm×m,Qb∈Rm×1,[R^0?]∈Rm×n,[R^0?]x∈Rm×1. 如果把
Q
T
b
Q^{T} b
QTb 拆分成上下两部分, 形式
[
R
^
0
]
\left[\begin{array}{c}\hat{R} \\ 0\end{array}\right]
[R^0?] 类似,
Q
T
b
=
[
c
1
c
2
]
Q^{T} b=\left[\begin{array}{l}c_{1} \\ c_{2}\end{array}\right]
QTb=[c1?c2??], where
c
1
∈
R
n
,
c
2
∈
R
m
?
n
°
c_{1} \in \mathbb{R}^{n}, c_{2} \in \mathbb{R}^{m-n} \circ
c1?∈Rn,c2?∈Rm?n° 那么目标函数可以写成下面的形式:
∥
r
(
x
)
∥
2
2
=
∥
c
1
?
R
^
x
∥
2
2
+
∥
c
2
∥
2
2
\|r(x)\|_{2}^{2}=\left\|c_{1}-\hat{R} x\right\|_{2}^{2}+\left\|c_{2}\right\|_{2}^{2}
∥r(x)∥22?=∥∥∥?c1??R^x∥∥∥?22?+∥c2?∥22? 可以看到, 我们只能最小化前一部分
∥
c
1
?
R
^
x
∥
2
2
\left\|c_{1}-\hat{R} x\right\|_{2}^{2}
∥∥∥?c1??R^x∥∥∥?22? 到0, 即
R
^
x
=
c
1
,
∥
r
(
x
)
∥
2
2
\hat{R} x=c_{1}, \quad\|r(x)\|_{2}^{2}
R^x=c1?,∥r(x)∥22? 的最小值 为
∥
c
2
∥
2
2
\left\|c_{2}\right\|_{2}^{2}
∥c2?∥22? 。这样处理之后就避免了求正规方程组中的
(
A
T
A
)
?
1
\left(A^{T} A\right)^{-1}
(ATA)?1, 避免了条件数变成
cond
?
(
A
T
A
)
=
cond
?
(
A
)
2
\operatorname{cond}\left(A^{T} A\right)=\operatorname{cond}(A)^{2}
cond(ATA)=cond(A)2, 所以QR分解法更加数值稳定。
SVD的定义
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。本文就对SVD的原理做一个总结,并讨论在在PCA降维算法中是如何运用运用SVD的。
1. 回顾特征值和特征向量
首先回顾下特征值和特征向量的定义如下:
A
x
=
λ
x
A x=\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 是 矩阵
A
A
A 的特征值
λ
\lambda
λ 所对应的特征向量。 求出特征值和特征向量有什么好处呢? 就是我们可以将矩阵A特征分解。如果我们求出了矩阵A的 n个特征值
λ
1
≤
λ
2
≤
…
≤
λ
n
\lambda_{1} \leq \lambda_{2} \leq \ldots \leq \lambda_{n}
λ1?≤λ2?≤…≤λn?, 以及这
n
n
n 个特征值所对应的特征向量
w
1
,
w
2
,
…
,
w
n
w_{1}, w_{2}, \ldots, w_{n}
w1?,w2?,…,wn? 那么矩阵A就可以用下式的特征分解表示:
A
=
W
Σ
W
?
1
A=W \Sigma W^{-1}
A=WΣW?1 其中
W
W
W是这n个特征向量所组成的的
n
×
n
n \times n
n×n维矩阵, 而
∑
\sum
∑为这n个特征值为主对角线的
n
×
n
n \times n
n×n维矩阵。 一般我们会把W的这n个特征向量标准化, 即满足
∥
w
i
∥
2
=
1
\left\|w_{i}\right\|_{2}=1
∥wi?∥2?=1, 或者
w
i
T
w
i
=
1
w_{i}^{T} w_{i}=1
wiT?wi?=1, 此时W的 n个特征向量为标准正交基, 满足
W
T
W
=
I
W^{T} W=I
WTW=I, 即
W
T
=
W
?
1
W^{T}=W^{-1}
WT=W?1, 也就是说W为酉矩阵。 这样我们的特征分解表达式可以写成
A
=
W
Σ
W
T
A=W \Sigma W^{T}
A=WΣWT 注意到要进行特征分解,矩阵A必须为方阵。 那么如果A不是方阵, 即行和列不相同时,我们还可以对矩阵进行分解吗? 答案是可以,此时我们 的SVD登场了。
2. SVD的定义
SVD也是对矩阵进行分解,但是和特征分解不同, SVD并不要求要分解的矩阵为方阵。假设我们的 矩阵A是一个
m
×
n
\mathrm{m} \times \mathrm{n}
m×n 的矩阵, 那么我们定义矩阵A的SVD为:
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 的矩阵, 除了主对角线上的元素以外全 为0, 主对角线上的每个元素都称为奇异值,
V
\quad V
V 是一个
n
×
n
n \times n
n×n 的矩阵。
U
U
U 和
V
V
V 都是西矩 阵, 即满足
U
T
U
=
I
,
V
T
V
=
I
U^{T} U=I, V^{T} V=I
UTU=I,VTV=I 。下图可以很形象的看出上面SVD的定义: 那么我们如何求出SVD分解后的U,
Σ
\Sigma
Σ,V 这三个矩阵呢? 如果我们将A的转置和A做矩阵乘法, 那么会得到
n
×
n
n \times n
n×n 的一个方阵
A
T
A
A^{T} A
ATA 。既然
A
T
A
A^{T} A
ATA 是方阵, 那么我们就可以进行特征分解, 得到的特征值和特征向量满足下式:
(
A
T
A
)
v
i
=
λ
i
v
i
\left(A^{T} A\right) v_{i}=\lambda_{i} v_{i}
(ATA)vi?=λi?vi? 这样我们就可以得到矩阵
A
T
A
A^{T} A
ATA 的n个特征值和对应的n个特征向量V了。将
A
T
A
A^{T} A
ATA 的所有特征 向量张成一个
n
×
n
n \times n
n×n 的矩阵V,就是我们SVD公式里面的V矩阵了。一般我们将V中的每个特征向量叫做A的右奇异向量。 如果我们将A和A的转置做矩阵乘法,那么会得到
m
×
m
\mathrm{m} \times \mathrm{m}
m×m 的一个方阵
A
A
T
A A^{T}
AAT 。既然
A
A
T
A A^{T}
AAT 是方 阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:
(
A
A
T
)
u
i
=
λ
i
u
i
\left(A A^{T}\right) u_{i}=\lambda_{i} u_{i}
(AAT)ui?=λi?ui? 这样我们就可以得到矩阵
A
A
T
A A^{T}
AAT 的m个特征值和对应的m个特征向量u了。将
A
A
T
A A^{T}
AAT 的所有特征 向量张成一个
m
×
m
\mathrm{m} \times \mathrm{m}
m×m 的矩阵U,就是我们SVD公式里面的U矩阵了。一般我们将U中的每个特征向量 叫做A的左奇异向量。 U和V我们都求出来了,现在就剩下奇异值矩阵\Sigma没有求出了. 由于
Σ
\Sigma
Σ 除了对角线上是奇异值其他位置都是0,那我们只需要求出每个奇异值\sigma就可以了。 我们注意到:
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
A=U \Sigma V^{T} \Rightarrow A V=U \Sigma V^{T} V \Rightarrow A V=U \Sigma \Rightarrow A v_{i}=\sigma_{i} u_{i} \Rightarrow \sigma_{i}=A v_{i} / u_{i}
A=UΣVT?AV=UΣVTV?AV=UΣ?Avi?=σi?ui??σi?=Avi?/ui? 这样我们可以求出我们的每个奇异值, 进而求出奇异值矩阵
Σ
\Sigma
Σ。 上面还有一个问题没有讲, 就是我们说
A
T
A
A^{T} A
ATA 的特征向量組成的就是我们SVD中的V矩阵, 而
A
A
T
A A^{T}
AAT 的特征向量组成的就是我们SVD中的矩阵, 这有什么根据吗? 这个其实很容易证明, 我 们以V矩阵的证明为例。
A
=
U
Σ
V
T
?
A
T
=
V
Σ
U
T
?
A
T
A
=
V
Σ
U
T
U
Σ
V
T
=
V
Σ
2
V
T
A=U \Sigma V^{T} \Rightarrow A^{T}=V \Sigma U^{T} \Rightarrow A^{T} A=V \Sigma U^{T} U \Sigma V^{T}=V \Sigma^{2} V^{T}
A=UΣVT?AT=VΣUT?ATA=VΣUTUΣVT=VΣ2VT 上式证明使用了
U
U
=
I
,
Σ
T
=
Σ
U^{U}=I, \Sigma^{T}=\Sigma
UU=I,ΣT=Σ 。可以看出
A
T
A
A^{T} A
ATA 的特征向量组成的的确就是我们SVD中 的V矩阵。类似的方法可以得到
A
A
T
A A^{T}
AAT 的特征向量組成的就是我们SVD中的U矩阵。
进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:
σ
i
=
λ
i
\sigma_{i}=\sqrt{\lambda_{i}}
σi?=λi?
? 这样也就是说, 我们可以不用
σ
i
=
A
v
i
u
i
\sigma_{i}=\frac{A v_{i}}{u_{i}}
σi?=ui?Avi?? 来计算奇异值, 也可以通过求出
A
T
A
A^{T} A
ATA 的特征值取平方根来求奇异值。
3. SVD计算举例
这里我们用一个简单的例子来说明矩阵是如何进行奇异值分解的。我们的矩阵A定义为:
A
=
(
0
1
1
1
1
0
)
\mathbf{A}=\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)
A=???011?110???? 首先求出
A
T
A
和?
A
A
T
A^{T} A^{\text {和 }} A A^{T}
ATA和?AAT
A
T
A
=
(
0
1
1
1
1
0
)
(
0
1
1
1
1
0
)
=
(
2
1
1
2
)
A
A
T
=
(
0
1
1
1
1
0
)
(
0
1
1
1
1
0
)
=
(
1
1
0
1
2
1
0
1
1
)
\begin{aligned} &\mathbf{A}^{\mathrm{T}} \mathbf{A}=\left(\begin{array}{lll} 0 & 1 & 1 \\ 1 & 1 & 0 \end{array}\right)\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)=\left(\begin{array}{ll} 2 & 1 \\ 1 & 2 \end{array}\right) \\ &\mathrm{AA}^{\mathrm{T}}=\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)\left(\begin{array}{lll} 0 & 1 & 1 \\ 1 & 1 & 0 \end{array}\right)=\left(\begin{array}{lll} 1 & 1 & 0 \\ 1 & 2 & 1 \\ 0 & 1 & 1 \end{array}\right) \end{aligned}
?ATA=(01?11?10?)???011?110????=(21?12?)AAT=???011?110????(01?11?10?)=???110?121?011????? 进而求出
A
T
A
A^{T} A
ATA 的特征值和特征向量:
λ
1
=
3
;
v
1
=
(
1
/
2
1
/
2
)
;
λ
2
=
1
;
v
2
=
(
?
1
/
2
1
/
2
)
\lambda_{1}=3 ; v_{1}=\left(\begin{array}{c} 1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right) ; \lambda_{2}=1 ; v_{2}=\left(\begin{array}{c} -1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right)
λ1?=3;v1?=(1/2
?1/2
??);λ2?=1;v2?=(?1/2
?1/2
??) 接着求出
A
A
T
A A^{T}
AAT 的特征值和特征向量:
λ
1
=
3
;
u
1
=
(
1
/
6
2
/
6
1
/
6
)
;
λ
2
=
1
;
u
2
=
(
1
/
2
0
?
1
/
2
)
;
λ
3
=
0
;
u
3
=
(
1
/
3
?
1
/
3
1
/
3
)
\lambda_{1}=3 ; u_{1}=\left(\begin{array}{l} 1 / \sqrt{6} \\ 2 / \sqrt{6} \\ 1 / \sqrt{6} \end{array}\right) ; \lambda_{2}=1 ; u_{2}=\left(\begin{array}{c} 1 / \sqrt{2} \\ 0 \\ -1 / \sqrt{2} \end{array}\right) ; \lambda_{3}=0 ; u_{3}=\left(\begin{array}{c} 1 / \sqrt{3} \\ -1 / \sqrt{3} \\ 1 / \sqrt{3} \end{array}\right)
λ1?=3;u1?=???1/6
?2/6
?1/6
?????;λ2?=1;u2?=???1/2
?0?1/2
?????;λ3?=0;u3?=???1/3
??1/3
?1/3
????? 利用
A
v
i
=
σ
i
u
i
,
i
=
1
,
2
A v_{i}=\sigma_{i} u_{i}, i=1,2
Avi?=σi?ui?,i=1,2 求奇异值:
(
0
1
1
1
1
0
)
(
1
/
2
1
/
2
)
=
σ
1
(
1
/
6
2
/
6
1
/
6
)
?
σ
1
=
3
(
0
1
1
1
1
0
)
(
?
1
/
2
1
/
2
)
=
σ
2
(
1
/
2
0
?
1
/
2
)
?
σ
2
=
1
\begin{aligned} &\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)\left(\begin{array}{l} 1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right)=\sigma_{1}\left(\begin{array}{l} 1 / \sqrt{6} \\ 2 / \sqrt{6} \\ 1 / \sqrt{6} \end{array}\right) \Rightarrow \sigma_{1}=\sqrt{3} \\ &\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right) \left(\begin{array}{c} -1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right)=\sigma_{2}\left(\begin{array}{c} 1 / \sqrt{2} \\ 0 \\ -1 / \sqrt{2} \end{array}\right) \Rightarrow \sigma_{2}=1 \end{aligned}
????011?110????(1/2
?1/2
??)=σ1????1/6
?2/6
?1/6
??????σ1?=3
????011?110????(?1/2
?1/2
??)=σ2????1/2
?0?1/2
??????σ2?=1? 也可以用
σ
i
=
λ
i
\sigma_{i}=\sqrt{\lambda_{i}}
σi?=λi?
? 直接求出奇异值为
3
\sqrt{3}
3
? 和1. 最终得到A的奇异值分解为:
A
=
U
Σ
V
T
=
(
1
/
6
1
/
2
1
/
3
2
/
6
0
?
1
/
3
1
/
6
?
1
/
2
1
/
3
)
(
3
0
0
1
0
0
)
(
1
/
2
1
/
2
?
1
/
2
1
/
2
)
A=U \Sigma V^{T}=\left(\begin{array}{ccc} 1 / \sqrt{6} & 1 / \sqrt{2} & 1 / \sqrt{3} \\ 2 / \sqrt{6} & 0 & -1 / \sqrt{3} \\ 1 / \sqrt{6} & -1 / \sqrt{2} & 1 / \sqrt{3} \end{array}\right)\left(\begin{array}{cc} \sqrt{3} & 0 \\ 0 & 1 \\ 0 & 0 \end{array}\right)\left(\begin{array}{cc} 1 / \sqrt{2} & 1 / \sqrt{2} \\ -1 / \sqrt{2} & 1 / \sqrt{2} \end{array}\right)
A=UΣVT=???1/6
?2/6
?1/6
??1/2
?0?1/2
??1/3
??1/3
?1/3
????????3
?00?010????(1/2
??1/2
??1/2
?1/2
??)
4. SVD的一些性质
对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇 异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的 99%以上的比例。 也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。 也就是说:
A
m
×
n
=
U
m
×
m
Σ
m
×
n
V
n
×
n
T
≈
U
m
×
k
Σ
k
×
k
V
k
×
n
T
A_{m \times n}=U_{m \times m} \Sigma_{m \times n} V_{n \times n}^{T} \approx U_{m \times k} \Sigma_{k \times k} V_{k \times n}^{T}
Am×n?=Um×m?Σm×n?Vn×nT?≈Um×k?Σk×k?Vk×nT? 其中k要比n小很多,也就是一个大的矩阵A可以用三个小的矩阵
U
m
×
k
,
∑
k
×
k
,
V
k
×
n
T
U_{m \times k}, \sum_{k \times k}, V_{k \times n}^{T}
Um×k?,∑k×k?,Vk×nT? 来表 示。如下图所示,现在我们的矩阵A只需要灰色的部分的三个小矩阵就可以近似描述了。 由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。
SVD 和最小二乘法
设
A
∈
R
m
?
n
A \in R^{m*n}
A∈Rm?n 列满秩,
A
=
U
[
Σ
0
]
V
T
A=U\left[\begin{array}{l}\Sigma \\ 0\end{array}\right] V^{T}
A=U[Σ0?]VT是A的奇异值分解。
令
U
n
U_{n}
Un? 为U的前n列矩阵, 即
U
=
[
U
n
,
U
ˉ
]
U=\left[U_{n}, \bar{U}\right]
U=[Un?,Uˉ], 则:
∥
A
x
?
b
∥
2
2
=
∥
U
[
Σ
0
]
V
T
x
?
b
∥
=
∥
[
Σ
0
]
V
T
x
?
[
U
n
,
U
]
T
b
∥
\|A x-b\|_{2}^{2}=\left\|U\left[\begin{array}{c}\Sigma \\ 0\end{array}\right] V^{T} x-b\right\|=\left\|\left[\begin{array}{c}\Sigma \\ 0\end{array}\right] V^{T} x-\left[U_{n}, U\right]^{T} b\right\|
∥Ax?b∥22?=∥∥∥∥?U[Σ0?]VTx?b∥∥∥∥?=∥∥∥∥?[Σ0?]VTx?[Un?,U]Tb∥∥∥∥?
=
∥
∑
V
T
x
?
U
n
T
b
?
U
ˉ
T
b
]
∥
\left.=\| \begin{array}{c}\sum V^{T} x-U_{n}^{T} b \\ -\bar{U}^{T} b\end{array}\right] \|
=∥∑VTx?UnT?b?UˉTb?]∥
=
∥
Σ
V
T
x
?
U
n
T
b
∥
+
∥
U
ˉ
T
b
∥
≥
∥
U
ˉ
T
b
∥
=\left\|\Sigma V^{T} x-U_{n}^{T} b\right\|+\left\|\bar{U}^{T} b\right\| \geq \left\|\bar{U}^{T} b\right\|
=∥∥?ΣVTx?UnT?b∥∥?+∥∥?UˉTb∥∥?≥∥∥?UˉTb∥∥?
等号当且仅当
∑
V
T
x
?
U
n
T
b
=
0
\sum V^{T} x-U_{n}^{T} b=0
∑VTx?UnT?b=0 时成立, 所以:
x
=
(
Σ
V
T
)
?
1
U
n
T
b
=
V
Σ
?
1
U
n
T
b
x=\left(\Sigma V^{T}\right)^{-1} U_{n}^{T} b=V \Sigma^{-1} U_{n}^{T} b
x=(ΣVT)?1UnT?b=VΣ?1UnT?b
这就是线性最小二乘问题的解。
特殊情况:齐次线性方程
A
x
=
0
\mathrm{A}x=0
Ax=0,其中A的行数大于列数
min
?
∥
A
x
∥
,
s
t
.
∥
x
∥
=
1
\min \|A x\| , st. \|x\|=1
min∥Ax∥,st.∥x∥=1 此时, 最小二乘解为
A
T
A
A^{T} A
ATA 最小特征值对应的特征向量。 感性认识: 如果X是
A
T
A
A^{T} A
ATA 的特征向量, 则目标函数:
∣
∣
A
x
∣
∣
=
x
T
(
A
T
A
)
x
=
λ
2
∥
x
∥
||A x||=x^{T}\left(A^{T} A\right) x=\lambda^{2}\|x\|
∣∣Ax∣∣=xT(ATA)x=λ2∥x∥ 求解方案:
-
eig
?
(
A
T
A
)
=
[
V
,
D
]
\operatorname{eig}\left(A^{T} A\right)=[V, D]
eig(ATA)=[V,D], V为特征向量阵, 找最小特征值对应的V中的特征向量.
-
svd
?
(
A
)
=
[
U
,
S
,
V
]
\operatorname{svd}(A)=[U, S, V]
svd(A)=[U,S,V], 前面我们知道U是
A
A
T
A A^{T}
AAT 的特征值,
V
\mathrm{V}
V 是
A
T
A
A^{T} A
ATA 的特征值,zhaoS中最小奇异值对应的V的右奇异向量即可.
参考:
Cholesky分解 QR分解 矩阵分解 SVD奇异分解 SVD 最小二乘问题 LU分解 SLAM QR SVD
|