梯度下降法,最小二乘法求线性回归

来源:互联网 发布:qq表情软件 编辑:程序博客网 时间:2024/05/20 12:49

来自知乎内容:

最小二乘法和梯度下降法有哪些区别?


非线性最小二乘法:

百度百科


非线性最小二乘的求解样例:

转自:LongShaoAn

问题:已知数据XY


      X=[ -0.46,-0.0755,-0.0227,-0.63,-0.435,-0.4]


      Y=[0.595,0.556,0.44,0.53,0.634,0.551];


依照Y=b/(a+X),用最小二乘拟合方法拟合出ab的值,并绘制出函数的曲线。


      工具方法:matlablsqcurvefit函数。


具体实施:


 (1)先大致看一下,此数据的效果,通过命令plot完成。


x=[ -0.46,-0.0755,-0.0227,-0.63,-0.435,-0.4]


y=[0.595,0.556,0.44,0.53,0.634,0.551];


plot(x,y, 'b:o', 'LineWidth',3) %蓝色o线绘出



matlab非线性最小二乘拟合的应用 - 云卷云舒 - 飞龙在天的小窝儿^_^

 (2)通过函数lsqcurvefit进行曲线拟合。

1>构建函数:


function F = myfun(x,xdata)


F= x(1)./(x(2)+xdata);


保持在当前目录下面以myfun.m命名。


2>求取参数ab,这里以x(1)x(2)表示。


xdata=[-0.46,-0.0755,-0.0227,-0.63,-0.435,-0.4];


ydata=[0.595,0.556,0.44,0.53,0.634,0.551];


x0 = [11]  %初值


[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata)


鉴于不同的初值可能得到不同的结果,进行了如下尝试:


初值x0=(1,1)


x(1)=2.2788


x(2)=4.4836


初值x0=(2,2)


x(1)=2.2797


x(2)=4.4851


初值x0=(1,10)


x(1)= 2.2792


x(2)= 4.4842


初值x0=(-1,100)


x(1)=2.2802


x(2)=4.4861


因此我们有理由相信x(1)=2.28x(2)=4.48


因此次多项式可以表示为


y=2.28/(4.48+x)


接下来我们给出此多项式的图形:


x=-5:0.1:5;


y=2.28./(4.48+x)


plot(x,y, 'r', 'LineWidth',3)


matlab非线性最小二乘拟合的应用 - 云卷云舒 - 飞龙在天的小窝儿^_^

 为何更好的显示拟合的效果,请看下图:



matlab非线性最小二乘拟合的应用 - 云卷云舒 - 飞龙在天的小窝儿^_^

 总结:用此函数拟合这些点,效果看起来并不是特别好,如果数据范围比较小,可以尝试别的函数进行拟合。


0 0