超定方程组: 方程个数大于未知量个数的方程组,不存在解析解,寻求最小二乘解;
恰定方程组: 方程个数等于未知量个数的方程组,存在唯一解析解;
欠定方程组: 方程个数小于未知量个数的方程组,存在无穷多解,寻求一个基本解。
要注意的是,定义中说的 “方程个数” 必须基于方程组中任意两个方程不等价的大前提,即不能存在类似于 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 \begin{cases} y_1=\theta_0+\theta_1x_{1,1}+\theta_2x_{1,2}+...+\theta_{n-1}x_{1, n-1}\\ y_2=\theta_0+\theta_1x_{2,1}+\theta_2x_{2,2}+...+\theta_{n-1}x_{2, n-1}\\ ...\\ y_m=\theta_0+\theta_1x_{m,1}+\theta_2x_{m,2}+...+\theta_{n-1}x_{m, n-1} \end{cases} ⎩ ⎨ ⎧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 \begin{cases} 2x_1+4x_2=11\\ 3x_1-5x_2=3\\ x_1+2x_2=6\\ 2x_1+x_2=7 \end{cases} ⎩ ⎨ ⎧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[ \begin{matrix} 2 & 4\\ 3 & -5\\ 1 & 2\\ 2 & 1 \end{matrix} \right] \left[\begin{matrix} x_1\\ x_2\end{matrix}\right]=\left[\begin{matrix}11\\3\\6\\7\end{matrix}\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[ \begin{matrix} 2 & 4\\ 3 & -5\\ 1 & 2\\ 2 & 1 \end{matrix} \right]\quad \boldsymbol{X}=\left[\begin{matrix} x_1\\ x_2\end{matrix}\right] \quad \boldsymbol{b}=\left[\begin{matrix}11\\3\\6\\7\end{matrix}\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[ \begin{matrix} 2 & 3 & 1 & 2\\ 4 & -5 & 2 & 1 \end{matrix} \right]\left[ \begin{matrix} 2 & 4\\ 3 & -5\\ 1 & 2\\ 2 & 1 \end{matrix} \right]\left[ \begin{matrix} x_1\\ x_2 \end{matrix} \right]=\left[ \begin{matrix} 2 & 3 & 1 & 2\\ 4 & -5 & 2 & 1 \end{matrix} \right]\left[\begin{matrix}11\\3\\6\\7\end{matrix}\right] [243−51221]⎣ ⎡23124−521⎦ ⎤[x1x2]=[243−51221]⎣ ⎡11367⎦ ⎤
则:
{ x 1 = 3.0403 x 2 = 1.2418 \begin{cases} x_1=3.0403\\ x_2=1.2418 \end{cases} {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); % 最小二乘法