超定方程组: 方程个数大于未知量个数的方程组,不存在解析解,寻求最小二乘解;
恰定方程组: 方程个数等于未知量个数的方程组,存在唯一解析解;
欠定方程组: 方程个数小于未知量个数的方程组,存在无穷多解,寻求一个基本解。
要注意的是,定义中说的 “方程个数” 必须基于方程组中任意两个方程不等价的大前提,即不能存在类似于 x + y = 1 x+y=1 x+y=1 和 2 x + 2 y = 2 2x+2y=2 2x+2y=2 的两个方程。也就是说,如果将方程组写成向量形式 A X = b AX=b AX=b,要保证该方程组的系数矩阵 A A A 列满秩。
可以从行列式的角度理解上述几种方程组的定义,若方程组的系数矩阵
A
A
A 是
n
×
m
n×m
n×m 的矩阵,且
A
A
A 列满秩,那么对于恰定方程组有
n
=
m
n=m
n=m;对于超定方程组有
n
>
m
n>m
n>m;对于欠定方程组有
n
<
m
n
给定一个点集合,要求对该集合进行曲线拟合,但一般情况下,很难保证拟合到的结果曲线可以同时经过集合的所有点。也就是说,给定的条件(即该点集合)过于严格,导致解析解(即保证所有点都经过的曲线)不存在。对于这种无法完全满足给定条件的情况下,通常使用最小二乘法求解一个最接近的解。
曲线拟合是最小二乘法要解决的问题,本文的超定方程实际上也是 最小二乘法 要解决的问题。
最小二乘法(LS, Least Square)又称最小平方法,是一种数学中的优化方法,它试图找到一组估计值,使得实际值和估计值尽可能地相似,其相似性是用误差的平方和来评价的。也就是说,最小二乘法的本质是计算最优解,使得估计值和实际值误差的平方和最小。
若存在一组观测数据
(
x
i
,
y
i
)
(x_{i}, y_{i})
(xi,yi),通过作图观察到这组数据呈明显的线性关系,那么我们可以用如下关系式对这组观测数据进行拟合:
f
(
x
)
=
k
x
+
b
f(x)=kx+b
f(x)=kx+b
上述线性方程就是基于该组观测数据建立的数学模型,进一步要解决的问题是求解方程参数
k
,
b
k, b
k,b 。基于 “误差的平方和最小” 的准则,求解一组参数使得如下的目标函数最小,即可以求得方程的最小二乘解:
L
=
∑
i
=
1
N
(
y
i
−
f
(
x
i
)
)
2
L =\sum_{i=1}^{N}(y_i-f(x_i))^2
L=i=1∑N(yi−f(xi))2
对于以上目标函数的求解,理论上可以用导数法、几何法,工程上可以用梯度下降法。本文将在下章节以线性回归为例,使用矩阵法对最小二乘解进行公式推导。
线性回归的因变量是自变量的线性组合,其定义式可以表示为:
h
(
x
1
,
x
2
,
.
.
.
,
x
n
)
=
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
−
1
x
n
−
1
h(x_1, x_2, ..., x_n) = \theta_0+\theta_1x_1+...+\theta_{n-1}x_{n-1}
h(x1,x2,...,xn)=θ0+θ1x1+...+θn−1xn−1
其中,
θ
\theta
θ 为参数,
x
i
(
i
=
0
,
1
,
.
.
.
n
−
1
)
x_i\space (i=0,1,...n-1)
xi (i=0,1,...n−1) 为自变量,
h
h
h 为因变量。
假设有
m
m
m 个观测样本(即方程个数),每个样本有
n
n
n 维特征(即未知量个数),将所有观测样本带入线性回归方程则有:
{
y
1
=
θ
0
+
θ
1
x
1
,
1
+
θ
2
x
1
,
2
+
.
.
.
+
θ
n
−
1
x
1
,
n
−
1
y
2
=
θ
0
+
θ
1
x
2
,
1
+
θ
2
x
2
,
2
+
.
.
.
+
θ
n
−
1
x
2
,
n
−
1
.
.
.
y
m
=
θ
0
+
θ
1
x
m
,
1
+
θ
2
x
m
,
2
+
.
.
.
+
θ
n
−
1
x
m
,
n
−
1
{y1=θ0+θ1x1,1+θ2x1,2+...+θn−1x1,n−1y2=θ0+θ1x2,1+θ2x2,2+...+θn−1x2,n−1...ym=θ0+θ1xm,1+θ2xm,2+...+θn−1xm,n−1
⎩
⎨
⎧y1=θ0+θ1x1,1+θ2x1,2+...+θn−1x1,n−1y2=θ0+θ1x2,1+θ2x2,2+...+θn−1x2,n−1...ym=θ0+θ1xm,1+θ2xm,2+...+θn−1xm,n−1
若
m
>
n
m>n
m>n,则上述线性回归方程就是超定线性方程组,该方程组没有精确解,只能求解其最小二乘解。对该线性回归问题进行建模,可用矩阵法表示为:
H
=
X
θ
\boldsymbol{H}=\boldsymbol{X}\boldsymbol{\theta}
H=Xθ
其中,
X
\boldsymbol{X}
X 为自变量构成的矩阵,它是
m
×
n
m×n
m×n 的矩阵;
θ
\boldsymbol{\theta}
θ 为要求解的模型参数,它是
n
×
1
n×1
n×1 的列向量;
H
\boldsymbol{H}
H 为给定自变量矩阵后的的理论估计向量,它是
m
×
1
m×1
m×1 的列向量。
假设
Y
\boldsymbol{Y}
Y 为观测向量,它也是
m
×
1
m×1
m×1 的列向量,由于
X
\boldsymbol{X}
X 和
Y
\boldsymbol{Y}
Y 都是已知的,未知的模型参数是
θ
\boldsymbol{\theta}
θ,则目标函数的矩阵形式可以表示为:
J
(
θ
)
=
∣
∣
H
−
Y
∣
∣
2
=
∣
∣
X
θ
−
Y
∣
∣
2
=
(
X
θ
−
Y
)
T
(
X
θ
−
Y
)
J(\theta)=||\boldsymbol{H}-\boldsymbol{Y}||^2=||\boldsymbol{X}\boldsymbol{\theta}-\boldsymbol{Y}||^2=(\boldsymbol{X}\boldsymbol{\theta}-\boldsymbol{Y})^T(\boldsymbol{X}\boldsymbol{\theta}-\boldsymbol{Y})
J(θ)=∣∣H−Y∣∣2=∣∣Xθ−Y∣∣2=(Xθ−Y)T(Xθ−Y)
该目标函数取得最小值就是导数为 0 的地方,即:
θ
=
arg
min
θ
∂
J
(
θ
)
∂
θ
\boldsymbol{\theta}=\arg\min\limits_{\boldsymbol{\theta}}\frac{\partial J(\boldsymbol{\theta})}{\partial \boldsymbol\theta}
θ=argθmin∂θ∂J(θ)
(本文不做详细推导,直接利用矩阵微积分中矩阵求导的知识)可得:
∂
J
(
θ
)
∂
θ
=
2
X
T
X
θ
−
2
X
T
Y
=
0
\frac{\partial{J(\boldsymbol{\theta})}}{\partial{\boldsymbol{\theta}}}=2\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{\theta}-2\boldsymbol{X}^T\boldsymbol{Y}=0
∂θ∂J(θ)=2XTXθ−2XTY=0
即:
X
T
X
θ
=
X
T
Y
\boldsymbol{X}^T\boldsymbol{X}\boldsymbol{\theta}=\boldsymbol{X}^T\boldsymbol{Y}
XTXθ=XTY
若
X
T
X
\boldsymbol{X}^T\boldsymbol{X}
XTX 可逆,则
θ
\boldsymbol{\theta}
θ 的最小二乘解为:
θ
=
(
X
T
X
)
−
1
X
T
Y
\boldsymbol{\theta}=(\boldsymbol{X}^T\boldsymbol{X})^{-1}\boldsymbol{X}^T\boldsymbol{Y}
θ=(XTX)−1XTY
注意:线性回归比较简单,可以直接推导出解析解,而且许多非线性的问题也可以转化为线性问题求解,因此线性回归得到了广泛的应用。许多人认为最小二乘法就是指线性回归,但其实线性回归是一种模型,最小二乘法是一种可以用来解决线性回归问题的方法、思想,最小二乘法可以拟合任意函数,线性回归只是其中一种较简单和常用的函数,所以最小二乘法大多以线性回归为例进行讲解。
可以这样快速记忆:最小二乘解就是在等式 Y = X θ \boldsymbol{Y}=\boldsymbol{X}\boldsymbol{\theta} Y=Xθ 两边都左乘 X T \boldsymbol{X}^T XT。
Matlab 中有三种方法求解超定方程组:
① 伪逆法求解:X=pinv(A)×b;
② 左除法求解:X=A\b;
③ 最小二乘法求解:X=lsqnonneg(A, b)。
求解以下超定方程组的最小二乘解:
{
2
x
1
+
4
x
2
=
11
3
x
1
−
5
x
2
=
3
x
1
+
2
x
2
=
6
2
x
1
+
x
2
=
7
{2x1+4x2=113x1−5x2=3x1+2x2=62x1+x2=7
⎩
⎨
⎧2x1+4x2=113x1−5x2=3x1+2x2=62x1+x2=7
将超定方程组写成矩阵形式:
[
2
4
3
−
5
1
2
2
1
]
[
x
1
x
2
]
=
[
11
3
6
7
]
\left[ 243−51221 \right] \left[x1x2\right]=\left[11367\right]
⎣
⎡23124−521⎦
⎤[x1x2]=⎣
⎡11367⎦
⎤
对系数矩阵、自变量向量、因变量向量分别做如下定义:
A
=
[
2
4
3
−
5
1
2
2
1
]
X
=
[
x
1
x
2
]
b
=
[
11
3
6
7
]
\boldsymbol{A}=\left[ 243−51221 \right]\quad \boldsymbol{X}=\left[x1x2\right] \quad \boldsymbol{b}=\left[11367\right]
A=⎣
⎡23124−521⎦
⎤X=[x1x2]b=⎣
⎡11367⎦
⎤
则有:
A
X
=
b
\boldsymbol{A}\boldsymbol{X}=\boldsymbol{b}
AX=b
最小二乘解满足如下等式:
A
T
A
X
=
A
T
b
\boldsymbol{A}^T\boldsymbol{A}\boldsymbol{X}=\boldsymbol{A}^T\boldsymbol{b}
ATAX=ATb
若
A
T
A
\boldsymbol{A}^T\boldsymbol{A}
ATA 可逆,则
X
\boldsymbol{X}
X 的最小二乘解为:
X
=
(
A
T
A
)
−
1
A
T
b
\boldsymbol{X}=(\boldsymbol{A}^T\boldsymbol{A})^{-1}\boldsymbol{A}^T\boldsymbol{b}
X=(ATA)−1ATb
则有:
[
2
3
1
2
4
−
5
2
1
]
[
2
4
3
−
5
1
2
2
1
]
[
x
1
x
2
]
=
[
2
3
1
2
4
−
5
2
1
]
[
11
3
6
7
]
\left[ 23124−521 \right]\left[ 243−51221 \right]\left[ x1x2 \right]=\left[ 23124−521 \right]\left[11367\right]
[243−51221]⎣
⎡23124−521⎦
⎤[x1x2]=[243−51221]⎣
⎡11367⎦
⎤
则:
{
x
1
=
3.0403
x
2
=
1.2418
{x1=3.0403x2=1.2418
{x1=3.0403x2=1.2418
%% Matlab求解超定方程组
clear; clc; close all; warning off;
A = [2, 4; 3, -5; 1, 2; 2, 1];
b = [11; 3; 6; 7];
%% 求最小二乘解
X_1 = pinv(A) * b; % 伪逆法
X_2 = A \ b; % 左除法
X_3 = lsqnonneg(A, b); % 最小二乘法