0


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

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

最小二乘法拟合算法及其MATLAB实现

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

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

给定一些数据点:
xy4.28.45.911.72.74.23.86.13.87.95.610.26.913.23.56.63.662.94.64.28.46.1125.510.36.613.32.94.63.36.75.910.8611.55.69.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变量,然后把我们的数据复制进去:
在这里插入图片描述
在这里插入图片描述
新建好这两个变量之后,可以把两个变量选中,然后保存在和代码同一个目录的文件夹下,保存为mat文件:
在这里插入图片描述
这样我们如果删除了这两个变量,仍然可以通过

load demo

来加重新加载这两个变量。
通过plot命令可以绘制出这个散点图:
在这里插入图片描述
那么如何确定拟合曲线呢?这里我们使用最小二乘法。

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

在这里插入图片描述
第一种定义有绝对值,不容易求导,因此计算比较复杂。
所以我们往往使用第二种定义,这也正是最小二乘的思想。

2.为什么不用四次方?

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

求解最小二乘法:
在这里插入图片描述
详细证明可以看我写的超级好的手写版【doge】😎
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.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')

在这里插入图片描述
那么有了拟合函数我们如何判断拟合的好不好呢?

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​(yi​−yi​​)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​(yi​−yi​^​)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​=SSTSST−SSE​=1−SSTSSE​<=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:
在这里插入图片描述

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

上面谈到了

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

思考:

     y 
    
   
     = 
    
   
     a 
    
   
     + 
    
   
     b 
    
    
    
      x 
     
    
      2 
     
    
   
  
    y=a+bx^2 
   
  
y=a+bx2是线性函数吗?

是的。因为我们这里说的线性函数是指对参数为线性(线性于参数)。

在这里插入图片描述

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

比如下面的三种函数都是线性于参数的函数:
在这里插入图片描述

     y 
    
   
     = 
    
    
    
      a 
     
     
     
       ( 
      
     
       x 
      
     
       − 
      
     
       b 
      
      
      
        ) 
       
      
        2 
       
      
     
    
   
     , 
    
   
     y 
    
   
     = 
    
   
     a 
    
   
     s 
    
   
     i 
    
   
     n 
    
   
     ( 
    
   
     b 
    
   
     + 
    
   
     c 
    
   
     x 
    
   
     ) 
    
   
  
    y=\frac{a}{(x-b)^2},y=asin(b+cx) 
   
  
y=(x−b)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​(yi​−yi​​)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​(yi​−yi​^​)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://blog.csdn.net/Gorege__Hu/article/details/128813992
版权归原作者 兜兜里有好多糖 所有, 如有侵权,请联系我们删除。

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

还没有评论