来自知乎内容:
最小二乘法和梯度下降法有哪些区别?
非线性最小二乘法:
百度百科
非线性最小二乘的求解样例:
转自:LongShaoAn
问题:已知数据X、Y,
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的值,并绘制出函数的曲线。
工具方法:matlab的lsqcurvefit函数。
具体实施:
(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线绘出
(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 = [1;1] %初值
[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.28,x(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)
为何更好的显示拟合的效果,请看下图:
总结:用此函数拟合这些点,效果看起来并不是特别好,如果数据范围比较小,可以尝试别的函数进行拟合。