• 最小二乘法在编程中的实现


    最小二乘法在编程中的实现

    一、说明

    最近做项目的时候,需要用到最小二乘法,去拟合曲线,现在把在这个过程中的一些总结分享给大家。其中把一些实现和验证用到的内容也一起分享了,可能涉及到使用Matlab、C++、Python等分别实现的过程。

    注:由于不是数学专业出身,可能在接下来的文章中,出现很多错误,烦请小伙伴们指正。特别是涉及到公式的书写和实现,由于自己的数学能力有限,难免会出现错误,请大家指正,我也跟着大家一起学习。特别是关于实现非线性的最小二乘法,这方面我的数学能力感觉就有点跟不上了。

    二、最小二乘法的概念

    最小二乘法,英文写法:least squares method,又叫最小平方法,是一种数学优化建模方法。它通过最小化误差的平方和寻找数据的最佳函数匹配。

    利用最小二乘法可以简便的求得未知的数据,并使得求得的数据与实际数据之间误差的平方和为最小。

    最小二乘法是对线性方程组,即方程个数比未知数更多的方程组,以回归分析求得近似解的标准方法。主要的应用是在曲线拟合上,最小二乘法所指的最佳拟合,即残差平方和的最小化。注:残差:观测值与模型提供的拟合值之间的差距。

                                                                    图1- 回归分析

    三、示例

     假设有四个点(x, y):(1, 6 ),(2, 5 ),(3, 7 ),(4, 10 ),想要找出一条直线和这四个点比较匹配,y = a + bx

     可以得到方程组:

    a+1b=6

    a+2b=5

    a+3b=7

    a+4b=10

    最小二乘法采用的方法是尽量使得等号两边的平方差最小,也就是找出这个函数的最小值:

    S(a,b)=[6-(a+1b) ]^2+[5-(a+2b) ]^2+[7-(a+3b) ]^2+[10-(a+4b)]^2

     最小值可以通过对S(a,b)分别对a,b分别求偏导数,然后是他们等于零:

     如此就得到了一个只有两个未知数的方程组

    a = 3.5

    b = 1.4

    也就是说直线 y = 3.5 + 1.4x 是最佳的。

    四、最小二乘问题分类

    最小二乘问题分为两种:

    1、线性(或普通的最小二乘法)

    2、非线性最小二乘法

    上面的分类,取决于在所有的未知数中的残差是否为线性。

    线性的最小二乘问题发生在统计回归分析中,它有一个封闭形式的解决方案。非线性的问题通常经由迭代细致化来解决,在每次迭代中,系统由线性近似,因此在这两种情况下核心演算是相同的。

    最小二乘法所得出的多项式,即以拟合曲线的函数来描述自变量与预计因变量的方差关系。

    接下来的文章分享使用不同的工具,MATLAB、C++、Python去展示线性和非线性的最小二乘法的拟合。

    下一篇:MATLAB中拟合线性方程(最小二乘法)

    本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。

  • 相关阅读:
    gpio-export配置默认gpio
    分享54个ASP.NET源码总有一个是你想要的
    听说你要删库跑路了?这篇Linux脚本请收好
    软件测试项目该如何规避风险?
    复习背诵整理版
    DS线性表—多项式相加 C++
    腾讯测试开发复试<硬核面经>
    混乱是阶梯:Web2与Web3的融合,也是COSO的窗口期
    S25FL256S介绍及FPGA实现思路
    java计算机毕业设计古惠农产品线上销售系统源码+mysql数据库+系统+LW文档+部署
  • 原文地址:https://blog.csdn.net/ifeng12358/article/details/126190884