(完整版)数据拟合——线性回归
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据拟合——线性回归法
【概述】
MATLAB支持用户对数据用线性回归方法linear regression建立模型。模型是指自变量和因变量之间的关系。线性回归方法建立的模型的系数是线性的。最常用的线性回归方法是最小二乘拟合,可进行线性拟合和多项式拟合。
1.线性相关性分析Linear Correlation Analysis
在对两组测量数据建立关系模型前,最好对这些数据之间的关系作一个判断——相关性分析,看二者是否真的存在线性关系。
这里,我们只介绍相关性系数①Correlation coefficient的计算。简单的说,相关性系数是绝对值在0-1之间的数,其绝对值越接近1,表明数据之间存在线性关系的可能性越大。反之,数据越接近0,表明数据之间不太可能存在线性关系。
✧MATLAB语法:R = corrcoef(x,y)
计算数据x和y的相关系数矩阵R
示例1:
x = [1 2 3 4 5 6 7 8 9 10];
y = [1 4 9 16 25 36 49 64 81 100];
R = corrceof(x,y)
R =
1.0000 0.9746 此数据表明两组数据具有很强的线性关系
0.9746 1.0000
示例2:
x = [1 2 3 4 5 6 7 8 9 10];
y = [0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 0.4121 -0.5440];
R = corrceof(x,y)
R =
1.0000 -0.1705 此数据表明两组数据不存在线性关系
-0.1705 1.0000
2.评价数据拟合的优劣——残差计算
残差被定义为实际测量数据与利用模型拟合(预测)的数据之差。合适的模型计算的残差应该接近独立的随机误差。如果计算得到的残差具有某种特殊的模式,那么模型就不合适。
3.利用MATLAB函数进行数据拟合
⏹多项式模型
MATLAB提供了2个用于多项式拟合的函数polyfit和polyval。
✧MATLAB语法:p = polyfit(x,y,n)
通过对数据x和y进行n阶多项式②拟合(基于最小二乘法),计算n阶多项式系数p
✧MATLAB语法:y = polyval(p,x)
计算以p为系数的多项式,在x处的函数值y
示例3:
t = [0 0.3 0.8 1.1 1.6 2.3];
y = [0.6 0.67 1.01 1.35 1.47 1.25];
plot(t,y,'o')
用二阶多项式进行拟合
p=polyfit(t,y,2)
p =
-0.2942 1.0231t 0.4981
查看拟合的效果:1.绘制多项式曲线
t2 = 0:0.1:2.8;
y2=polyval(p,t2); plot(t,y,'o',t2,y2)
查看拟合的效果:2.计算残差
y2=polyval(p,t);
res=y-y2; plot(t,res,'+')
分析:可以看出,此题用二阶多项式拟合的效果不好,可以通过采用更高阶的多项式拟合来获得
更好的效果。但要注意,对于实际的问题进行建模时,阶次的选择应符合物理意义。
{课堂练习}对本题数据进行5阶多项式拟合,计算残差,绘制相应的波形。
具有非多项式项的线性模型
例如012t t
y a a e a te --=++,函数与系数是线性的,但与自变量不是线性关系。可以通过构造
一组方程来解决系数的求解问题。
示例4:
% 以列向量形式输入t 和y
t = [0 0.3 0.8 1.1 1.6 2.3]';
y = [0.6 0.67 1.01 1.35 1.47 1.25]';
% 构造矩阵
X = [ones(size(t)) exp(-t) t.*exp(-t)];
% 计算系数
a = X\y
a =
1.3983
- 0.8860
0.3085
线性关系为 1.39830.8860.3085t t
y e te --=-+
查看拟合的效果:绘制多项式曲线
T = (0:0.1:2.5)';
Y = [ones(size(T)) exp(-T) T.*exp(-T)]*a;
plot(T,Y ,'-',t,y,'o'), grid on
多元回归
当自变量不止一个时,如01122y a a x a x =++。
示例5:
x1 = [.2 .5 .6 .8 1.0 1.1]';
x2 = [.1 .3 .4 .9 1.1 1.4]';
y = [.17 .26 .28 .23 .27 .24]';
X = [ones(size(x1)) x1 x2];
a = X\y
a =
0.1018
0.4844
-0.2847
验证模型,计算最大残差的绝对值
Y = X*a;
MaxErr = max(abs(Y - y))
MaxErr =
0.0038
此数据远小于y 数据,说明此模式较好。
4.利用图形工具——MATLAB Basic Fitting
以图形用户界面提供方便、强大的数据拟合工具,提供以下功能:
✓提供样条插值模型、保型插值模型和多项式模型;
✓绘制原始数据、拟合数据,残差图形;
✓计算模型的相关性系数和范数;
✓利用数据模型插值或外推数据;
✓在工作区保存拟合以及计算结果;
✓生成m文件以供拟合新数据。
当需要拟合的数据量很大时,最好先对数据进行排序。对数据x,y进行排序可利用以下命令实现:[x_sorted, i] = sort(x); y_sorted = y(i); 排序后的数据为x_sorted和y_sorted。
MATLAB Basic Fitting位于图形窗口的tool菜单中。
示例6:
导入已有的数据,并作图
load census
plot(cdate,pop,'ro') %cdate和pop③
在图形窗口的菜单中选择Tools > Basic Fitting