mumuisapig

前言:插值算法与拟合算法的思想比较接近。两者的区别:拟合问题中不需要曲线一定经过给定的点,拟合问题的目标在于寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(也叫做最小化损失函数)。

在插值算法中,得到的多项式 f ( x ) f(x) f(x)必须经过每一个已知点,如果样本点太多会造成插值多项式太复杂,产生龙格现象。即使使用分段插值的方法固然可以避免龙格现象,但是这样一来为了经过每一个点,多项式的解析式必定十分复杂。但是更多时候,我们更倾向于得到一个确定简洁的曲线(用数学的思维去衡量现实世界,解决问题),尽管这条曲线不能经过所有的样本点,但只要保证误差足够小即可(拟合的思想)。拟合的结果是得到一个确定的曲线.
【例子】

曲线拟合的线性最小二乘法

y = k x + b y=kx+b y=kx+b为例

  1. 几何解释:

    设我们拟合的样本点为 ( x i , y i ) , i = 1 , 2 , ⋯   , n (x_i,y_i),i=1,2,\cdots,n (xi,yi),i=1,2,,n我们设置的拟合曲线为 y = k x + b y=kx+b y=kx+b。问:k和b取何值,样本点与拟合曲线最为接近?

  • 第一种定义:
    y ^ i = k x i + b k ^ i , b ^ i = a r g m i n k , b ( ∑ i = 1 n ∣ y i − y ^ i ∣ ) \begin{aligned} \hat{y}_i=kx_i+b\\ \hat{k}_i,\hat{b}_i=arg min_{k,b}(\sum_{i=1}^{n}|y_i-\hat{y}_i|) \end{aligned} y^i=kxi+bk^i,b^i=argmink,b(i=1nyiy^i)
  • 第二种定义:
    y ^ i = k x i + b k ^ i , b ^ i = a r g m i n k , b ( ∑ i = 1 n ( y i − y ^ i ) 2 ) \begin{aligned} \hat{y}_i=kx_i+b\\ \hat{k}_i,\hat{b}_i=arg min_{k,b}( \sum_{i=1}^{n}(y_i-\hat{y}_i)^2) \end{aligned} y^i=kxi+bk^i,b^i=argmink,b(i=1n(yiy^i)2)
  • 第一种定义有绝对值,不容易求导,因此计算比较复杂。我们往往使用第二种定义,这也正是最小二乘法的思想。

【注】

  • 为什么不用四次方?
    (1)避免极端数据对拟合曲线的影响,极端数据对于四次方来说,影响大。
    (2)最小二乘法得到的结果和MLE极大似然估计一致。
    (3)四次方的计算更加复杂。
  • 为什么不用奇次方?
    误差会正负相抵
  1. 推导过程:

    令拟合值 y ^ i = k x i + b \hat{y}_i=kx_i+b y^i=kxi+b,那么 k ^ , b ^ = a r g m i n k , b ( ∑ i = 1 n ( y i − k x i − b ) 2 ) \hat{k},\hat{b}=arg min_{k,b}(\sum_{i=1}^{n}(y_i-kx_i-b)^2) k^,b^=argmink,b(i=1n(yikxib)2),令 L = ∑ i = 1 n ( y i − k x i − b ) 2 L=\sum_{i=1}^{n}(y_i-kx_i-b)^2 L=i=1n(yikxib)2,先要找出k,b使得L最小。(L在机器学习中被称为损失函数,在回归中也常被称为残差平方和)
    求导:
    { ∂ L ∂ k = − 2 ∑ i = 1 n x i ( y i − k x i − b ) = 0 ∂ L ∂ b = − 2 ∑ i = 1 n ( y i − k x i − b ) = 0 ⇒ { ∑ i = 1 n x i y i = k ∑ i = 1 n x i 2 + b ∑ i = 1 n x i ∑ i = 1 n y i = k ∑ i = 1 n x i + b n \left\{\begin{matrix} \frac{\partial L}{\partial k}=-2\sum_{i=1}^{n}x_i(y_i-kx_i-b)=0\\ \frac{\partial L}{\partial b}=-2\sum_{i=1}^{n}(y_i-kx_i-b)=0 \end{matrix}\right.\Rightarrow \left\{\begin{matrix} \sum_{i=1}^{n}x_iy_i=k\sum_{i=1}^{n}x_i^2+b\sum_{i=1}^{n}x_i\\ \sum_{i=1}^{n}y_i=k\sum_{i=1}^{n}x_i+bn \end{matrix}\right. {kL=2i=1nxi(yikxib)=0bL=2i=1n(yikxib)=0{i=1nxiyi=ki=1nxi2+bi=1nxii=1nyi=ki=1nxi+bn
    k ^ = n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i n ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i , b ^ = ∑ i = 1 n x i 2 ∑ i = 1 n y i − ∑ i = 1 n x i ∑ i = 1 n x i y i n ∑ i = 1 n x i 2 − ∑ i = 1 n x i ∑ i = 1 n x i \hat{k}=\frac{n\sum_{i=1}^{n}x_iy_i-\sum_{i=1}^{n}y_i\sum_{i=1}^{n}x_i}{n\sum_{i=1}^{n}x_i^2-\sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_i},\hat{b}=\frac{\sum_{i=1}^{n}x_i^2\sum_{i=1}^{n}y_i-\sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_iy_i}{n\sum_{i=1}^{n}x_i^2-\sum_{i=1}^{n}x_i\sum_{i=1}^{n}x_i} k^=ni=1nxi2i=1nxii=1nxini=1nxiyii=1nyii=1nxi,b^=ni=1nxi2i=1nxii=1nxii=1nxi2i=1nyii=1nxii=1nxiyi

  2. 如何评价拟合的好坏?

    拟合优度 R 2 R^2 R2

  • 总体平方和SST: S S T = ∑ i = 1 n ( y i − y ˉ ) 2 SST=\sum_{i=1}^{n}(y_i-\bar{y})^2 SST=i=1n(yiyˉ)2
  • 误差平方和SSE: 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(yiy^i)2
  • 回归平方和SSR: S S R = ∑ i = 1 n ( y ^ i − y ˉ ) 2 SSR=\sum_{i=1}^{n}(\hat{y}_i-\bar{y})^2 SSR=i=1n(y^iyˉ)2

可以证明: S S T = S S E + S S R SST=SSE+SSR SST=SSE+SSR 要用到我们求导的两个等式
具体证明略。
拟合优度: 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\leq R^2=\frac{SSR}{SST}=\frac{SST-SSE}{SST}=1-\frac{SSE}{SST}\leq 1 0R2=SSTSSR=SSTSSTSSE=1SSTSSE1 R 2 R^2 R2越接近于1,说明误差平方和越小,拟合的越好。
【注】 R 2 R^2 R2只能用于当拟合函数是“线性函数”时拟合结果的评价!
我们这里说的线性函数是指对于参数是线性的!
线性模型中的“线性”主要有两种形式:对变量为线性或者是对参数为线性。
什么叫线性于参数的函数?
在函数中,参数仅以一次方的形式出现,且不能乘以或除以其他任何的参数,并不能出现参数的复合形式的情况。
y = a 1 r 1 ( x ) + a 2 r 2 ( x ) + ⋯ + a m r m ( x ) , { r 1 ( x ) , r 2 ( x ) , ⋯   , r m ( x ) } 线 性 无 关 , 不 是 两 两 线 性 无 关 y=a_1r_1(x)+a_2r_2(x)+\cdots+a_mr_m(x),\left \{ r_1(x),r_2(x),\cdots,r_m(x) \right \}线性无关,不是两两线性无关 y=a1r1(x)+a2r2(x)++amrm(x),{r1(x),r2(x),,rm(x)}线线
【例子】

  • Y = β 1 + β 2 X + β 3 X 2 Y=\beta_1+\beta_2X+\beta_3X^2 Y=β1+β2X+β3X2:是线性于函数,线性于参数。

  • Y = e β 1 + β 2 X Y=e^{\beta_1+\beta_2X} Y=eβ1+β2X:是线性函数,线性于参数(两边同时取对数)。

  • y = a + b 3 x y=a+b^3x y=a+b3x:并非线性于参数,不可以用 R 2 R^2 R2

  • y = a ( x − b ) 2 y=a(x-b)^2 y=a(xb)2:并非线性与参数,不能用 R 2 R^2 R2

    【衡量取舍】
    一般来说,拟合函数的次数越高,越复杂,拟合的误差平方和越小(拟合优度也 越好),但是另一方面,我们又追求拟合函数的间简洁性,且次数越高,龙格现象越严重,所以不能一味的追求误差平方和的减少,要综合两方面考虑,选出最优的拟合方案。

  1. 使用matlab的拟合工具箱cftcool
    强大的matlab拟合工具箱:可以自定义拟合函数或者使用指数,多项式,傅里叶等函数进行拟合
  • 关于如何产生模拟数据?
    (1)randi:产生均匀分布的随机整数。

    %产生一个1至10之间的随机矩阵,大小为25
    s1=randi(10,2,5);
    disp(s1)
    %产生一个-5到5之间的随机矩阵,大小为1
    10
    s2=randi([-5,5],1,10);
    disp(s2)

mumuisapig_第1张图片

mumuisapig_第2张图片(2)rand:产生均匀分布的整数。

%产生一个0至1之间的随机矩阵,大小为15
s3=rand(1,5);
s3
%产生一个a至b之间的随机矩阵,大小为1
5
%a+(b-a)*rand(1,5)
s4=2+(5-2)*rand(1,5);
s4

mumuisapig_第3张图片(3)normrnd:产生正态分布的随机数

%产生一个均值为0,标准差为2的正态分布的随机矩阵,大小为3*4
s5=normrnd(0,2,3,4)

mumuisapig_第4张图片(4)roundn:任意位置四舍五入
Round to multiple of 1 0 n 10^n 10n

a=3.1415;
roundn(a,-2)%3.1400
roundn(a,2)%0
b=31415;
roundn(b,2)%31400

最小二乘优化

在无约束最优化问题中,有些重要的情形,比如目标函数由若干个函数的平方和构成,这类函数一般可以写成 F ( x ) = ∑ i = 1 m f i 2 ( x ) , x ∈ R n F(x)=\sum_{i=1}^{m}f^2_i(x),x\in R^n F(x)=i=1mfi2(x),xRn式中: x = [ x 1 , ⋯   , x n ] T x=[x_1,\cdots,x_n]^T x=[x1,,xn]T,一般假设 m ≥ n m\geq n mn
我们把极小化这类函数的问题 m i n    F ( x ) = ∑ i = 1 m f i 2 ( x ) min\;F(x)=\sum_{i=1}^{m}f^2_i(x) minF(x)=i=1mfi2(x)称为最小二乘法优化问题。
最小二乘优化是一类比较特殊的优化问题,Matlab中也提供了强大的函数,主要有:lsqlin,lsqcurvefit,lsqnonlin,lsqnonneg等。

  1. lsqlin函数
    用于求解 m i n x    1 2 ∣ ∣ C ⋅ x − d ∣ ∣ 2 min_x\;\frac{1}{2}||C\cdot x-d||^2 minx21Cxd2
    s . t . { A x ˙ ≤ b , A e q x ˙ = b e q , l b ≤ x ≤ u b s.t.\left\{\begin{matrix} A\dot x\leq b,\\ Aeq\dot x=beq,\\ lb\leq x\leq ub \end{matrix}\right. s.t.Ax˙b,Aeqx˙=beq,lbxub式中:C,A,Aeq为矩阵;d,b,beq,lb,ub,x为向量。
    函数形式: x = l s q l i n ( C , d , A , b , A e q , b e q , l b , u b , x 0 ) x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x_0) x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
    【例子】用最小二乘法求一个形如 y = a + b x 2 y=a+bx^2 y=a+bx2的经验公式,使它与表中所列数据拟合。

    x 19 25 31 38 41
    y 19.0 32.3 49.0 73.3 97.8

    ( y ^ i − y i ) 2 = ( a + b x i 2 − y i ) 2 (\hat{y}_i-y_i)^2=(a+bx_i^2-y_i)^2 (y^iyi)2=(a+bxi2yi)2
    令 X = [ a , b ] , C = [ o n e s ( s i z e ( X ) ) , X ] 令X=[a,b],C=[ones(size(X)),X] X=[a,b],C=[ones(size(X)),X]
    编写程序如下:

x=[19 25 31 38 44]';
y=[19.0 32.3 49.0 73.3 97.8]';
r=[ones(5,1),x.^2];
ab=lsqlin(r,y);
ab
x0=19:0.1:44;
y0=@(x)ab(2)*x.^2+ab(1);%y0=0.05*x.^2+0.9726
plot(x,y,'ro',x0,y0(x0),'b-')

mumuisapig_第5张图片
2. lsqcurvefit函数
给定输入输出数列xdata,ydata(也就是已知点的横坐标和纵坐标),求参量x,使得: m i n x    ∣ ∣ F ( x , x d a t a ) − y d a t a ∣ ∣ 2 2 = ∑ i = 1 n ( F ( x , x d a t a i ) − y d a t a i ) 2 min_x\;||F(x,xdata)-ydata||_2^2=\sum_{i=1}^{n}(F(x,xdata_i)-ydata_i)^2 minxF(x,xdata)ydata22=i=1n(F(x,xdatai)ydatai)2Matlab中的函数为:x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
x0是拟合参数的初始值。
【例子】用最小二乘法拟合 y = 1 2 π σ e − ( x − μ ) 2 2 σ 2 y=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu )^2}{2\sigma^2}} y=2π σ1e2σ2(xμ)2中的未知参数 μ , σ \mu,\sigma μ,σ,其中自己模拟产生已知数据点 x i , y i , ( i = 1 , 2 , ⋯   , n ) x_i,y_i,(i=1,2,\cdots,n) xi,yi,(i=1,2,,n)分别放在Matlab数据文件data3.mat中的x0,y0中。
(1)产生data3.mat文件。

x0=-10:0.1:10;
y0=normpdf(x0,0,1);%计算标准正态分布mu=0,sigma=1的概率密度函数在x0处的值
save data3 x0 y0%把x0,y0保存到文件data3.mat中

(2)拟合参数

x0=-10:0.1:10;
y0=normpdf(x0,0,1);%计算标准正态分布mu=0,sigma=1的概率密度函数在x0处的值
save data3 x0 y0%把x0,y0保存到文件data3.mat中

clc,clear
load data3
mf=@(cs,xdata)1/sqrt(2*pi)/cs(2)*exp(-(xdata-cs(1)).^2/2/cs(2).^2);
yc=mf([2,1],2)%测试一下,yc=0.3989
cs=lsqcurvefit(mf,rand(2,1),x0,y0)%拟合参数的初始值是任意取的cs=[0,1]
  1. lsqnonlin函数
    已知函数向量 F ( x ) = [ f 1 ( x ) , ⋯   , f k ( x ) ] T F(x)=[f_1(x),\cdots,f_k(x)]^T F(x)=[f1(x),,fk(x)]T,求x使得 m i n x    ∣ ∣ F ( x ) ∣ ∣ 2 2 min_x\;||F(x)||_2^2 minxF(x)22,Matlab中的函数为:x=lsqnonlin(fun,x0,lb,ub,options)
    其中:fun是定义向量函数 F ( x ) F(x) F(x)的M文件;x0是拟合参数x的初始值,可以任意取。
    【正态分布的例子】
    这里 F ( x ) F(x) F(x)去做误差向量, x = [ μ , σ ] T x=[\mu,\sigma]^T x=[μ,σ]T为要拟合的参数向量
clc,clear
load data3
F=@(cs)1/sqrt(2*pi)/cs(2)*exp(-(x0-cs(1)).^2/2/cs(2).^2)-y0;
cs0=rand(2,1);
cs=lsqnonlin(F,cs0)%cs=[0,1]
  1. lsqnonneg函数
    求解非负的参数x,使得 m i n x    ∣ ∣ C x − d ∣ ∣ 2 2 min_x\;||Cx-d||_2^2 minxCxd22Matlab中的函数为:x=lsqnonneg(C,d,options)
    使用方法同lsqlin函数。
  2. 使用Matlab工具箱cftool

你可能感兴趣的:(数学建模)