曲线拟合——最小二乘拟合(附代码)

曲线拟合——最小二乘拟合(附代码)

  • 曲线拟合
  • 1 一元函数的最小二乘拟合
    • 1.1 线性回归(直线的最小二乘拟合)
      • 1.1.1 直线的最佳拟合方法
      • 1.1.2 如何计算
      • 1.1.3 误差量化分析
    • 1.2 多项式回归(多项式的最小二乘拟合)
      • 1.2.1 推导过程和计算方法
      • 1.2.2 误差量化分析
  • 2 多元函数的最小二乘拟合
    • 2.1 多元线性回归
      • 2.1.1 推导过程和计算方法
      • 2.1.2 误差量化分析
    • 2.2 多元多项式回归?
  • 3 线性回归小结
    • 线性最小二乘的一般矩阵形式
  • 4* 非线性回归
    • 4.1 非线性关系的线性化
    • 4.2* (真正的)非线性回归
  • 5 附录(伪代码及C++实现)
    • 5.1 一元线性回归算法
      • 5.1.1 伪代码
      • 5.1.2 C++实现
    • 5.2 一元多项式回归算法
      • 5.2.1 算法步骤
      • 5.2.2 C++实现代码

曲线拟合

先介绍一下拟合和插值的区别。插值,插值曲线必须经过所给定的插值点;拟合,拟合曲线不一定必须经过所给定的点。
(很多书里面对拟合、插值和逼近定义时讲,拟合包含:插值和逼近。这种说法对不对这里不做辩论,我只讲拟合和插值的方法与实现。)

拟合又包括一元函数和多元函数的拟合,通俗的讲,就是对一个变量(一维)和多个变量(多维)拟合的区别。对一个变量拟合叫曲线拟合,对两个变量的拟合可以称为曲面拟合。

本文主要讲一元函数的拟合(曲线拟合),包括直线的最小二乘拟合和多项式的最小二乘拟合;和多元函数的线性最小二乘拟合,对于非线性拟合会简单提及。

ps:关于非线性拟合,由于方法不太一样,会在另一篇文章中非线性回归——非线性函数最小二乘拟合讲到;关于函数插值,后续也会有更新。

1 一元函数的最小二乘拟合

1.1 线性回归(直线的最小二乘拟合)

1.1.1 直线的最佳拟合方法

根据一组二维坐标点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) … ( x n , y n ) (x_1, y_1), (x_2, y_2), (x_3, y_3)…(x_n, y_n) (x1,y1),(x2,y2),(x3,y3)(xn,yn),将其进行拟合成一条直线。直线的数学表达式为:
y = a 0 + a 1 x y = a_0+a_1x y=a0+a1x
其中, a 0 a_0 a0 a 1 a_1 a1为系数,分别表示截距和斜率。

给定若干个点坐标,可以有很多种拟合成直线的方式,哪一种拟合效果最好呢?
如下图所示,给定7个点,随意给出了几种拟合直线,如黑色、蓝色、紫色三条直线,哪一条效果最理想?如何衡量拟合结果好坏呢?
在这里插入图片描述

这里我们给出一个定义:误差(或残差)。
误差(或残差),就是y的真实值与由线性方程预测的近似值 a 0 + a 1 x a_0+a_1x a0+a1x之差。用 e e e表示,可得: e = y − a 0 − a 1 x e=y-a_0-a_1x e=ya0a1x

“最佳”拟合准则:通过数据点拟合一条“最佳”直线,使所有数据点的残差的平方和最小。

之所以选用残差的平方和最小,是因为:如果选残差的和最小,或者残差的绝对值之和最小,都会导致拟合效果不好,且结果不唯一。具体如下:

  1. 如果选残差的和最小:如图(a)所示,它描述的是对两个点的直线拟合结果。显然,最佳拟合的结果就是连接这两个点的直线。然而,任何通过连线中点的直线(除了正好与连线垂直的直线外)都能使式(17.2)的结果为0,因为这样的直线与两个点的误差刚好大小相等但符号相反,所以刚好抵销了。
    在这里插入图片描述
  2. 如果残差的绝对值之和最小:图(b)说明了为什么这个准则还是不充分的。对于图中的四个点,位于两条虚线之间的任何直线,都会使上式中的绝对值之和最小。因此,使用这个准则也不能得到唯一的最优拟合直线。
    在这里插入图片描述
    啰嗦了这么多,最后我们终于选定了将残差的平方和最小作为“最佳”拟合准则。
    也就是使Sr的值最小:
    在这里插入图片描述

1.1.2 如何计算

那么怎么计算直线的系数 a 0 a_0 a0 a 1 a_1 a1,才能保证直线最优呢。
方法如下:
在这里插入图片描述
令这些偏导数等于0,就可以得到残差平方和Sr的一个最小值。令这些偏导数等于0后,上面的方程
变为:
在这里插入图片描述
在这里插入图片描述
联立解方程组可得:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1.3 误差量化分析

残差的平方和Sr为:
在这里插入图片描述
引入回归直线的“标准差”的概念和计算公式:
在这里插入图片描述
此外,还有“相关系数”也用来衡量直线拟合好坏(感兴趣可以查阅相关资料了解),如下:
在这里插入图片描述
其中, S t S_t St表示因变量(在本例中为 y i y_i yi)的均值的误差平方和,即 S t = ∑ i = 1 n ( y i − y ˉ ) 2 S_t = \sum_{i=1}^{n} {(y_i-\bar{y})^2} St=i=1n(yiyˉ)2 y ˉ \bar{y} yˉ y i y_i yi的平均值。

本文在最后附录里面给出了一元线性回归的伪代码及C++实现,可供参考。

1.2 多项式回归(多项式的最小二乘拟合)

1.2.1 推导过程和计算方法

最小二乘过程很容易推广到用史高阶多项式拟合数据的情况。例如,假设要拟合一个二次多项式:
y = a 0 + a 1 x + a 2 x 2 y = a_0+a_1x+a_2x^2 y=a0+a1x+a2x2
残差平方和Sr计算为:
S r = ∑ i = 1 n ( y i − a 0 − a 1 x − a 2 x 2 ) 2 S_r = \sum_{i=1}^{n} {(y_i-a_0-a_1x-a_2x^2)^2} Sr=i=1n(yia0a1xa2x2)2

对该式关于多项式的每个未知系数取导数,得到:
在这里插入图片描述
令导数为0,整理后得到:
在这里插入图片描述
方程组3个方程是线性的,有3个未知数: a 0 a_0 a0, a 1 a_1 a1 a 2 a_2 a2,可以通过解方程组得到 a 0 a_0 a0, a 1 a_1 a1 a 2 a_2 a2的值。

二次多项式的情况很容易推广到m次多项式的情况:
y = a 0 + a 1 x + a 2 x 2 + … + a m x m y = a_0+a_1x+a_2x^2+…+a_mx^m y=a0+a1x+a2x2++amxm
残差平方和Sr计算为:
S r = ∑ i = 1 n ( y i − a 0 − a 1 x − a 2 x 2 − … − a m x m ) 2 S_r = \sum_{i=1}^{n} {(y_i-a_0-a_1x-a_2x^2-…-a_mx^m)^2} Sr=i=1n(yia0a1xa2x2amxm)2
同样求偏导令其为0,可以得到m+1个线性方程的方程组,联立解线性方程组可以得到系数 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, … , a m a_m am的值。

1.2.2 误差量化分析

同样,标准差的计算公式为:
在这里插入图片描述
“相关系数”计算公式如下:
在这里插入图片描述
其中, S t S_t St表示因变量(在本例中为 y i y_i yi)的均值的误差平方和,即 S t = ∑ i = 1 n ( y i − y ˉ ) 2 S_t = \sum_{i=1}^{n} {(y_i-\bar{y})^2} St=i=1n(yiyˉ)2 y ˉ \bar{y} yˉ y i y_i yi的平均值。

本文在最后附录里面给出了一元多项式回归的伪代码,可供参考。

2 多元函数的最小二乘拟合

2.1 多元线性回归

2.1.1 推导过程和计算方法

对于两个或多个自变量的情况,就是一个自变量的推广。对于两个自变量(二维)的情况,回归“直线”就变成了回归“平面”,如下图所示:
在这里插入图片描述
对于两个自变量的情况,设方程为:
y = a 0 + a 1 x 1 + a 2 x 2 y = a_0+a_1x_1+a_2x_2 y=a0+a1x1+a2x2

同样的,残差平方和Sr计算为:
S r = ∑ i = 1 n ( y i − a 0 − a 1 x 1 − a 2 x 2 ) 2 S_r = \sum_{i=1}^{n} {(y_i-a_0-a_1x_1-a_2x_2)^2} Sr=i=1n(yia0a1x1a2x2)2

在这里插入图片描述
令这些偏微分的值等于零,并采用矩阵形式表示,可得:
在这里插入图片描述
解该线性方程组可以得到系数 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2的值。

同样的,前面的二维情况很容易扩展到m维,即:
y = a 0 + a 1 x 1 + a 2 x 2 + … + a m x m y = a_0+a_1x_1+a_2x_2+…+a_mx_m y=a0+a1x1+a2x2++amxm
也是同样的求偏微分,令其为0,解线性方程组,从而得到系数 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, … , a m a_m am的值。

2.1.2 误差量化分析

多元函数线性回归的标准差的计算公式,于一元函数多显示回归的一模一样;相关系数计算公式也一样。

标准差的计算公式:
在这里插入图片描述
“相关系数”计算公式:
在这里插入图片描述
其中, S t S_t St表示因变量(在本例中为 y i y_i yi)的均值的误差平方和,即 S t = ∑ i = 1 n ( y i − y ˉ ) 2 S_t = \sum_{i=1}^{n} {(y_i-\bar{y})^2} St=i=1n(yiyˉ)2 y ˉ \bar{y} yˉ y i y_i yi的平均值。

2.2 多元多项式回归?

很多人想着,既然有一元线性回归,有一元多项式回归,有多元线性回归,那是不是应该也有多元多项式回归

答案却是,不存在的。或者说,大多数书里面是没有的。

细细思考一下,就知道,多元多项式回归?其实没那么简单:
如果说,
一元线性回归,有一个变量 x x x,两个系数 a 0 a_0 a0, a 1 a_1 a1
一元多项式回归,有一个变量 x x x,m+1个系数 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, … , a m a_m am
多元线性回归,有m个变量 x 1 x_1 x1, x 2 x_2 x2, x 3 x_3 x3, … , x m x_m xm,m+1个系数 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, … , a m + 1 a_{m+1} am+1
那么,对于多元线性回归,如果m个变量相互独立(就是不存在 x i p x j q {x_i}^p{x_j}^q xipxjq这种形式),那么对于m个变量的n次多项式,也会存在m*n+1个系数,解方程组计算量庞大;而如果m个变量不相互独立,那就更。。。复杂了。

3 线性回归小结

线性最小二乘的一般矩阵形式

前面介绍了三种类型的回归方法:简单线性回归、多项式回归和多元线性回归。

事实上,这三种回归方法都属于一般形式的线性最小了二乘模型:
y = a 0 + a 1 z 1 + a 2 z 2 + … + a m z m y = a_0+a_1z_1+a_2z_2+…+a_mz_m y=a0+a1z1+a2z2++amzm
其中, z 1 , z 2 , … , z m z_1, z_2, …,z_m z1,z2,,zm为m个基函数(basis function) 。

很容易看出,简单线性回归和多元线性回归归为这个模型;如果基函数是简单的单项式,即: z 1 = x 1 , z 2 = x 2 , … , z m = x m z_1=x^1, z_2=x^2, …,z_m=x^m z1=x1,z2=x2,,zm=xm,那么多项式回归也可以归为该类模型。

若将给定的n个点坐标代入 y = a 0 + a 1 z 1 + a 2 z 2 + … + a m z m y = a_0+a_1z_1+a_2z_2+…+a_mz_m y=a0+a1z1+a2z2++amzm,可得到n个线性方程组,表示为矩阵的形式:
Y = [ Z ] A {Y}=[Z]{A} Y=[Z]A
在这里插入图片描述
其中,m是模型中变量的个数,n是数据点的个数。
在这里插入图片描述
因为大多数情况下,n>m+1,所以[Z]不是一个方阵。因此,这个方程组属于过约束,不能直接求解。要计算相对条件下的最优解,就是使残差平方和最小的解。

而模型的残差平方和可以定义如下:
在这里插入图片描述
同样的,为了使Sr达到最小,需要对关于该式的每个系数 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, … , a m + 1 a_{m+1} am+1取偏导数,并令得到的每个方程等于0。于是可以表示成如下简洁的矩阵形式:
在这里插入图片描述
然后求解该方程组,即可得到系数 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, … , a m + 1 a_{m+1} am+1的值。
(感兴趣的可以用前面介绍的简单线性回归、多项式回归及多元线性的函数来验证。)

4* 非线性回归

4.1 非线性关系的线性化

非线性模型中有3种类型可以线性化:指数方程,幂方程,饱和增长率方程。分别如下:
1.指数方程:
y = a 1 e a 2 x y = a_1e^{a_2x} y=a1ea2x
2.幂方程:
y = a 1 x a 2 y = a_1x^{a_2} y=a1xa2
2.饱和增长率方程:
y = a 1 x x + a 2 y = a_1\frac{x}{x+a_2} y=a1x+a2x

对上述3种形式,可取自然对数将其线性化,结果如下:
指数方程取自然对数: l n y = l n a 1 + a 2 x lny = lna_1+a_2x lny=lna1+a2x
lny与x的关系图是一条斜率为a_2,截距为lna_1的直线。

幂方程取10为底的对数: l o g y = l o g a 1 + a 2 l o g x logy = loga_1+a_2logx logy=loga1+a2logx
log y与log x的关系图是一条斜率为 a 2 a_2 a2,截距为 l o g a 1 loga_1 loga1的直线。

饱和增长率方程取自然对数: 1 y = a 2 a 1 1 x + 1 a 1 \frac{1}{y} = \frac{a_2}{a_1}\frac{1}{x}+\frac{1}{a_1} y1=a1a2x1+a11
于是, 1 y \frac{1}{y} y1 1 x \frac{1}{x} x1的关系图是一条斜率为 a 2 a 1 \frac{a_2}{a_1} a1a2,截距为 1 a 1 \frac{1}{a_1} a11的直线

然后,采用上面的线性回归的方法处理。

4.2* (真正的)非线性回归

对于如 y = a 1 ( 1 − e − a 2 x ) y = a_1(1-e^{-a_2x}) y=a1(1ea2x)形式的函数,是不能线性化的。
需要用牛顿迭代的方法来处理。具体的可参见:非线性回归——非线性函数最小二乘拟合。

5 附录(伪代码及C++实现)

5.1 一元线性回归算法

5.1.1 伪代码

在这里插入图片描述

5.1.2 C++实现

//直线的最小二乘拟合
LinearFitting(Vector <Point2d> points, double &lineDir, double &lineDis)
{int count = points.size();double sumX = 0, sumY = 0, sumXY = 0, sumSqrX =0, for (int i = 0; i < count; i++){sumX += points[i].x;sumY += points[i].y;sumXY += points[i].x * points[i].y;sumSqrX += points[i].x * points[i].x;}lineDir = (count*sumXY - sumX*sumY)/(count*sumSqrX - sumX*sumX);lineDis = (sumY - lineDir*sumX)/count;//计算回归相关系数double st = 0, sr = 0;double yMid = sumY/n;double xMid = sumX/n;for (int j = 0; j < count; j++){st += (yi - yMid)*(yi - yMid);double tmpe = yi - lineDis - lineDir*xi;sr += tmpe *tmpe;}double Syx = sqrt(sr/count-2);double R2 = (st - sr)/st;	
}

5.2 一元多项式回归算法

5.2.1 算法步骤

在这里插入图片描述

5.2.2 C++实现代码

(待更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253459.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

插值与拟合 (二) : 曲线拟合的线性最小二乘法

目录 1 线性最小二乘法 最小二乘准则 系数 的确定 1.2 函数 的选取 常用的拟合曲线&#xff1a;直线、多项式曲线、双曲线、指数曲线 2 最小二乘法的 Matlab 实现 2.1 解方程组方法 2.2 多项式拟合方法 apolyfit(x0,y0,m) …

最小二乘法多项式曲线拟合及其python实现

最小二乘法多项式曲线拟合及其python实现 多项式曲线拟合问题描述最小二乘法针对overfitting&#xff0c;加入正则项python实现运行结果 多项式曲线拟合问题描述 问题描述&#xff1a;给定一些数据点&#xff0c;用一个多项式尽可能好的拟合出这些点排布的轨迹&#xff0c;并给…

数值分析——曲线拟合的最小二乘法

文章目录 一、曲线拟合的最小二乘原理1. 超定方程组的最小二乘解解题方法&#xff1a; 2. 直线拟合3. 多项式拟合 一、曲线拟合的最小二乘原理 拟合曲线定义&#xff1a;求近似函数 φ(x), 使之 “最好” 的逼近f(x) ,无需满足插值原则. 这就是曲线拟合问题。 &#xff08;时间…

最小二乘法的曲线拟合方法在MATLAB中的实现

一、实验内容 已知一组实验数据如下表&#xff0c;求它的拟合曲线。 x(i)12345 f(i)44.5688.5 w(i)21311 二、程序清单与运行结果 M文件代码如下&#xff1a; function Smypolyfit(X,F,W,m,n) % mypolyfit输出通过最小二乘法求得的拟合曲线并绘图验证 % 例如&#xff1a; …

UFS 1-UFS架构简介1

UFS 1-UFS架构简介 1 UFS是什么&#xff1f;1.1 UFS1.2 一般特征1.2.1 Target performance1.2.2 Target host applications1.2.3 Target device types1.2.4 Topology1.2.5 UFS Layering 1.3 Interface Features1.3.1 Three power supplies1.3.2 Signaling as defined by [MIPI-…

最小二乘法线性拟合和2次曲线拟合算法

最近由于项目要求&#xff0c;应用了最小二乘法线性拟合和2次曲线拟合算法&#xff0c;现总结如下&#xff1a; 最小二乘法线性拟合应用已有的采样时间点&#xff0c;再现这些点所描述的线性变化&#xff0c;即求出一个线性方程yaxb(这个算法的主要问题也就是如何用给定的数据…

数值分析实验四 最小二乘法曲线拟合

一、实验目的 1.使用不同的模型对数据进行最小二乘拟合&#xff1b; 2.分析使用不同模型最小二乘法对数据进行拟合的RMSE(均方根误差)&#xff1b; 3.根据分析结果求出最合理的拟合模型。 二、实验题目 1.用表1-1中的世界人口统计数值估计1980年的人口&#xff0c;求最佳最小…

最小二乘法的拟合原理

一. 最小二乘法的拟合原理 根据《数学指南》书中的解释: 图2 《数学指南》中对最小二乘法的解释 上面这段话&#xff0c;枯燥且无趣&#xff0c;大家不用厌恶&#xff0c;数学向来这个样子。 现在&#xff0c;我们来慢慢认识上面这段话的意思&#xff0c;这句话的意思是说&a…

最小二乘法拟合直线

曲线拟合中最基本和最常用的是直线拟合。设x和y之间的函数关系为&#xff1a; y&#xff1d;abx 式中有两个待定参数&#xff0c;a代表截距&#xff0c;b代表斜率。对于等精度测量所得到的N组数据&#xff08;xi&#xff0c;yi&#xff09;&#xff0c;i&#xff1d;1&#xff…

多项式函数曲线拟合——最小二乘法

多项式函数拟合的任务是假设给定数据由M次多项式函数生成&#xff0c;选择最有可能产生这些数据的M次多项式函数&#xff0c;即在M次多项式函数中选择一个对已知数据以及未知数据都有很好预测能力的函数。 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术…

最小二乘法入门(Matlab直线和曲线拟合)

参考博客&#xff1a;https://blog.csdn.net/wokaowokaowokao12345/article/details/72850143 多的就不多说了&#xff0c;持续脱发中&#xff01;&#xff01;&#xff01; 最小二乘法历史起源之类的&#xff1a;https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E4%BA%8C%…

曲线拟合的最小二乘原理

文章目录 1 什么是最小二乘2 最小二乘原理3 最小二乘应用示例4 法方程到底是什么 1 什么是最小二乘 在科学实验的统计方法研究中&#xff0c;往往要从一组实验数据 ( x i , y i ) ( i 0 , 1 , 2 , … , m ) (x_i,y_i)(i0,1,2,…,m) (xi​,yi​)(i0,1,2,…,m) 中寻找自变量 …

最小二乘法曲线拟合原理

最小二乘法曲线拟合原理 一、最小二乘法原理 对于给定的一组数据&#xff08;xi,yi&#xff09;&#xff0c;假定它满足n次多项式&#xff1a; 为了求取各阶参数的最优解&#xff0c;对于每个xi&#xff0c;通过n次多项式计算的值和yi之间的差值的平方和应该最小&#xff0c…

最小二乘法

1、概述 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术。它通过最小化误差&#xff08;真实目标对象与拟合目标对象的差&#xff09;的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据&#xff0c;并使得这些求得的数据与实际数…

最小二乘法多项式曲线拟合原理与实现

概念 最小二乘法多项式曲线拟合&#xff0c;根据给定的m个点,并不要求这条曲线精确地经过这些点&#xff0c;而是曲线yf(x)的近似曲线y φ(x)。 原理 [原理部分由个人根据互联网上的资料进行总结&#xff0c;希望对大家能有用] 给定数据点pi(xi,yi)&#xff0c;其中i1,2,…,m…

最小二乘法曲线拟合以及Matlab实现

最小二乘法曲线拟合以及Matlab实现 在实际工程中&#xff0c;我们常会遇到这种问题&#xff1a;已知一组点的横纵坐标&#xff0c;需要绘制出一条尽可能逼近这些点的曲线&#xff08;或直线&#xff09;&#xff0c;以进行进一步进行加工或者分析两个变量之间的相互关系。而获…

最小二乘法(least squares)的曲线拟合(curve fitting)

第三十八篇 最小二乘法的曲线拟合 如果我们想得到一个通过大量由实验或者计算机程序获得的数据点的函数,它实际是在寻找一个“最适合”数据的函数,而不是一个完全经过所有点。可以采用各种策略来最小化各个数据点之间的误差和逼近函数。其中最著名的是最小二乘法&#xff0c;它…

曲线拟合——最小二乘法( Ordinary Least Square,OLS)

文章目录 前言一、曲线拟合是什么&#xff1f;二、最小二乘法是什么&#xff1f;三、求解最小二乘法&#xff08;包含数学推导过程&#xff09;四、使用步骤1.引入库2.读入数据 总结 前言 随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都…

最小二乘法进行曲线拟合

工作需求&#xff0c;这里记录一下数值插值和数值分析方面的算法&#xff0c;希望和大家一起进步。 曲线拟合的最小二乘定义 求一条曲线,使数据点均在离此曲线的上方或下方不远处,所求的曲线称为拟合曲线, 它既能反映数据的总体分布,又不至于出现局部较大的波动,更能反映被逼…

最小二乘法的曲线拟合

最小二乘法解决的问题&#xff1a;AxC 无解下的最优解 例子1&#xff1a; 一条过原点的直线OA&#xff0c;C是直线外一点&#xff0c;求C在OA上的投影点P 例子1 例子2&#xff1a; 已知三个不在一条直线上的点A,B,C&#xff0c;求一条直线&#xff0c;使A,B,C到直线的距离和最小…