最小二乘法工程实践

发布时间:2023年12月28日

介绍

最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具 。最小二乘法是一种机器学习算法。

关于其原理的介绍以及公式推导有很多优质资料,比如我学习最小二乘法时的两个视频课程。本文不再介绍原理,而是介绍最小二乘法的工程应用。

数学建模之数据拟合(3):最小二乘法_哔哩哔哩_bilibili

[知识梳理-04] Recursive Least Squares 递归最小二乘法 RLS_哔哩哔哩_bilibili

工程实践

本文介绍函数拟合与信号预测方面的应用,学会基本的使用之后,读者可以根据自身需求应用到误差估计、参数辨识等领域,具体使用方法可以参考相关文献资料。使用Matlab作为演示,为了展示最小二乘法的向量表示,不使用Matlab的库函数。读者自己使用时也可以使用matlab的函数,比如polyfit、lsqcurvefit等,他们都是基于最小二乘法,根据需求选择函数,查看Matlab帮助文档即可。

用最小二乘求解非线性曲线拟合(数据拟合)问题 - MATLAB lsqcurvefit- MathWorks 中国

多项式曲线拟合 - MATLAB polyfit- MathWorks 中国

计算公式

向量计算

普通的最小二乘法只有两个公式,其中:

inv(A):求A得逆矩阵

X.' :求X得转置矩阵

function [ w ] = LS_Fitting( X, Y)
%输入: X 自变量矩阵
%      Y 因变量矩阵
%输出: w 系数矩阵
%作者:飞鸟

P = inv(X.'*X );
w = P * X.' * Y;
 
end

转换优化问题求解

最小二乘法可以转化为优化问题,我们假设目标方程为一阶线性方程,即:y = ax + b ,我们的目的是求解一个合适的a和b,使得目标函数的值最小。通过极值的方法进行求解,会涉及高数中的求偏导。当然不懂偏导也没有关系,我们直接看求解结果,会使用就行。

求解结果:

?

在c语言中,不方便进行矩阵、向量运算,可以直接使用a、b的求解结果。实际使用时,x与y均为已知量。计算为最基本的加减乘除运算,我们很容易写出运算的代码。

a、b为一阶线性方程的解,一般一阶线性方程就可以了,如果需要其他目标方程,可以去查阅相关资料,查找的资料也是直接查找对应的系数值(a、b、...)就行,不用关注推导过程。

函数拟合

我们已经介绍了2种最小二乘法的计算方法,可以根据数据求解出我们需要的目标方程,以下是算法实践。

线性方程

目标方程:y = ax + b

系数矩阵:w = [a;b];

  1. 以奥运会历年男子百米成绩作为数据,历年年份写为自变量矩阵。历年成绩写为因变量矩阵。注意X自变量矩阵的写法,之后看到非线性方程会更加清晰。
X = [ 1980 1
      1984 1
      1988 1
      1992 1
      1996 1
      2000 1
      2004 1
      2008 1
      2012 1
      2016 1
      2020 1 ];
Y = [ 10.25
      9.99
      9.92
      9.96
      9.84
      9.87
      9.85
      9.69
      9.63
      9.81
      9.80];

w= LS_Fitting( X, Y);    
  1. 将数据输入函数LS_Fitting计算得到系数矩阵。 获得系数矩阵w,就拟合出了线性方程y = ax + b
  2. 数据对比如下图,拟合数据基本复合实际数据的趋势。

非线性方程

目标方程:y = ax^2 + bx + c

系数矩阵:w = [a;b;c];

  1. 以奥运会历年男子百米成绩作为数据,历年年份写为自变量矩阵。历年成绩写为因变量矩阵。注意X自变量矩阵的写法,自变量矩阵的写法包含了目标方程的信息。
X = [ 1980*1980 1980 1
      1984*1984 1984 1
      1988*1988 1988 1
      1992*1992 1992 1
      1996*1996 1996 1
      2000*2000 2000 1
      2004*2004 2004 1
      2008*2008 2008 1
      2012*2012 2012 1
      2016*2016 2016 1
      2020*2020 2020 1];
Y = [ 10.25
      9.99
      9.92
      9.96
      9.84
      9.87
      9.85
      9.69
      9.63
      9.81
      9.80];

w= LS_Fitting( X, Y);    
  1. 将数据输入函数LS_Fitting计算得到系数矩阵。 获得系数矩阵w,就拟合出了线性方程y = ax^2 + bx + c
  2. 数据对比如下图,拟合数据基本复合实际数据的趋势,并且相比线性方程,一元二次非线性方程的拟合效果更好。

信号预测

以非线性方程拟合结果预测2024年百米冠军成绩为例,拟合方程为:

Fun =(1039712176776813*x^2)/2305843009213693952 - (8167480322080091*x)/4503599627370496 + 4031421507106269/2199023255552

带入年份x=2024,输出预测成绩:9.8228

总结

最小二乘法应用广泛,拟合方程后的用法也不只是信号预测方面,例如还可以做智能控制,可以结合本文的拟合方法带入自己的应用场景。实际使用中,灵活选择目标方程,可以获得更好的拟合结果。

以上介绍的最小二乘法对离线数据进行拟合,而递归最小二乘法可以应用于时变系统,可以进行实时的参数估计、自适应控制等,并且占用内存资源更小,下一篇文章中介绍递归最小二乘法。

参考资料:

曹连江著,电子信息测量及其误差分析校正的研究,东北师范大学出版社,2017.09,第260页

文章来源:https://blog.csdn.net/LSL_Blogs/article/details/135236594
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。