一文速学-最小二乘法曲线拟合算法详解+项目代码

这篇具有很好参考价值的文章主要介绍了一文速学-最小二乘法曲线拟合算法详解+项目代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、曲线拟合策略

二、最小二乘法理论基础

1.残差

原理

特征

选取策略

2.最小二乘原则

定义

解法总览

三、最小二乘解法

1.确定函数类

2.求解方程

极小值原理:

求解方程组

定理

特例

四、代码实现

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢



前言

我们知道一般都是从多个点来画出直线,那么如果点的排列并非能够用一条直线来拟合,但是又需要找到这样一条线来拟合多个坐标轴上面的点,那么一般都是采用曲线进行拟合。但是如何在众多密集且离散的分布点中找到一条曲线来尽可能多的去拟合多个点呢?这就需要我们采取相应的算法或者策略。

我们需要使这条直线到各个数据点之间的误差最小且更可能的逼近,那么宏观来看该算法应该是全局最优算法,所以根据此我们使用最小二乘法来拟合离散的点尽可能使这些数据点均在离此曲线的上方或下方不远处。它既能反映数据的总体分布,又不至于出现局部较大的波动。我们现在我们来从零开始探索该算法。

本篇博客的愿景是希望我或者读者通过阅读这篇博客能够学会方法并能实际运用,而且能够记录到你的思想之中。希望读者看完能够提出错误或者看法,博主会长期维护博客做及时更新。


一、曲线拟合策略

在工程实际应用和科学实验中通过测量得到的一组离散的数据点,为了从中找到两个变量中间的内在规律性,也就是求自变量和因变量之间的近似程度比较好的函数关系式,这类问题有插值法和曲线拟合法。这类问题的插值法和曲线拟合法,当个别数据的误差较大时,插值效果显然是不理想的,而且实验或观测提供的数据个数往往较多,用插值法势必得到次数较高的插值多项式,会出现龙格现象。这时候最优策略就是选择曲线拟合策略了。

一文速学-最小二乘法曲线拟合算法详解+项目代码

 我们从数据出发构造一个近似函数,只要求所得的近似曲线能反映数据的基本趋势,使求得的逼近函数与已知函数从总体上来说偏差的平方和最小,这就是最小二乘法。

二、最小二乘法理论基础

1.残差

原理

要从零基础了解最小二乘法,那么我们需要把支撑最小二乘法的原理和算法搞懂,首先我们要了解什么是残差。我们知道曲线拟合不要求近似曲线严格过所有的数据点,但使求得的逼近函数与已知函数从总体上来说其偏差按某种方法度量达到总体上尽可能最小。那么我们估计的曲线与真实点的差距就是残差。

我们设线性回归模型为一文速学-最小二乘法曲线拟合算法详解+项目代码,其中:

  • Y是有相应变量构成的n维向量
  • X是一文速学-最小二乘法曲线拟合算法详解+项目代码阶设计矩阵
  • 一文速学-最小二乘法曲线拟合算法详解+项目代码维向量
  • 是n维随机变量

回归系数的估计值,拟合值为,其中:

  • ,H为帽子矩阵

则残差为。

特征

在回归分析中,测定值与按回归方程预测的值之差,以表示。残差遵从正态分布。

的标准差,称为标准化残差,以表示。遵从标准正态分布。验点的标准化残差落在(-2,2)区间以外的概率≤0.05。若某一实验点的标准化残差落在(-2,2)区间以外,可在95%置信度将其判为异常实验点,不参与回归直线拟合。

显然,有多少对数据,就有多少个残差。残差分析就是通过残差所提供的信息,分析出数据的可靠性、周期性或其它干扰。

选取策略

通常我们构造拟合曲线,要使得残差 尽可能的小,有3中准则可供选择,具体内容如下:

  • 残差的最大绝对值最小:
  • 残差的绝对值之和最小:
  • 残差的平方和最小:

根据三种准则的具体形式,可以分析出前两种比较简单,而二者都含有绝对值运算,实际应用中不便于操作;基于第三种准则构造的拟合曲线方法便是曲线拟合的最小二乘法。

2.最小二乘原则

定义

我们将残差的平方和最小的原则称为最小二乘原则。

按照最小二乘原则选取拟合曲线的方法,称为最小二乘法。

解法总览

对于如何利用最小二乘法原则来解决问题,我们可以根据我们想要的结果来看:

在某个函数类来寻求一个函数.

一文速学-最小二乘法曲线拟合算法详解+项目代码.使其满足:

,其中一文速学-最小二乘法曲线拟合算法详解+项目代码是函数类中任意函数。是待定常数。

满足上述关系式的函数称为上述最小二乘问题的最小二乘解。

三、最小二乘解法

1.确定函数类

原则:根据实际问题域所给数据点的变化规律确定。

        在实际问题中如何选择基函数是一个复杂的问题,一般要根据问题本身的性质来决定。通常可取的基函数有多项式、三角函数、指数函数。或者数据集可能本身就是一个轨迹点数据集,没有强关联的自变量因变量关系。这是要根据实际问题求解的目标调整算法。

2.求解方程

问题转化为求待定系数使得:

极小值原理:

记,那么我们知道存在极小值的情况,原函数需要存在收敛。

证明函数收敛,则有多元函数极值必要条件有:

一文速学-最小二乘法曲线拟合算法详解+项目代码,其中

一文速学-最小二乘法曲线拟合算法详解+项目代码

求解方程组

对任意函数h(x)和g(x)引入记号:

用向量内积形式表示,可得

一文速学-最小二乘法曲线拟合算法详解+项目代码

即:

上式为求的法方程组,其矩阵的形式为:

由于向量组是线性无关,故上式系数行列式

存在唯一解:于是得到函数的最小二乘解

一文速学-最小二乘法曲线拟合算法详解+项目代码

故得到下列:

定理

对于给定的一组实验数据,互异。在函数类,且线性无关,存在唯一的函数一文速学-最小二乘法曲线拟合算法详解+项目代码使得关系式成立,并且其系数可以通过解法方程组得到。

特例

如取就得到代数多项式一文速学-最小二乘法曲线拟合算法详解+项目代码

一文速学-最小二乘法曲线拟合算法详解+项目代码

最小二乘的法方程为:

一文速学-最小二乘法曲线拟合算法详解+项目代码

四、代码实现

首先进行曲线拟合的话肯定需要数据分析三巨头pandas、numpy和绘图用的matplotlib

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

这里我们使用案例来实现最小二乘法拟合:

在某化学反应里,测得生成物浓度y(%)与时间t(min)的数据:

一文速学-最小二乘法曲线拟合算法详解+项目代码

 一般我们拿到数据都是在excel和csv,直接读取就好了:

df_metric=pd.read_excel('try_test.xlsx')
df_metric

一文速学-最小二乘法曲线拟合算法详解+项目代码 

通过绘制散点图我们很容易看出数据趋势:

x=df_metric['t']
y=df_metric['y']
plot1 = plt.plot(x, y, '*', label='origin data')
plt.title('polyfit')
plt.show()

一文速学-最小二乘法曲线拟合算法详解+项目代码 

在matplotlib库中polyfit函数可以实现多项式拟合,也就是最小二乘拟合:

# 使用polyfit方法来拟合,并选择多项式
z1 = np.polyfit(x, y, 2)
# 使用poly1d方法获得多项式系数,按照阶数由高到低排列
p1 = np.poly1d(z1)
#打印拟合多项式
print(p1)

 一文速学-最小二乘法曲线拟合算法详解+项目代码

当然如果需要精度更高可以增加系数:

# 使用polyfit方法来拟合,并选择多项式
z1 = np.polyfit(x, y, 3)
# 使用poly1d方法获得多项式系数,按照阶数由高到低排列
p1 = np.poly1d(z1)
#打印拟合多项式
print(p1)

一文速学-最小二乘法曲线拟合算法详解+项目代码 

拟合之后对比:

# 求对应x的各项拟合函数值
fx = p1(x)
plot1 = plt.plot(x, y, '*', label='origin data')
plot2 = plt.plot(x, fx, 'r', label='polyfit data')
plt.legend(loc=4)
plt.show()

一文速学-最小二乘法曲线拟合算法详解+项目代码 

当系数更多越精确:

一文速学-最小二乘法曲线拟合算法详解+项目代码

实际问题的解决中测得的数据都不是等精度的。显然,对于精度高、权重大的数据应该给予足够的重视,在计算时,给以足够的权重,在这种情况下就要使用加权最小二乘法。

利用最小二乘法原则上解决了最小二乘法意义下的曲线拟合问题,但在实际问题的解决时,n往往很大,法方程组往往是病态的,因而给求解带来了一定的困难。其中也有相当多的策略去优化该算法。

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。文章来源地址https://www.toymoban.com/news/detail-460922.html


到了这里,关于一文速学-最小二乘法曲线拟合算法详解+项目代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文速学-XGBoost模型算法原理以及实现+Python项目实战

    目录 前言 一、XGBoost模型概述 1.发展历史 2.算法改进之处 1.损失函数 2.分裂点选择 3.剪枝策略 4.正则化 5.学习率 6.提前停止 二、XGBoost算法原理 1.初始化构造目标函数  2.目标函数变换  变换优势总结 3.将树引入目标函数 4.构建最优树(贪心算法) 三、XGBoost实战-贷款违约预测模

    2024年02月03日
    浏览(51)
  • 一文速学-GBDT模型算法原理以及实现+Python项目实战

    目录 前言 一、GBDT算法概述 1.决策树 2.Boosting 3.梯度提升

    2024年01月15日
    浏览(39)
  • Matlab 最小二乘法 拟合平面 (PCL PCA拟合平面)

    最小二乘法 拟合平面是我们最常用的拟合平面的方法,但是有特殊的情况是用这种方法是不能拟合的,后续会加上这种拟合方法(RANSAC)。 matlab 最小二乘拟合平面(方法一) - 灰信网(软件开发博客聚合) 平面方程:Ax+By+Cz+D=0;   1、随机出来一些离散的点    2、将其写成

    2024年02月16日
    浏览(48)
  • 【Matlab】最小二乘法拟合多项式

    在最近的电机项目中,有遇到有传感器数据并不线性的问题,然后想要用最小二乘法做个曲线拟合,反过来去校准不线性的传感器的数据,因此记录一下使用最小二乘法来拟合多项式的曲线的步骤。本篇从最小二乘法的原始公式入手编写M文件,目的是方便使用单片机实现,或

    2023年04月22日
    浏览(46)
  • 最小二乘法的几种拟合函数

    目录 1.最小二乘法的原理和解决的问题 2.最小二乘法的公式解法 2.1  拟合h(x) = a * x 2.2 拟合 h(x) = a0 + a1*x 2.3拟合 h(x) = a0 + a1 *x + a3 * x^3  因为采用矩阵法来进行最小二乘法的函数拟合时,会出现系数矩阵的逆矩阵不存在的情况有一定的局限性,所以本篇对公式法进行简单说明

    2024年02月13日
    浏览(42)
  • C语言编程:最小二乘法拟合直线

    本文研究通过C语言实现最小二乘法拟合直线。 最小二乘法,简单来说就是根据一组观测得到的数值,寻找一个函数,使得函数与观测点的误差的平方和达到最小。在工程实践中,这个函数通常是比较简单的,例如一次函数或二次函数。 汽车上的毫米波雷达可以探测到其他目

    2024年02月12日
    浏览(39)
  • 数值计算大作业:最小二乘法拟合(Matlab实现)

        作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业。      我把最小二乘算法在MATLAB中整合成了一个M函数文件least square fitting.m,直线拟合函数lsf_linear.m,以及抛物线拟合函数lsf_parabolic.m。程序放在文章最后了,需要的同学自取。下文为作业详

    2024年02月07日
    浏览(41)
  • chatgpt赋能python:Python如何拟合直线:使用最小二乘法

    在数据分析和机器学习领域,拟合一个最佳的直线是很常见和有用的。Python中有很多库可以拟合直线,但最小二乘法是其中最常用的一种方法。在本文中,我们将介绍最小二乘法的原理和如何在Python中实现。 最小二乘法是一种常用的回归分析方法,目的是找到一条直线来拟合

    2024年02月08日
    浏览(60)
  • Python实现递归最小二乘法回归模型(RecursiveLS算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 RLS主要是在误差平方和最小的原则基础上, 提出一种解析的拟合模型参数的迭代递推公式;可以实现在新的样本数据到来时, 利用新的样本数据以及

    2024年01月16日
    浏览(59)
  • 一文速学数模-时序预测模型(二)平稳时间序列预测算法和自回归模型(AR)详解+Python代码实现

    目录 前言 一、平稳时间序列预测算法 1.时间序列的分布、均值和协方差函数 概率分布

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包