在进行最小二乘算法的计算时,有时候会用到QR分解,你知道为什么吗?最小二乘不是有闭式解吗,QR分解的意义何在?本文告诉你!
1. 最小二乘算法
最小二乘算法是一种以最小化误差平方和为目标来拟合一组系数的方法。设有
N
N
N个目标值
y
1
,
.
.
.
,
y
N
y_1,...,y_N
y1,...,yN,每个目标值由
M
M
M个变量
x
1
,
.
.
.
,
x
M
x_1,...,x_M
x1,...,xM决定,即
y
i
=
∑
m
ω
m
x
i
,
m
y_i=\sum_m{\omega_m x_{i,m}}
yi=∑mωmxi,m。在已知
y
1
,
.
.
.
,
y
N
y_1,...,y_N
y1,...,yN和
x
1
,
.
.
.
,
x
M
x_1,...,x_M
x1,...,xM的情况下,
ω
m
\omega_m
ωm该如何取值才能使
y
i
−
∑
m
ω
m
x
i
,
m
y_i-\sum_m{\omega_m x_{i,m}}
yi−∑mωmxi,m误差最小?
我们将上面的问题用矩阵表示:
{
y
1
=
ω
1
x
1
,
1
+
ω
2
x
1
,
2
+
.
.
.
+
ω
M
x
1
,
M
y
2
=
ω
1
x
2
,
1
+
ω
2
x
2
,
2
+
.
.
.
+
ω
M
x
2
,
M
⋮
y
N
=
ω
1
x
N
,
1
+
ω
2
x
N
,
2
+
.
.
.
+
ω
M
x
N
,
M
→
y
=
X
ω
\left\{\begin{matrix} y_1=\omega_1x_{1,1}+\omega_2x_{1, 2}+...+\omega_M x_{1,M} \\ y_2=\omega_1x_{2,1}+\omega_2x_{2, 2}+...+\omega_M x_{2,M} \\ \vdots \\ y_N=\omega_1x_{N,1}+\omega_2x_{N, 2}+...+\omega_M x_{N,M} \end{matrix}\right. \rightarrow \mathbf{y=X \omega}
⎩
⎨
⎧y1=ω1x1,1+ω2x1,2+...+ωMx1,My2=ω1x2,1+ω2x2,2+...+ωMx2,M⋮yN=ω1xN,1+ω2xN,2+...+ωMxN,M→y=Xω
其中,
y
=
[
y
1
,
.
.
.
,
y
N
]
T
\mathbf{y}=[y_1,...,y_N]^T
y=[y1,...,yN]T表示目标向量,
ω
=
[
ω
1
,
.
.
.
,
ω
N
]
T
\mathbf{\omega}=[\omega_1,...,\omega_N]^T
ω=[ω1,...,ωN]T表示系数向量,
X
=
[
x
1
,
1
.
.
.
x
1
,
M
x
2
,
1
.
.
.
x
2
,
M
⋮
.
.
.
⋮
x
N
,
1
.
.
.
x
N
,
M
]
\mathbf{X} = \left[\begin{matrix} x_{1,1} & ... & x_{1,M} \\ x_{2,1} & ... & x_{2,M} \\ \vdots & ... & \vdots \\ x_{N,1} & ... & x_{N,M} \end{matrix} \right]
X=
x1,1x2,1⋮xN,1............x1,Mx2,M⋮xN,M
当
N
≥
M
N \geq M
N≥M时,方程数目大于未知参数数目,上述方程为超定方程,可以用最小二乘法求解。将上述问题转化为
ω
∗
=
arg
min
ω
∣
∣
y
−
X
ω
∣
∣
2
\mathbf{\omega}^* = \arg \mathop{\min}\limits_{\mathbf{\omega}} ||\mathbf{y}-\mathbf{X\omega}||^2
ω∗=argωmin∣∣y−Xω∣∣2
上式的求解过程如下:
∣
∣
y
−
X
ω
∣
∣
2
=
(
y
−
X
ω
)
T
(
y
−
X
ω
)
=
y
T
y
−
2
y
T
X
ω
+
ω
T
X
T
X
ω
=
J
(
ω
)
↓
d
J
(
ω
)
d
ω
=
−
2
X
T
y
+
2
X
T
X
ω
=
0
↓
ω
∗
=
(
X
T
X
)
−
1
X
T
y
||\mathbf{y}-\mathbf{X\omega}||^2=(\mathbf{y}-\mathbf{X\omega})^T(\mathbf{y}-\mathbf{X\omega})=\mathbf{y^Ty}-2\mathbf{y^TX\omega}+\mathbf{\omega^TX^TX\omega}=J(\mathbf{\omega})\\ \downarrow \\ \frac{dJ(\mathbf{\omega})}{d\mathbf{\omega}}=-2\mathbf{X^Ty}+2\mathbf{X^TX\omega}=0 \\ \downarrow \\ \mathbf{\omega}^*=\mathbf{(X^TX)^{-1}X^Ty}
∣∣y−Xω∣∣2=(y−Xω)T(y−Xω)=yTy−2yTXω+ωTXTXω=J(ω)↓dωdJ(ω)=−2XTy+2XTXω=0↓ω∗=(XTX)−1XTy
可见,最小二乘法有闭式解,可以根据上式直接求得最优系数。
2. QR分解
QR分解是将一个矩阵
A
\mathbf{A}
A分解为一个正交矩阵
Q
\mathbf{Q}
Q和一个上三角矩阵
R
\mathbf{R}
R的乘积,即
A
=
Q
R
\mathbf{A=QR}
A=QR。其中,正交矩阵满足
Q
Q
T
=
I
\mathbf{QQ^T=I}
QQT=I,上三角矩阵
R
\mathbf{R}
R的形式如下,它在对角线下边的元素全为0。
R
=
[
r
1
,
1
r
1
,
2
.
.
.
r
1
,
M
0
r
2
,
2
.
.
.
r
2
,
M
⋮
.
.
.
⋮
⋮
0
0
.
.
.
r
M
,
M
]
\mathbf{R} = \left[\begin{matrix} r_{1,1} & r_{1,2} & ... & r_{1,M} \\ 0 & r_{2, 2} & ... & r_{2,M}\\ \vdots & ... & \vdots & \vdots\\ 0 & 0 & ... & r_{M,M} \end{matrix} \right]
R=
r1,10⋮0r1,2r2,2...0......⋮...r1,Mr2,M⋮rM,M
QR分解可以很方便地进行线性方程组的求解,说明如下:
A
x
=
b
→
Q
R
x
=
b
→
R
x
=
Q
−
1
b
=
Q
T
b
=
c
↓
[
r
1
,
1
r
1
,
2
.
.
.
r
1
,
M
0
r
2
,
2
.
.
.
r
2
,
M
⋮
.
.
.
⋮
⋮
0
0
.
.
.
r
M
,
M
]
[
x
1
x
2
⋮
x
M
]
=
[
c
1
c
2
⋮
c
M
]
↓
{
r
1
,
1
x
1
+
r
1
,
2
x
2
+
.
.
.
+
r
1
,
M
x
M
=
c
1
r
2
,
2
x
2
+
.
.
.
+
r
2
,
M
x
M
=
c
2
⋮
r
M
,
M
x
M
=
c
M
\mathbf{Ax=b} \rightarrow \mathbf{QRx=b} \rightarrow \mathbf{Rx=Q^{-1}b=Q^Tb=c}\\ \downarrow \\ \left[\begin{matrix} r_{1,1} & r_{1,2} & ... & r_{1,M} \\ 0 & r_{2, 2} & ... & r_{2,M}\\ \vdots & ... & \vdots & \vdots\\ 0 & 0 & ... & r_{M,M} \end{matrix} \right] \left[\begin{matrix} x_{1}\\ x_{2}\\ \vdots\\ x_{M} \end{matrix} \right]= \left[\begin{matrix} c_{1}\\ c_{2}\\ \vdots\\ c_{M} \end{matrix} \right]\\ \downarrow \\ \left\{\begin{matrix} r_{1,1}x_1+r_{1,2}x_2+...+r_{1,M}x_M=c_1 \\ r_{2,2}x_2+...+r_{2,M}x_M=c_2 \\ \vdots \\ r_{M,M}x_M=c_M \end{matrix}\right.
Ax=b→QRx=b→Rx=Q−1b=QTb=c↓
r1,10⋮0r1,2r2,2...0......⋮...r1,Mr2,M⋮rM,M
x1x2⋮xM
=
c1c2⋮cM
↓⎩
⎨
⎧r1,1x1+r1,2x2+...+r1,MxM=c1r2,2x2+...+r2,MxM=c2⋮rM,MxM=cM
3. 条件数
条件数常用于衡量线性方程组的稳定性,条件数越大,矩阵稳定性越差,越接近于病态(奇异矩阵)。线性方程组
A
x
=
b
\mathbf{Ax=b}
Ax=b中,我们称
b
\mathbf{b}
b为观测向量,
A
\mathbf{A}
A为系数矩阵,
x
\mathbf{x}
x为待求向量。我们期望观测向量
b
\mathbf{b}
b和系数矩阵
A
\mathbf{A}
A的微小变化不会引起解向量
x
\mathbf{x}
x的巨大变化,否则若观测向量中有些许噪声就会导致解向量的极大误差。换言之,我们希望线性方程是具备一定的抗噪能力的。首先考察待求向量
x
\mathbf{x}
x受观测向量
b
\mathbf{b}
b的波动的影响。
A
x
=
b
→
A
(
x
+
Δ
x
)
=
b
+
Δ
b
→
A
Δ
x
=
Δ
b
→
Δ
x
=
A
−
1
b
→
∣
∣
Δ
x
∣
∣
≤
∣
∣
A
−
1
∣
∣
∣
b
∣
∣
∣
A
x
=
b
→
∣
∣
b
∣
∣
≤
∣
∣
A
∣
∣
∣
∣
x
∣
∣
↓
∣
∣
Δ
x
∣
∣
∣
∣
x
∣
∣
≤
(
∣
∣
A
∣
∣
∣
∣
A
−
1
∣
∣
)
∣
∣
Δ
b
∣
∣
∣
∣
b
∣
∣
\mathbf{Ax=b} \rightarrow \mathbf{A(x+\Delta x)=b+\Delta b}\rightarrow \mathbf{A\Delta x=\Delta b} \rightarrow \mathbf{\Delta x=A^{-1}b} \rightarrow ||\mathbf{\Delta x}|| \leq ||\mathbf{A^{-1}}|||\mathbf{b}||| \\ \mathbf{Ax=b}\rightarrow ||\mathbf{b}|| \leq ||\mathbf{A}||||\mathbf{x}|| \\ \downarrow \\ \frac{||\mathbf{\Delta x}||}{||\mathbf{x}||} \leq (||\mathbf{A}||||\mathbf{A^{-1}}||)\frac{||\mathbf{\Delta b}||}{||\mathbf{b}||}
Ax=b→A(x+Δx)=b+Δb→AΔx=Δb→Δx=A−1b→∣∣Δx∣∣≤∣∣A−1∣∣∣b∣∣∣Ax=b→∣∣b∣∣≤∣∣A∣∣∣∣x∣∣↓∣∣x∣∣∣∣Δx∣∣≤(∣∣A∣∣∣∣A−1∣∣)∣∣b∣∣∣∣Δb∣∣
下面考虑待求向量
x
\mathbf{x}
x受系数矩阵
A
\mathbf{A}
A的波动的影响:
(
A
+
Δ
A
)
(
x
+
Δ
x
)
=
b
→
Δ
x
=
−
A
−
1
Δ
A
(
x
+
Δ
x
)
→
∣
∣
Δ
x
∣
∣
≤
∣
∣
A
−
1
∣
∣
∣
∣
Δ
A
∣
∣
∣
∣
x
+
Δ
x
∣
∣
↓
∣
∣
Δ
x
∣
∣
∣
∣
x
+
Δ
x
∣
∣
≤
(
∣
∣
A
∣
∣
∣
∣
A
−
1
∣
∣
)
∣
∣
Δ
A
∣
∣
∣
∣
A
∣
∣
(\mathbf{A+\Delta A})(\mathbf{x+\Delta x})=b \rightarrow \mathbf{\Delta x=-A^{-1}\Delta A(x + \Delta x)} \rightarrow ||\Delta x|| \leq ||\mathbf{A^{-1}}||||\mathbf{\Delta A}||||\mathbf{x+\Delta x}|| \\ \downarrow \\ \frac{||\mathbf{\Delta x}||}{||\mathbf{x+\Delta x}||} \leq (||\mathbf{A}||||\mathbf{A^{-1}}||)\frac{||\mathbf{\Delta A}||}{||\mathbf{A}||}
(A+ΔA)(x+Δx)=b→Δx=−A−1ΔA(x+Δx)→∣∣Δx∣∣≤∣∣A−1∣∣∣∣ΔA∣∣∣∣x+Δx∣∣↓∣∣x+Δx∣∣∣∣Δx∣∣≤(∣∣A∣∣∣∣A−1∣∣)∣∣A∣∣∣∣ΔA∣∣
在上面的表达式中,
∣
∣
Δ
b
∣
∣
∣
∣
b
∣
∣
\frac{||\mathbf{\Delta b}||}{||\mathbf{b}||}
∣∣b∣∣∣∣Δb∣∣表示观测向量的变化率,
∣
∣
Δ
A
∣
∣
∣
∣
A
∣
∣
\frac{||\mathbf{\Delta A}||}{||\mathbf{A}||}
∣∣A∣∣∣∣ΔA∣∣表示系数向量的变化率,
∣
∣
Δ
x
∣
∣
∣
∣
x
∣
∣
\frac{||\mathbf{\Delta x}||}{||\mathbf{x}||}
∣∣x∣∣∣∣Δx∣∣表示待求向量的变化率。条件数定义为
c
o
n
d
(
A
)
=
∣
∣
A
∣
∣
∣
∣
A
−
1
∣
∣
cond(\mathbf{A})=||\mathbf{A}||||\mathbf{A^{-1}}||
cond(A)=∣∣A∣∣∣∣A−1∣∣,显然条件数越大,待求向量的变化受观测向量和系数矩阵变化的影响越大,方程越不稳定。
当上述推导过程中的范数||||取
l
2
l_2
l2范数时,条件数
c
o
n
d
(
A
)
=
σ
m
a
x
σ
m
i
n
cond(\mathbf{A})=\frac{\sigma_{max}}{\sigma_{min}}
cond(A)=σminσmax,其中
σ
m
a
x
\sigma_{max}
σmax和
σ
m
i
n
\sigma_{min}
σmin分别表示矩阵
A
\mathbf{A}
A的最大和最小奇异值。显然,
c
o
n
d
(
A
)
cond(\mathbf{A})
cond(A)是一个大于或等于1的正数,当矩阵奇异时,
σ
m
i
n
=
0
\sigma_{min}=0
σmin=0,此时条件数无穷大。当条件数不是无穷大,但很大时,矩阵接近奇异,此时矩阵的行向量或列向量的线性相关性很强。此外,由条件数的定义可知,正交矩阵或酉矩阵的条件数为1。
对矩阵
A
\mathbf{A}
A进行奇异值分解有
A
=
V
Σ
V
H
\mathbf{A=V\Sigma V^H}
A=VΣVH,对
A
H
A
\mathbf{A^H A}
AHA进行奇异值分解有
A
H
A
=
V
Σ
2
V
H
\mathbf{A^H A=V\Sigma^2 V^H}
AHA=VΣ2VH,所以
A
H
A
\mathbf{A^H A}
AHA的最大最小奇异值分别是矩阵
A
\mathbf{A}
A的最大和最小奇异值的平方,所以
c
o
n
d
(
A
=
V
Σ
V
H
)
=
σ
m
a
x
2
σ
m
i
n
2
=
c
o
n
d
(
A
)
2
cond(\mathbf{A=V\Sigma V^H})=\frac{\sigma_{max}^2}{\sigma_{min}^2}=cond(\mathbf{A})^2
cond(A=VΣVH)=σmin2σmax2=cond(A)2,即矩阵
A
H
A
\mathbf{A^H A}
AHA的条件数是矩阵
A
\mathbf{A}
A的条件数的平方。
4. QR分解在最小二乘计算中的应用
从最小二乘的表达式
x
=
(
A
T
A
)
−
1
A
T
b
\mathbf{x=(A^TA)^{-1}A^Tb}
x=(ATA)−1ATb中,我们可以认为待求向量是方程
A
T
A
x
=
A
T
b
\mathbf{A^TAx=A^Tb}
ATAx=ATb的解。从上面的分析中,我们知道矩阵
A
H
A
\mathbf{A^H A}
AHA的条件数是矩阵
A
\mathbf{A}
A的条件数的平方,所以以矩阵
A
H
A
\mathbf{A^H A}
AHA为系数矩阵的方程相比以
A
\mathbf{A}
A为系数矩阵的方程稳定性更差。如果将矩阵
A
\mathbf{A}
A进行QR分解,并带入上述线性方程中有
(
Q
R
)
T
(
Q
R
)
x
=
(
Q
R
)
T
b
→
R
T
Q
T
Q
R
x
=
R
T
Q
T
b
→
R
T
R
x
=
R
T
Q
T
b
→
R
x
=
Q
T
b
→
x
=
R
−
1
Q
T
b
\mathbf{(QR)^T(QR)x=(QR)^Tb}\rightarrow \mathbf{R^TQ^TQRx=R^TQ^Tb}\rightarrow \mathbf{R^TRx=R^TQ^Tb} \rightarrow \mathbf{Rx=Q^Tb} \rightarrow \mathbf{x=R^{-1}Q^Tb}
(QR)T(QR)x=(QR)Tb→RTQTQRx=RTQTb→RTRx=RTQTb→Rx=QTb→x=R−1QTb
即此时将原方程中的系数矩阵
A
H
A
\mathbf{A^H A}
AHA转化成了系数矩阵
R
\mathbf{R}
R。由于
c
o
n
d
(
Q
)
=
1
cond(\mathbf{Q})=1
cond(Q)=1,
c
o
n
d
(
A
)
=
c
o
n
d
(
Q
T
A
)
=
c
o
n
d
(
Q
T
Q
R
)
=
c
o
n
d
(
R
)
cond(\mathbf{A})=cond(\mathbf{Q^TA})=cond(\mathbf{Q^TQR})=cond(\mathbf{R})
cond(A)=cond(QTA)=cond(QTQR)=cond(R),所以经过QR分解后,将线性方程组的条件数由
c
o
n
d
(
A
T
A
)
cond(\mathbf{A^TA})
cond(ATA)转化为了
c
o
n
d
(
A
)
cond(\mathbf{A})
cond(A),可提高方程的稳定性。
5. 计算量对比
6. 仿真验证