该部分是基于克里金插值(Kriging)在MATLAB中的实现(克里金工具箱),由于在运行过程中有部分问题,基于此做的一些理解+优化。
工具箱的下载见上面的链接,其提供了工具箱。
clc
clear
load('data_kriging.mat') %载入数据;我在这里将工具箱中的data1替换了名字
%模型参数设置,无特殊情况不需修改,见说明书
theta = [10 10]; lob = [1e-1 1e-1]; upb = [20 20];
[dmodel, perf] = dacefit(S, Y, @regpoly0, @corrgauss, theta, lob, upb);
% corrgauss表示高斯相关函数
% lob:相关函数参数的下界向量
% upb:相关函数参数的上界向量
%S存储了点位坐标值,Y为观测值
X = gridsamp([0 0;100 100], 40); %创建一个40*40的格网,标注范围为0-100,即格网间距为2.5
% X=[83.731 32.36]; %单点预测的实现
%格网点的预测值返回在矩阵YX中,预测点的均方根误差返回在矩阵MSE中
[YX,MSE] = predictor(X, dmodel);
X1 = reshape(X(:,1),40,40); X2 = reshape(X(:,2),40,40);
YX = reshape(YX, size(X1)); %size(X1)=40*40
figure(1), mesh(X1, X2, YX) %绘制预测表面
hold on,
plot3(S(:,1),S(:,2),Y,'.k', 'MarkerSize',10) %绘制原始散点数据
hold off
figure(2),mesh(X1, X2, reshape(MSE,size(X1))); %绘制每个点的插值误差大小
在dacefit函数中,参数的含义如下:
- S:输入变量的样本数据矩阵,每一行代表一个样本点,每一列代表一个输入变量。
- Y:响应变量的样本数据矩阵,每一行代表一个样本点,每一列代表一个响应变量。
- @regpoly0:回归多项式函数的句柄,用于拟合输入变量和响应变量之间的回归关系。regpoly0表示零阶多项式,即常数回归模型。
- @corrgauss:相关函数的句柄,用于描述输入变量之间的相关性。corrgauss表示高斯相关函数。
- theta:相关函数的参数向量,用于调整相关函数的形状和范围。具体含义根据相关函数的定义而定。
- lob:相关函数参数的下界向量,用于限制参数的范围。
- upb:相关函数参数的上界向量,用于限制参数的范围。
函数返回值包括:
- dmodel:拟合好的DACE模型,可以用于进行预测和插值。
- perf:拟合模型的性能指标,如均方根误差(RMSE)、均方误差(MSE)等。
通过调整相关函数的参数和范围,可以对DACE模型进行优化,以最好地拟合输入变量和响应变量之间的关系。
备注:如果缺失数据不是规整的,这种方法还是比较难应用。
相关的原理可借鉴:
克里金插值MATLAB程序