【20220825】【数学基础】用最小二乘法求解超定方程组

文章目录

  • 一、定义及背景
    • 1.1 定义
    • 1.2 问题背景
  • 二、最小二乘法
    • 2.1 定义
    • 2.2 矩阵解法推导
  • 三、Matlab实现
    • 3.1 Matlab命令
    • 3.2 实例
      • 3.2.1 理论求解
      • 3.2.2 Matlab求解

    (本文PDF版,关注公众号–回复 “220825” 自取哦~)

一、定义及背景

1.1 定义

    超定方程组: 方程个数大于未知量个数的方程组,不存在解析解,寻求最小二乘解;

    恰定方程组: 方程个数等于未知量个数的方程组,存在唯一解析解;

    欠定方程组: 方程个数小于未知量个数的方程组,存在无穷多解,寻求一个基本解。

    要注意的是,定义中说的 “方程个数” 必须基于方程组中任意两个方程不等价的大前提,即不能存在类似于 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 nn<m。其中 n n n 为方程组个数, m m m 为未知量个数。

1.2 问题背景

    给定一个点集合,要求对该集合进行曲线拟合,但一般情况下,很难保证拟合到的结果曲线可以同时经过集合的所有点。也就是说,给定的条件(即该点集合)过于严格,导致解析解(即保证所有点都经过的曲线)不存在。对于这种无法完全满足给定条件的情况下,通常使用最小二乘法求解一个最接近的解。

    曲线拟合是最小二乘法要解决的问题,本文的超定方程实际上也是 最小二乘法 要解决的问题。

二、最小二乘法

2.1 定义

    最小二乘法(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=1N(yif(xi))2

    对于以上目标函数的求解,理论上可以用导数法、几何法,工程上可以用梯度下降法。本文将在下章节以线性回归为例,使用矩阵法对最小二乘解进行公式推导。

2.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+...+θn1xn1
其中, θ \theta θ 为参数, x i   ( i = 0 , 1 , . . . n − 1 ) x_i\space (i=0,1,...n-1) xi (i=0,1,...n1) 为自变量, 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+...+θn1x1,n1y2=θ0+θ1x2,1+θ2x2,2+...+θn1x2,n1...ym=θ0+θ1xm,1+θ2xm,2+...+θn1xm,n1
    若 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(θ)=∣∣HY2=∣∣XθY2=(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实现

3.1 Matlab命令

    Matlab 中有三种方法求解超定方程组:

        ① 伪逆法求解:X=pinv(A)×b;

        ② 左除法求解:X=A\b;

        ③ 最小二乘法求解:X=lsqnonneg(A, b)。

3.2 实例

    求解以下超定方程组的最小二乘解:
{ 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=113x15x2=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] 23124521 [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= 23124521 X=[x1x2]b= 11367
则有:
A X = b \boldsymbol{A}\boldsymbol{X}=\boldsymbol{b} AX=b

3.2.1 理论求解

    最小二乘解满足如下等式:
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] [24351221] 23124521 [x1x2]=[24351221] 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

3.2.2 Matlab求解

%% 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);  % 最小二乘法

你可能感兴趣的:(数学基础,最小二乘法,机器学习,算法)