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



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

    一、定义及背景

    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 {y1=θ0+θ1x1,1+θ2x1,2+...+θn1x1,n1y2=θ0+θ1x2,1+θ2x2,2+...+θn1x2,n1...ym=θ0+θ1xm,1+θ2xm,2+...+θn1xm,n1 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 {2x1+4x2=113x15x2=3x1+2x2=62x1+x2=7 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[ 24351221 \right] \left[x1x2\right]=\left[11367\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[ 24351221 \right]\quad \boldsymbol{X}=\left[x1x2\right] \quad \boldsymbol{b}=\left[11367\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[ 23124521 \right]\left[ 24351221 \right]\left[ x1x2 \right]=\left[ 23124521 \right]\left[11367\right] [24351221] 23124521 [x1x2]=[24351221] 11367
    则:
    { x 1 = 3.0403 x 2 = 1.2418 {x1=3.0403x2=1.2418 {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);  % 最小二乘法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    0基础学习PyFlink——模拟Hadoop流程
    环形链表(C++解法)
    基于SpringBoot的火车订票管理系统
    MySQL 是怎么加行级锁的?为什么一会是 next-key 锁,一会是间隙锁,一会又是记录锁?
    看完这篇,还不懂JAVA内存模型(JMM)算我输
    【算法】通信线路(二分,堆优化版dijkstra)
    mysql八股1
    深度学习(PyTorch)——卷积神经网络(CNN)基础篇
    有多少因数
    15_Nginx_server指令、server_name指令
  • 原文地址:https://blog.csdn.net/weixin_40583722/article/details/126532014