1.拟合法处理缺失值
1.1插值法介绍
拟合也叫曲线逼近,也可以用于处理缺失值。通过利用其他变量建立模型,预测缺失变量的值。不同于插值法,拟合法并不要求曲线一定通过数据点,只要求拟合的曲线能合理地反映数据的基本趋势。或者说,插值法只想求出值,而拟合法更关注函数关系,并且可以用于预测。
此外,拟合法可以用来补充数据范围之外的数据,例如只收集了小明1-12小时的每个小时的体温,拟合法不仅可以补充空白值,还可以拟合出1-12小时的每隔0.5小时的值,也可以给出第13.5(超过12)的值。而作者对第三种作用的理解的是该作用与预测模型相类似,因此,拟合法也有预测的功能。
拟合法适用于缺失值较多,或者缺失值与其他变量之间存在一定关系的情况。然而,如果其他变量与缺失变量无关,那么拟合得到的结果将毫无意义。
一般拟合方法有两种,一种是多项式拟合,还有一种是给定函数拟合。作者认为给定函数拟合可以理解为:已知Y=F(X),求解当X=N时,F(N)=?在数学建模中,F(X)这个函数可能复杂,也可能简单,但只要记住此种类型下的拟合逻辑就行。多项式拟合更有普遍性。
1.2多项式拟合标准代码
polyfit(X,Y,N) %多项式拟合,返回降幂排列的多项式系数。
polyval(P,XI) %计算多项式的值。
其中,X,Y 是数据点的值;N 是拟合的最高次幂;P 是返回的多项式系数;XI 是要求的点的横坐标。
1.3 多项式拟合案例
假设:原始数据: x=[1,2,3,4,5,6];y=[1,4,9,14,26,38];
clc
x=[1,2,3,4,5,6];%原始数据
y=[1,4,9,14,26,38];%原始数据
P=polyfit(x,y,3);%3为拟合的最高次幂
xi=0:0.5:8;%以0.5为步长拟合,从0到8
yi=polyval(P,xi);
% 绘制原始数据点和插值结果
plot(x, y, 'o-', 'DisplayName', '原始数据'); % 使用'DisplayName'来设置图例中的标签
hold on;
plot(xi, yi, 'r-.', 'DisplayName', '多项式拟合'); % 添加图例标签
legend; % 调用legend函数来显示图例
运行结果如下:
1.4给定函数拟合
假设给定的函数如下,t为自变量:
拟合代码如下:
clear
x = [0; 0.4; 1.2; 2; 2.8; 3.6; 4.4; 5.2; 6; 7.2; 8; 9.2; 10.4; 11.6; 12.4; 13.6; 14.4; 15];
y = [1; 0.85; 0.29; -0.27; -0.53; -0.4; -0.12; 0.17; 0.28; 0.15; -0.03; -0.15; -0.071; 0.059; 0.08; 0.032; -0.015; -0.02];
f = fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
% 使用fit函数创建一个fit对象,其中,独立变量t,待确定的系数{'a','k','w'}
[cfun, gof] = fit(x, y, f); % 注意x和y是列向量
% cfun可以显示拟合函数的信息
disp(cfun);
% 创建一个用于绘图的x值范围
xi = 0:0.1:20;
% 使用fit对象来计算对应xi的y值
yi = cfun(xi);
% 绘制原始数据和拟合曲线
plot(x, y, 'r-.*', xi, yi, 'b-');
legend('原始数据', '拟合函数', 'Location', 'Best');
xlabel('t');
ylabel('y');
title('Data Fitting to a*cos(k*t)*exp(w*t)');
grid on;
运行结果如下: