1、1最小二乘法在线性回最小二乘法在线性回归和非线性回归中的归和非线性回归中的应用应用长沙理工大学-电气与信息工程学院电子科学与技术讲解:王可煜 方云熠2什么是最小二乘法?什么是最小二乘法?最小二乘法是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小.3线性回归线性回归在统计学中,线性回归在统计学中,线性回归(LinearRegression)是利用称为线性是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种
2、回归分析。这种函数是一个或多个间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归情况称为简单回归,大于一个自变量情况的叫做多元回归。大于一个自变量情况的叫做多元回归。回归分析中,只包括一个自变量和一个因变量,且二者的回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变
3、量之间是线性关系,则称为多元线性回归且因变量和自变量之间是线性关系,则称为多元线性回归分析。分析。4非线性回归非线性回归有一类模型,其回归参数不是线性的,也不能通过转换的方法将其变为线性的参数。这类模型称为非线性回归模型。在许多实际问题中,回归函数往往是较复杂的非线性函数。非线性函数的求解一般可分为将非线性变换成线性和不能变换成线性两大类。这里主要讨论可以变换为线性方程的非线性问题。56两变量间的关系两变量间的关系确定性关系:两变量间的函数关系确定性关系:两变量间的函数关系圆的周长与半径的关系:C=2R速度时间与路程的关系:L=ST非确定性关系:两变量在宏观上存在关系,非确定性关系:两变量在宏
4、观上存在关系,但并未精确到可以用函数关系式来表达。但并未精确到可以用函数关系式来表达。青少年的升高与年龄关系升高与体重的关系药物浓度与反应率的关系78多元函数极值存在必要条件9多元线性回归多元线性回归第一步:先选定一组函数先选定一组函数r1(x),r2(x),rm(x),mn,令令f(x)=a1r1(x)+a2r2(x)+amrm(x)(1)其中其中a1,a2,am为待定系数。为待定系数。第二步:确定确定a1,a2,am的准则(最小二乘准则):的准则(最小二乘准则):使使n个点个点(xi,yi)与与曲线曲线 y=f(x)的距离的距离 i的平方和最小的平方和最小。记记问题归结为,求问题归结为,求
5、a1,a2,am 使使J(a1,a2,am)最小。最小。10线性最小二乘法的求解:预备知识线性最小二乘法的求解:预备知识超定方程组超定方程组:方程个数大于未知量个数的方程组:方程个数大于未知量个数的方程组即即Ra=y其中其中超定方程一般是不存在解的矛盾方程组。超定方程一般是不存在解的矛盾方程组。如果有向量如果有向量a使得使得达到最小,达到最小,则称则称a为上述为上述超定方程的最小二乘解超定方程的最小二乘解。11线性最小二乘法的求解线性最小二乘法的求解 定理:定理:当当R RT TR R可逆时,超定方程组(可逆时,超定方程组(3 3)存在最小二乘解,)存在最小二乘解,且即为方程组且即为方程组 R
6、 RT TRa=RRa=RT Ty y的解:的解:a=(Ra=(RT TR)R)-1-1R RT Ty y所以,曲线拟合的最小二乘法要解决的问题,实际上就是所以,曲线拟合的最小二乘法要解决的问题,实际上就是求以下超定方程组的最小二乘解的问题。求以下超定方程组的最小二乘解的问题。其中其中Ra=y(3)最最小小二二乘乘法法原原理理是是用用来来求求解解线线性性方方程程组组的的,非非线线性性方方程程经经线线性性化化后后方方可可应应用用该该原原理理。通通常常在在测测量量中中遇遇到到的的问问题题不不一一定定都都是是线线性性问问题题,必必须须先先把把非非线性问题线性化,然后求解。线性问题线性化,然后求解。1
7、2非线性回归非线性回归13一、有时,我们希望用如下类型的函数:一、有时,我们希望用如下类型的函数:去近似一个由一组观测数据(列表)所描绘的函数,其去近似一个由一组观测数据(列表)所描绘的函数,其中中p 和和q 是待定的两个参数是待定的两个参数.显然显然s已非已非p和和q的线性函数的线性函数.怎怎样线性化呢?为此,我们在等式两端取对数,得到样线性化呢?为此,我们在等式两端取对数,得到 记记则等式变成则等式变成这是一个一次多项式,它的系数和可以用最小二乘法求得这是一个一次多项式,它的系数和可以用最小二乘法求得.14二、我们经常希望用函数二、我们经常希望用函数去近似一个以给定的列表函数,其中去近似一
8、个以给定的列表函数,其中A,C是待定的参数,这时,我们可以对是待定的参数,这时,我们可以对等式的两端取对数等式的两端取对数记记则等式变成则等式变成这样仍可用最小二乘法定出(从而也就定这样仍可用最小二乘法定出(从而也就定出了出了A,C),得到近似函数),得到近似函数15下面列出几种常用的线性处理方法,利用最小下面列出几种常用的线性处理方法,利用最小二乘法的原理对直线型、抛物线型和指数曲线二乘法的原理对直线型、抛物线型和指数曲线型的方程的参数估计方法型的方程的参数估计方法。16直线型直线型直线方程的一般形式为:直线方程的一般形式为:令令为最小值,分别为为最小值,分别为a和和b求偏导数,并令导数等于
9、求偏导数,并令导数等于0,得到联立方程组。解,得到联立方程组。解方程组,即可得到参数的计算公式方程组,即可得到参数的计算公式。17抛物线型抛物线型抛物线方程的一般形式为抛物线方程的一般形式为令令为最小值,分别为为最小值,分别为a、b、c求求偏导数偏导数,并令导数等于并令导数等于0,得到联立方程组解方程组得到联立方程组解方程组,即即可得到参数的计算公式。可得到参数的计算公式。18指数曲线型指数曲线型指数曲线的一般形式为指数曲线的一般形式为取对数,将指数曲线转化成对数直线形式取对数,将指数曲线转化成对数直线形式用最小二乘法估计参数用最小二乘法估计参数a,b,可有如下方程组可有如下方程组解此方程组,
10、可得参数的对数值,查其反对数,即解此方程组,可得参数的对数值,查其反对数,即可得参数值。可得参数值。19用用MATLAB解回归问题解回归问题1 1、线性最小二乘拟合、线性最小二乘拟合2 2、非线性最小二乘拟合、非线性最小二乘拟合20用用MATLAB作线性最小二乘拟合作线性最小二乘拟合1.1.作多项式作多项式f(x)=a1xm+amx+am+1拟合拟合,可利用已有程序可利用已有程序:a=polyfit(x,y,m)2.2.对超定方程组对超定方程组可得最小二乘意义下的解。可得最小二乘意义下的解。,用,用3.3.多项式在多项式在x x处的值处的值y y可用以下命令计算:可用以下命令计算:y=poly
11、valy=polyval(a a,x x)输入同长度输入同长度的数组的数组X,Y拟合多项拟合多项式次数式次数左除21首先求二次多项式拟合首先求二次多项式拟合:中中的的使得使得:例例对湖南省近对湖南省近10年来(年来(2006-2015)的生产总值)的生产总值(GDP)作)作m次多项式拟合次多项式拟合22利用利用MATLABMATLAB编程并仿真(二次拟合)编程并仿真(二次拟合)clearall;closeall;x=2006:1:2015;y=7689,9440,11555,13060,16038,19670,22154,24622,27037,29047.2;%plot,x,y,o);hol
12、donp=polyfit(x,y,2);Y=polyval(p,x);plot(x,Y,r-,x,y,o);xlabel(x-年份);ylabel(y-亿元);title(湖南省GDP);r=y-Y;e=r*r;程序法一(利用现成的函数):23p=33.0311,-1.3032e+05,1.2852e+08残差平方和:残差平方和:e=2.8924e+06程序一仿真结果:24clearall;closeall;n=input(n=?);%多项式次数即拟合曲线次数%x=1,2,3,4,5,6,7,8,9,10;b=2006:1:2015;x=b;y=7689,9440,11555,13060,16
13、038,19670,22154,24622,27037,29047.2;%plot(x,y,ro);%X=x.*x,x,ones(size(x);%p=polyfit(x,y,m)X(:,n+1)=ones(length(x),1,class(x);forj=n:-1:1X(:,j)=x.*X(:,j+1);%提取第j列元素从j=n最后一列开始endp=Xy;%多项式系数%Y=polyval(p,x);Y=X*p;r=y-Y;e=r*r;plot(x,Y,-,x,y,ro);xlabel(x)ylabel(y)title(曲线拟合)程序法二(未借用函数):2525p=33.0311,-1.30
14、32e+05,1.2852e+08残差平方和:残差平方和:e=2.8924e+06程序二仿真结果:(n=2)两个程序得出的结论是一致的!26五次多项式拟合五次多项式拟合p=polyfit(x,y,5);p=polyfit(x,y,m)m=5仿真结果仿真结果残差平方和:e=4.149e+05p=2.1092,-2.1203e+04,8.5263e+07,-1.7143e+11,1.7234e+14,-6.9300e+16残差平方和:残差平方和:e=4.149e+05271.lsqcurvefit1.lsqcurvefit已知数据点数据点:xdata=xdata=(xdata1,xdata2,xd
15、ataxdatan n),),ydata=ydata=(ydataydata1 1,ydataydata2 2,ydataydatan n)用用MATLAB作非线性最小二乘拟合作非线性最小二乘拟合 Matlab Matlab的提供了两个求非线性最小二乘拟合的函数:的提供了两个求非线性最小二乘拟合的函数:lsqcurvefitlsqcurvefit和lsqnonlinlsqnonlin。两个命令都要先建立。两个命令都要先建立M-M-文件文件fun.mfun.m,在其中定义函数,在其中定义函数f(x)f(x),但两者定义,但两者定义f(x)f(x)的方式是不同的的方式是不同的,可可参考例题参考例题
16、lsqcurvefitlsqcurvefit用以求含参量用以求含参量x x(向量)的向量值函数(向量)的向量值函数F(x,xdata)=F(x,xdata)=(F F(x x,xdataxdata1 1),),F F(x x,xdataxdatan n)T T中的参变量中的参变量x(x(向量向量),),使得使得 28 输入格式为输入格式为:(1)x=lsqcurvefit(fun,x0,xdata,ydata);(2)x=lsqcurvefit(fun,x0,xdata,ydata,options);(3)x=lsqcurvefit(fun,x0,xdata,ydata,options,gr
17、ad);(4)x,options=lsqcurvefit(fun,x0,xdata,ydata,);(5)x,options,funval=lsqcurvefit(fun,x0,xdata,ydata,);(6)x,options,funval,Jacob=lsqcurvefit(fun,x0,xdata,ydata,);fun是一个事先建立的是一个事先建立的定义函数定义函数F(x,xdata)的的M-文件文件,自变量为自变量为x和和xdata说明:x=lsqcurvefit(fun,x0,xdata,ydata,options);迭代初值迭代初值已知数据点已知数据点选项见无选项见无约束优化约
18、束优化29 lsqnonlin用以求含参量用以求含参量x x(向量)的向量值函数(向量)的向量值函数 f(x)f(x)=(f=(f1 1(x),f(x),f2 2(x),(x),f,fn n(x)(x)T T 中的参量中的参量x x,使得,使得最小。最小。其中其中fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai2.lsqnonlin已知数据点:已知数据点:xdata=xdata=(xdata1,xdata2,xdataxdatan n)ydata=ydata=(ydataydata1 1,ydataydata2 2,ydataydatan n)3030输入
19、格式为:输入格式为:1)x=lsqnonlin(fun,x0);2)x=lsqnonlin(fun,x0,options);3)x=lsqnonlin(fun,x0,options,grad);4)x,options=lsqnonlin(fun,x0,);5)x,options,funval=lsqnonlin(fun,x0,);说明:x=lsqnonlinlsqnonlin(fun,x0,options););fun是一个事先建立的是一个事先建立的定义函数定义函数f(x)的的M-文件,文件,自变量为自变量为x迭代初值迭代初值选项见无选项见无约束优化约束优化31非线性最小二乘法曲线拟合的非线性
20、最小二乘法曲线拟合的MATLABMATLAB实现实现例例 已知一组数据如下表所示已知一组数据如下表所示x0.10.40.50.70.80.9y0.610.920.991.521.472.03用用lsqcurvefitlsqcurvefit函数实现曲线拟合函数实现曲线拟合MatlabMatlab为用户提供了为用户提供了lsqcurvefitlsqcurvefit函数实现非线性最小二函数实现非线性最小二乘拟合,调用格式如下:乘拟合,调用格式如下:x=lsqcurvefit(fun,x0,xdata,ydata)x=lsqcurvefit(fun,x0,xdata,ydata);funfun为拟合函
21、数,为拟合函数,(xdata,ydata)(xdata,ydata)为一组实验观测数据,满足为一组实验观测数据,满足ydata=fun(xdata,x),ydata=fun(xdata,x),以以x0 x0为初始点求解改数据拟合问题。为初始点求解改数据拟合问题。32新建新建m m文件,将待拟合函数写入,保存为文件,将待拟合函数写入,保存为cf.mcf.m:functionfunctionf=cf(x,xdate);f=cf(x,xdate);n=length(xdate);n=length(xdate);forfori=1:ni=1:nf(i)=x(1)+x(2)*xdate(i)+x(3)*
22、sin(xdate(i)+x(4)*exp(f(i)=x(1)+x(2)*xdate(i)+x(3)*sin(xdate(i)+x(4)*exp(xdate(i);xdate(i);endend33运行以下程序:clearall;closeall;xdata=0.1,0.4,0.5,0.7,0.8,0.9;ydata=0.61,0.92,0.99,1.52,1.47,2.03;x0=1,1,1,1;%初始点选为全1向量x=lsqcurvefit(cf,x0,xdata,ydata)plot(xdata,ydata,ro);xi=0:0.01:1;y=cf(x,xi);r=cf(x,xdata)
23、ydata;%维度需要一致e=r*r;gridon;holdon;plot(xi,y)xlabel(x)ylabel(y)title(lsqcurvefit函数曲线拟合)legend(原始数据点,拟合曲线)34输出结果:x=7.000838.4868-30.0778-6.5485e=0.0539仿真结果仿真结果35拟合验证拟合验证x12345y37132131对这对这5 5个点用多项式拟合验证得出的曲线是否为个点用多项式拟合验证得出的曲线是否为原函数。原函数。36用用MATLABMATLAB实现多项式拟合实现多项式拟合aa=1.0000,1.0000,1.0000aa=1.0000,1.0000,1.0000e=7.6520e-29e=7.6520e-29可见得出的函数即为原函数可见得出的函数即为原函数clearall;closeall;x=1:1:5;y=3,7,13,21,31;holdonaa=polyfit(x,y,2);plot(x,polyval(aa,x),r-,x,y,o);%xlabel(x-);%ylabel(y-);title(多项式曲线拟合验证legend(原始数据点,拟合曲线)a=y-polyval(aa,x);e=a*a;仿真结果仿真结果37Thankyou38多元函数极值存在必要条件多元函数极值存在必要条件






