[转载]robustfit等在matlab的应用(Matlab插值与拟合实例讲解)
(2016-12-13 13:54:57)
标签:
转载 |
分类: Math_and_Matlab |
robustfit参考资料:
http://www.weizmann.ac.il/matlab/toolbox/stats/robustfit.html
http://www.mathworks.cn/help/toolbox/stats/robustfit.html
§1曲线拟合
实例:温度曲线问题
气象部门观测到一天某些时刻的温度变化数据为: t
T
试描绘出温度变化曲线。
曲线拟合就是计算出两组数据之间的一种函数关系,由此可描绘其变化曲线及估计非采集数据对应的变量信息。
曲线拟合有多种方式,下面是一元函数采用最小二乘法对给定数据进行多项式曲线拟合,最后给出拟合的多项式系数。
1.
调用格式:
说明:b=regress(y,X)返回X处y的最小二乘拟合值。该函数求解线性模型:
y=Xβ+ε
β是p?1的参数向量;ε是服从标准正态分布的随机干扰的n?1的向量;y为n?1的向量;X为n?p矩阵。
bint返回β的95%的置信区间。r中为形状残差,rint中返回每一个残差的95%置信区间。Stats向量包含R2统计量、回归的F值和p值。
例1:设y的值为给定的x的线性函数加服从标准正态分布的随机干扰值得到。即y=10+x+ε ;求线性拟合方程系数。
程序: x=[ones(10,1) (1:10)’]
结果:
y =
b =
bint =
即回归方程为:y=9.9213+1.0143x
2.
调用格式:
说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。矩阵s用于生成预测值的误差估计。(见下一函数polyval)
例2:由离散数据 x
y
拟合出多项式。
程序:
结果:
p =
多项式为:16.7832x3-25.7459x2+10.9802x-0.0035
曲线拟合图形:
也可由函数给出数据。
例3:x=1:20,y=x+3*sin(x)
程序:
结果:
p =
0.0000
再用10阶多项式拟合
y=x+3*sin(x);
p=polyfit(x,y,10)
xi=linspace(1,20,100);
z=polyval(p,xi);
plot(x,y,'o',xi,z,'k:',x,y,'b')
legend('原始数据','10阶多项式')
结果:p =
可用不同阶的多项式来拟合数据,但也不是阶数越高拟合的越好。
3.
调用格式:
说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。
[y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输出s得出误差估计Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。则Y DELTA将至少包含50%的预测值。
4.
调用格式:
说明:[Y,DELTA]=polyconf(p,x,s)使用polyfit函数的选项输出s给出Y的95%置信区间Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为常数。1-alpha为置信度。
例4:给出上面例1的预测值及置信度为90%的置信区间。
程序:
[Y,DELTA]=polyconf(p,x,s,alpha)
s =
Y =
DELTA =
1.1589
5.
稳健回归是指此回归方法相对于其他回归方法而言,受异常值的影响较小。
调用格式:
说明:b返回系数估计向量;stats返回各种参数估计;’wfun’指定一个加权函数;tune为调协常数;’const’的值为’on’(默认值)时添加一个常数项;为’off ’时忽略常数项。
例5:演示一个异常数据点如何影响最小二乘拟合值与稳健拟合。首先利用函数y=10-2x加上一些随机干扰的项生成数据集,然后改变一个y的值形成异常值。调用不同的拟合函数,通过图形观查影响程度。
程序:x=(1:10)’;
y=10-2*x+randn(10,1);
y(10)=0;
bls=regress(y,[ones(10,1) x]) %线性拟合
brob=robustfit(x,y) %稳健拟合
scatter(x,y)
hold on
plot(x,bls(1)+bls(2)*x,’:’)
plot(x,brob(1)+brob(2)*x,’r‘)
结果 : bls =
brob =
分析:稳健拟合(实线)对数据的拟合程度好些,忽略了异常值。最小二乘拟合(点线)则受到异常值的影响,向异常值偏移。
6.
对于给定的数据,根据经验拟合为带有待定常数的自定义函数。
所用函数:nlinfit( )
调用格式:
说明:beta返回函数’fun’中的待定常数;r表示残差;J表示雅可比矩阵。X,y为数据;‘fun’自定义函数;beta0待定常数初值。
例6:在化工生产中获得的氯气的级分y随生产时间x下降,假定在x≥8时,y与x之间有如下形式的非线性模型:
现收集了44组数据,利用该数据通过拟合确定非线性模型中的待定常数。
x
8
8
10
10
10
10
12
12
12
12
14
14
14
16
16
function yy=model(beta0,x)
x=[8.00 8.00 10.00 10.00 10.00 10.00 12.00 12.00 12.00 14.00 14.00 14.00...
betafit = nlinfit(x,y,'sta67_1m',beta0)
结果:betafit =
0.1011
=================================================================================
http://zhan.renren.com/matlab2012?gid=3602888498024090959&checked=true
regress函数和regstats函数利用普通最小二乘法估计模型中的参数,参数的估计值受异常值的影响比较大。robustfit函数采用加权最小二乘法估计模型中的参数,受异常值的影响就比较小。robustfit函数用来作稳健的多重线性或广义线性回归分析,下面介绍robustfit函数的用法。
1.4.1.robustfit函数的用法
robustfit函数有以下几种调用方式:
b = robustfit(X,y)
b = robustfit(X,y,wfun,tune)
b = robustfit(X,y,wfun,tune,const)
[b,stats] = robustfit(…)
(1)b = robustfit(X,y)
返回多重线性回归方程中系数向量β的估计值b,这里的b为一个1p×的向量。输入参数X为自变量观测值矩阵(或设计矩阵),它是的矩阵。与regress函数不同的是,默认情况下,robustfit函数自动在X第1列元素的左边加入一列1,不需要用户自己添加。输入参数y为因变量的观测值向量,是的列向量。robustfit函数把y或X中不确定数据NaN作为缺失数据而忽略它们。np×1n×
(2)b = robustfit(X,y,wfun,tune)
用参数wfun指定加权函数,用参数tune 指定调节常数。wfun为字符串,其可能的取值如表1-3所示。
表1-3 robustfit函数支持的加权函数
加权函数(wfun)
函数表达式
默认调节常数值
'andrews' sin(||)rwIrrπ=⋅<
1.339
'bisquare'(默认值)
22(1)(||1)wrIr=−⋅<
4.685
'cauchy' 21(1)wr=+
2.385
'fair' 1(1||)wr=+
1.400
'huber' 1max(1, ||)wr=
1.345
'logistic' tanh()wr=
1.205
'ols'
普通最小二乘,无加权函数
无
'talwar'
(||1)wIr=<
2.795
'welsch'
2rwe−=
2.985
若调用时没有指定调节常数tune,则用表1-3中列出的默认调节常数值进行计算。表1-3中加权函数中的r通过下式计算residr
=tunes1-h××
其中resid为上一步迭代的残差向量,tune为调节常数,h是由最小二乘拟合得到的中心化杠杆值向量,s为误差项的标准差的估计。s的计算公式为:s
=
MAD/0.6745,其中MAD为残差绝对值的中位数,在正态分布下,这个估计是无偏的。若X中有p列,计算MAD时,将残差绝对值向量的前p个最小值舍去。
用户可以定义自己的权重函数,函数的输入必须是残差向量,输出是权重向量。在调用robustfit函数时,把自定义权重函数的句柄(形如@myfun)作为wfun参数传递给robustfit函数,此时必须指定tune参数。
(3)b = robustfit(X,y,wfun,tune,const)
用参数const来控制模型中是否包含常数项。若const取值为 'on'
或1,则模型中包含常数项,此时自动在X第1列的左边加入一列1,若const取值为 'off'
或0,则模型中不包含常数项,此时不改变X的值。
(4)[b,stats] = robustfit(…)
返回一个结构体变量stats,它的字段包含了用于模型诊断的统计量。stats有以下字段:
• stats.ols_s — 普通最小二乘法得出的σ的估计(RMSE);
• stats.robust_s — σ的稳健估计;
• stats.mad_s — 用残差绝对值的中位数计算σ的估计;
• stats.s — σ的最终估计,是ols_s 和robust_s的加权平均与robust_s中的最大值;
• stats.se — 系数估计的标准误差;
• stats.t — b与stats.se的比值;
• stats.p — t检验的p值;
• stats.covb — 系数向量的协方差矩阵的估计;
• stats.coeffcorr — 系数向量的相关系数矩阵的估计;
• stats.w — 稳健拟合的权重向量;
• stats.h — 最小二乘拟合的中心化杠杆值向量;
•
•
=================================================================================
§2 插值问题
在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值。
实例:海底探测问题
某公司用声纳对海底进行测试,在5×5海里的坐标点上测得海底深度的值,希望通过这些有限的数据了解更多处的海底情况。并绘出较细致的海底曲面图。
一、一元插值
一元插值是对一元数据点(xi,yi)进行插值。
1.
调用格式:yi=interp1(x,y,xi,’linear’)
zi=interp1(x,y,xi,’spline’)
wi=interp1(x,y,xi,’cubic’)
说明:yi、zi、wi为对应xi的不同类型的插值。x、y为已知数据点。
例1:已知数据: x
y
求当xi=0.25时的yi的值。
程序:
x=0:.1:1;
y=[.3 .5 1 1.4 1.6 1 .6 .4 .8 1.5 2];
yi0=interp1(x,y,0.025,'linear')
xi=0:.02:1;
yi=interp1(x,y,xi,'linear');
zi=interp1(x,y,xi,'spline');
wi=interp1(x,y,xi,'cubic');
plot(x,y,'o',xi,yi,'r+',xi,zi,'g*',xi,wi,'k.-')
legend('原始点','线性点','三次样条','三次多项式')
结果:yi0 =
要得到给定的几个点的对应函数值,可用:
xi =[ 0.2500
yi=interp1(x,y,xi,'spline')
结果:
yi =1.2088
(二) 二元插值
二元插值与一元插值的基本思想一致,对原始数据点(x,y,z)构造见世面函数求出插值点数据(xi,yi,zi)。
一、单调节点插值函数,即x,y向量是单调的。
调用格式1:zi=interp2(x,y,z,xi,yi,’linear’)
‘liner’ 是双线性插值 (缺省)
调用格式2:zi=interp2(x,y,z,xi,yi,’nearest’)
’nearest’ 是最近邻域插值
调用格式3:zi=interp2(x,y,z,xi,yi,’spline’)
‘spline’是三次样条插值
说明:这里x和y是两个独立的向量,它们必须是单调的。z是矩阵,是由x和y确定的点上的值。z和x,y之间的关系是z(i,:)=f(x,y(i)) z(:,j)=f(x(j),y) 即:当x变化时,z的第i行与y的第i个元素相关,当y变化时z的第j列与x的第j个元素相关。如果没有对x,y赋值,则默认x=1:n, y=1:m。n和m分别是矩阵z的行数和列数。
例2:已知某处山区地形选点测量坐标数据为:
x=0
y=0
海拔高度数据为:
z=89 90 87 85 92 91 96 93 90 87 82
其地貌图为:
对数据插值加密形成地貌图。
程序:
x=0:.5:5;
y=0:.5:6;
z=[89 90 87 85 92 91 96 93 90 87 82
mesh(x,y,z)
xi=linspace(0,5,50);
yi=linspace(0,6,80);
[xii,yii]=meshgrid(xi,yi);
zii=interp2(x,y,z,xii,yii,'cubic');
mesh(xii,yii,zii)
hold
on
[xx,yy]=meshgrid(x,y);
plot3(xx,yy,z+0.1,’ob’)
2、二元非等距插值
调用格式:zi=griddata(x,y,z,xi,yi,’指定插值方法’)
插值方法有:
linear
例:用随机数据生成地貌图再进行插值
程序:
x=rand(100,1)*4-2;
y=rand(100,1)*4-2;
z=x.*exp(-x.^2-y.^2);
ti=-2:.25:2;
[xi,yi]=meshgrid(ti,ti); % 加密数据
zi=griddata(x,y,z,xi,yi);% 线性插值
mesh(xi,yi,zi)
hold on
plot3(x,y,z,'o')
该例中使用的数据是随机形成的,故函数griddata可以处理无规则的数据。
本文来自: 高校自动化网(Www.zdh1909.com)
详细出处参考(转载请保留本链接):http://www.zdh1909.com/html/matlab/15375_2.html
=================================================================================
linspace :http://www.mathworks.cn/help/techdoc/ref/linspace.html