【数学建模笔记】【第四讲(1)】拟合算法之最小二乘算法及其MATLAB实现

这篇具有很好参考价值的文章主要介绍了【数学建模笔记】【第四讲(1)】拟合算法之最小二乘算法及其MATLAB实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所
有的数据点最为接近,即曲线拟合的最好(最小化损失函数)

【插值和拟合的区别】
插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。
尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到一个确定的曲线,尽管这条曲线不能经过每一个样本点,但只要保证误差足够小即可,这就是拟合的思想。(拟合的结果是得到一个确定的曲线,而插值可以得到很多曲线,只不过是预测精度不大一样)
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归

【结合MATLAB演示最小二乘法拟合】

给定一些数据点:

x y
4.2 8.4
5.9 11.7
2.7 4.2
3.8 6.1
3.8 7.9
5.6 10.2
6.9 13.2
3.5 6.6
3.6 6
2.9 4.6
4.2 8.4
6.1 12
5.5 10.3
6.6 13.3
2.9 4.6
3.3 6.7
5.9 10.8
6 11.5
5.6 9.9

设这些样本点为 ( x i , y i ) , i = 1 , 2 , 3 , … … , n (x_i,y_i),i=1,2,3,……,n (xi,yi),i=1,2,3,……,n
我们设置的拟合曲线为 y = k x + b y=kx+b y=kx+b.
问题在于,当 k k k b b b取何值时,使得样本点和拟合曲线更接近?

我们使用MATLAB先将这些点画在图中:
在MATLAb的变量存储区新建x和y变量,然后把我们的数据复制进去:
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
新建好这两个变量之后,可以把两个变量选中,然后保存在和代码同一个目录的文件夹下,保存为mat文件:
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
这样我们如果删除了这两个变量,仍然可以通过load demo 来加重新加载这两个变量。
通过plot命令可以绘制出这个散点图:
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
那么如何确定拟合曲线呢?这里我们使用最小二乘法。

1.最小二乘法的几何解释:

matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
第一种定义有绝对值,不容易求导,因此计算比较复杂。
所以我们往往使用第二种定义,这也正是最小二乘的思想。

2.为什么不用四次方?

  1. 避免极端数据对拟合曲线的影响。
  2. 最小二乘法得到的结果和MLE极大似然估计一致。
  3. 不用奇数次方的原因:误差会正负相抵。

求解最小二乘法:
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
详细证明可以看我写的超级好的手写版【doge】😎
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归

matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归

matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归

3.MATLAB求解最小二乘:

matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
对应的求 k ^ \hat{k} k^ b ^ \hat{b} b^的MATLAb
代码是:

k = (n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x))
b = (sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x))

求出 k ^ \hat{k} k^ b ^ \hat{b} b^之后就可以画出这个拟合函数 y = k ^ x + b ^ y=\hat{k}x+\hat{b} y=k^x+b^了:

% % 画出y=kx+b的函数图像 plot(x,y)
% % 传统的画法:模拟生成x和y的序列,比如要画出[0,5]上的图形
% xx = 2.5: 0.1 :7  % 间隔设置的越小画出来的图形越准确
% yy = k * xx + b  % k和b都是已知值
% plot(xx,yy,'-')

画图还有一个方法:用匿名函数

% 匿名函数的基本用法。
% handle = @(arglist) anonymous_function
% 其中handle为调用匿名函数时使用的名字。
% arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。
% anonymous_function为匿名函数的表达式。
% 举个小例子
%  z=@(x,y) x^2+y^2; 
%  z(1,2) 
% % ans =  5
% fplot函数可用于画出匿名一元函数的图形。
% fplot(f,xinterval) 将匿名函数f在指定区间xinterval绘图。xinterval =  [xmin xmax] 表示定义域的范围

在此处就可以这样写来画出这个函数:

f=@(x) k*x+b;
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','location','SouthEast')

matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
那么有了拟合函数我们如何判断拟合的好不好呢?

4. 如何评价拟合的好坏(拟合优度)

拟合优度(可决系数) R 2 R^2 R2

  1. 总体平方和 S S T SST SST Total sum of squares : S S T = ∑ i = 1 n ( y i − y i ‾ ) 2 \text{Total sum of squares}:SST=\sum_{i=1}^n(y_i-\overline{y_i})^2 Total sum of squares:SST=i=1n(yiyi)2
  2. 误差平方和 S S E SSE SSE The sum of squares due to error : S S E = ∑ i = 1 n ( y i − y i ^ ) 2 \text{The sum of squares due to error}:SSE=\sum_{i=1}^n(y_i-\hat{y_i})^2 The sum of squares due to error:SSE=i=1n(yiyi^)2
  3. 回归平方和 S S R SSR SSR Sum of squares of the regression: : S S R = ∑ i = 1 n ( y i ^ − y i ‾ ) 2 \text{Sum of squares of the regression:}:SSR=\sum_{i=1}^n(\hat{y_i}-\overline{y_i})^2 Sum of squares of the regression::SSR=i=1n(yi^yi)2

可以证明: S S T = S S R + S S E SST=SSR+SSE SST=SSR+SSE(要用到我们求导得到的两个等式)

拟合优度:
0 < = R 2 = S S R S S T = S S T − S S E S S T = 1 − S S E S S T < = 1 0<=R^2= \frac{SSR}{SST}= \frac{SST-SSE}{SST}=1- \frac{SSE}{SST}<=1 0<=R2=SSTSSR=SSTSSTSSE=1SSTSSE<=1

R 2 R^2 R2越接近1,说明误差平方和越接近0,误差越小说明拟合的越好。

注:

  • R 2 R^2 R2只能用于拟合函数是线性函数时拟合结果的评价,因为 S S T = S S R + S S E SST=SSR+SSE SST=SSR+SSE这个等式只有在拟合函数是线性的时候才成立,其证明如下图
  • 线性函数和其他函数(例如复杂的指数函数)比较拟合的好坏,直接看 S S E SSE SSE即可。
  • 拟合的函数越复杂(比如说次数越高),最后得出的拟合优度肯定是越小,SSE也越小(因为次数越高,到最后可能拟合函数穿过了所有的数据点,SSE就为0了),但是这与拟合的初衷相矛盾了,我们希望用一个简单的函数去打到一个相对很好的拟合效果。所以不要过度追求高阶次,复杂的拟合函数,而是要在简单拟合函数与 R 2 R^2 R2越小之间找到一个平衡点。

证明SST=SSE+SSR:
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归

5.线性函数的定义与介绍

上面谈到了 R 2 R^2 R2只能用于拟合函数是线性函数时拟合结果的评价,那么什么是线性函数呢?只有一次函数是线性函数吗?其实不是的。

思考: y = a + b x 2 y=a+bx^2 y=a+bx2是线性函数吗?
是的。因为我们这里说的线性函数是指对参数为线性(线性于参数)。

matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归

如何判断线性于参数的函数?
在函数中,参数仅以一次方出现,且不能乘以或除以其他任何的参数,并不能出现参数的复合函数形式。

比如下面的三种函数都是线性于参数的函数:
matlab最小二乘法拟合曲线,数学建模笔记,matlab,算法,人工智能,最小二乘法,线性回归
y = a ( x − b ) 2 , y = a s i n ( b + c x ) y=\frac{a}{(x-b)^2},y=asin(b+cx) y=(xb)2a,y=asin(b+cx)等都不是线性于参数的函数,不能使用 R 2 R^2 R2

6.用MATLAB计算拟合优度

  1. S S T = ∑ i = 1 n ( y i − y i ‾ ) 2 SST=\sum_{i=1}^n(y_i-\overline{y_i})^2 SST=i=1n(yiyi)2
  2. S S E = ∑ i = 1 n ( y i − y i ^ ) 2 SSE=\sum_{i=1}^n(y_i-\hat{y_i})^2 SSE=i=1n(yiyi^)2
  3. S S R = ∑ i = 1 n ( y i ^ − y i ‾ ) 2 SSR=\sum_{i=1}^n(\hat{y_i}-\overline{y_i})^2 SSR=i=1n(yi^yi)2
y_hat = k*x+b; % y的拟合值
SSR = sum((y_hat-mean(y)).^2)  % 回归平方和
SSE = sum((y_hat-y).^2) % 误差平方和
SST = sum((y-mean(y)).^2) % 总体平方和
SST-SSE-SSR   % 5.6843e-14  =   5.6843*10^-14   matlab浮点数计算的一个误差
R_2 = SSR / SST

本篇文章就到这里啦,下一篇文章继续讲解MATLAB中拟合函数工具箱的使用。文章来源地址https://www.toymoban.com/news/detail-708069.html

到了这里,关于【数学建模笔记】【第四讲(1)】拟合算法之最小二乘算法及其MATLAB实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数学建模:拟合算法

    数学建模:拟合算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 根据1到12点间的温度数据求出温度与时间之间的近似函数关系 F ( t ) F(t) F ( t ) ,由 F ( t ) F(t) F ( t ) 推断 t =13.5 时的温度。这种根据离散数据求数据间近似函数关系的问题称为 曲线拟合问题 。 拟合问题与插值问题的区别在于

    2024年02月10日
    浏览(9)
  • 【数学建模】清风数模中正课4 拟合算法

    【数学建模】清风数模中正课4 拟合算法

    在插值算法中,我们得到的曲线一定是要经过所有的函数点的;而用拟合所得到的曲线则不一样, 拟合问题中,不需要得到的曲线一定经过给定的点 。 拟合的目的是寻求一个函数曲线,使得该曲线在某种准则下与所有的数据点最为接近,也就是曲线拟合地最好。 为了确定拟

    2024年02月11日
    浏览(10)
  • 数学建模:5 拟合

    数学建模:5 拟合

    目录 最小二乘法  matlab求解最小二乘  评价拟合的好坏 线性函数?  matlab代码求拟合优度 Matlab拟合工具箱  例题  推导: fplot函数 + 匿名函数:画函数图 拟合优度   SST 总体平方和:真实值与平均值之差 SSE 误差平方和:真实值与预测值之差 SSR 回归平方和:预测值与平均

    2024年02月08日
    浏览(12)
  • 数学建模 -- 插值与拟合

    数学建模 -- 插值与拟合

    灰色预测要等时距 已知函数在某区间内若干点处的值,求函数在该区间内其他点处的值。这种问题适合用插值的方法解决。 拉格朗日插值法:用的不多,在边缘处容易出现Runge现象。 高次插值的Runge现象:当插值多项式的次数超过7时,插值多项式会出现严重的震荡现象。 避

    2024年02月13日
    浏览(14)
  • 数学建模——曲线拟合

    数学建模——曲线拟合

     已知一组数据(二维),即平面上n个点       (xi,yi)(i=1,2,…,n), xi互不相同。寻求一个函数y=f(x),使得f(x)在某种准则下与所有的数据点最为接近,即拟合得最好。 线性最小二乘法是解决曲线拟合最常用的方法,基本思路是,令                         其中,r1(x),…,r

    2024年02月12日
    浏览(13)
  • 数学建模——插值与拟合

    数学建模——插值与拟合

    插值与拟合在建模过程中是一种十分重要的方法,由于赛题中给出的数据可能出现缺失,此时就需要用到插值的方式来对数据进行补全,又或者是给出一部分数据,需要你对未来一部分数据进行预测,这个时候就需要用到拟合的相关知识。 在实际中,常常要处理由实验或测量

    2024年02月01日
    浏览(8)
  • 数学建模实验-插值和拟合

    数学建模实验-插值和拟合

    1.  掌握各种数据插值方法的 MATLAB 实现方法; 2.  掌握数据拟合的 MATLAB 实现方法。 1.  已知平面区域 0  ≤  x  ≤  4800  , 0  ≤  y  ≤  5600的高程数据如data5_1.xlsx所示。 试用二维插值求x,y方向间隔都为50m的高程,并画出该区域的等高线图。 表格数据如图: 2. 在一次

    2024年04月12日
    浏览(14)
  • 数学建模——利用模拟数据拟合曲面

    数学建模——利用模拟数据拟合曲面

      我还掌握了numpy库中的reshape函数,收获很大 最后结果:  

    2024年02月16日
    浏览(19)
  • (一)MATLAB数学建模——数据拟合

    目录 一、简介 二、多项式拟合 (一)指令介绍 (二)代码

    2024年02月11日
    浏览(14)
  • 数学建模常用模型(二):插值与拟合

    数学建模常用模型(二):插值与拟合

    在数学建模中,插值和拟合是常用的数据分析技术,用于从给定的离散数据中推断出连续函数或曲线的近似形式。 插值是通过已知数据点之间的插值多项式来估计未知数据点的值。插值方法的目标是在给定数据点上准确地重现原始数据,以便在数据点之间进行插值时获得尽可

    2024年02月12日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包