编程实现多项式拟合例子,体会overfitting。
可以使用matlab中的方法实现多项式拟合。polyfit(x,y,n),其中n表示预测的多项式为n次。[p,S] = polyfit(x,y,n),p返回的是多项式的系数,S返回的有R,df以及normr,分别代表triangular factor, degrees of freedom, the norm of the residuals
Matlab代码:
x=[0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000 2.4000 2.7000 3.0000]
y=[2.0000 2.3780 3.9440 7.3460 13.2320 22.2500 35.0480 52.2740 74.5760 102.6020 137.0000]
%一次多项式模拟
P=polyfit(x,y,1);
xi=0:0.1:3.5;
yi=polyval(P,xi);
plot(xi,yi,x,y,'r*');
[a,b]=polyfit(x,y,1)
运行结果:
a = 42.4080 -22.4620
b = R: [2x2 double]
df: 9
normr: 56.0082
图1
%二次多项式模拟
Q=polyfit(x,y,2);
yi=polyval(Q,xi);
plot(xi,yi,x,y,'r*');
[a,b]=polyfit(x,y,2)
运行结果
a = 21.0000 -20.5920 5.8880
b = R: [3x3 double]
df: 8
normr: 8.4886
图2
%三次多项式模拟
W=polyfit(x,y,3);
yi=polyval(W,xi);
plot(xi,yi,x,y,'r*');
[a,b]=polyfit(x,y,3)
运行结果
a = 4.0000 3.0000 -0.0000 2.0000
b = R: [4x4 double]
df: 7
normr: 6.6125e-14
图3
图1过于简单,属于under-fiting,图2正合适,存在恰当偏离曲线的点,图三所有点全部吻合,不符合实际,因为实际数据总有误差,属于over-fiting。综上,图2正合适,拟合的函数由运行结果可得: