Scikit learn 如何在Python中使用克里格插值二维空间数据?

Scikit learn 如何在Python中使用克里格插值二维空间数据?,scikit-learn,kriging,spatial-interpolation,openturns,Scikit Learn,Kriging,Spatial Interpolation,Openturns,我有一个二维空间域,比如说[0,1]×[0,1]。在这个领域中,有6个点观察到了一些感兴趣的标量(例如,温度、机械应力、流体密度等)。如何预测未观测点的兴趣量?换句话说,如何在Python中插入空间数据 例如,考虑2D域(输入)中的点的坐标,以及感兴趣量(输出)的相应观测值。 将numpy导入为np 坐标=np.数组([[0.0,0.0],[0.5,0.0],[1.0,0.0],[0.0,1.0],[0.5,1.],[1.0,1.0]) 观测值=np.数组([1.0,0.5,0.75,-1.0,

我有一个二维空间域,比如说[0,1]×[0,1]。在这个领域中,有6个点观察到了一些感兴趣的标量(例如,温度、机械应力、流体密度等)。如何预测未观测点的兴趣量?换句话说,如何在Python中插入空间数据

例如,考虑2D域(输入)中的点的坐标,以及感兴趣量(输出)的相应观测值。

将numpy导入为np
坐标=np.数组([[0.0,0.0],[0.5,0.0],[1.0,0.0],[0.0,1.0],[0.5,1.],[1.0,1.0])
观测值=np.数组([1.0,0.5,0.75,-1.0,0.0,1.0])
可以使用以下方法提取X和Y坐标:

x=坐标[:,0]
y=坐标[:,1]
以下脚本创建散点图,其中黄色(分别为蓝色)表示高(分别为低)输出值

导入matplotlib.pyplot作为plt
图=plt.图()
plt.散射(x,y,c=观测值,cmap='viridis')
plt.colorbar()
plt.show()

我想使用克里格法来预测二维输入域中规则网格上感兴趣的标量。在Python中如何实现这一点?

在中,该类可以基于特定输入点的已知输出值来估计高斯过程模型的超参数。然后,
KrigingAlgorithm
getMetamodel
方法返回一个插值数据的函数

首先,我们需要将Numpy数组
坐标
观测值
转换为OpenTURNS
样本
对象:

将openturns导入为ot
输入列车=ot.样本(坐标)
输出序列=ot.样本(观察值,1)
数组
坐标
具有形状
(6,2)
,因此它被转换为大小为6、尺寸为2的
样本。数组
观测值
具有形状
(6,)
,这是不明确的:它是大小为6且尺寸为1的
样本
,还是大小为1且尺寸为6的
样本
?为了澄清这一点,我们在调用
Sample
类构造函数时指定了维度(1)

在下文中,我们定义了一个具有常数趋势函数和平方指数协方差核的高斯过程模型:

inputDimension=2
basis=ot.ConstantBasisFactory(inputDimension.build())
协方差_kernel=ot.SquaredExponential([1.]*输入维度[1.0])
algo=ot.KrigingAlgorithm(输入序列、输出序列、,
协方差(核,基)
然后,我们拟合趋势值和协方差核参数(振幅参数和尺度参数),并获得元模型:

#适合
算法运行()
result=algo.getResult()
krigingMetamodel=result.getMetaModel()
生成的
krigingMetamodel
是一个
函数
,它将2D
作为输入,并返回1D
。它预测利息的数量。为了说明这一点,让我们构建2D域[0,1]×[0,1],并使用规则网格对其进行离散:

#创建2D域
myInterval=加班时间间隔([0,0.],[1,1.])
#定义长方体每个方向上的间隔数
nx=20
ny=10
MyIndex=[nx-1,ny-1]
myMesher=ot.IntervalMesher(MYINDEX)
myMeshBox=myMesher.build(myInterval)
使用我们的
krigingMetamodel
来预测该网格上感兴趣的数量所取的值,可以使用以下语句来完成。我们首先将网格的
顶点作为
样本
,然后通过对元模型的一次调用来评估预测(这里不需要
for
循环):

#预测
顶点=myMeshBox.getVertices()
预测=克里金元模型(顶点)
为了查看Matplotlib的结果,我们首先必须创建
pcolor
函数所需的数据:

#绘图格式
X=np.数组(顶点[:,0])。重塑((ny,nx))
Y=np.数组(顶点[:,1])。重塑((ny,nx))
预测数组=np.数组(预测).重塑((ny,nx))
以下脚本生成绘图:

#绘图
将matplotlib.pyplot作为plt导入
图=plt.图()
plt.pcolor(X、Y、U阵列)
plt.colorbar()
plt.show()

我们看到元模型的预测与观测到的输入点的观测值相等

此元模型是坐标的平滑函数:其平滑度随协方差核平滑度增加而增加,平方指数协方差核恰好平滑。

在中,该类可以基于特定输入点的已知输出值估计高斯过程模型的超参数。然后,
KrigingAlgorithm
getMetamodel
方法返回一个插值数据的函数

首先,我们需要将Numpy数组
坐标
观测值
转换为OpenTURNS
样本
对象:

将openturns导入为ot
输入列车=ot.样本(坐标)
输出序列=ot.样本(观察值,1)
数组
坐标
具有形状
(6,2)
,因此它被转换为大小为6、尺寸为2的
样本。数组
观测值
具有形状
(6,)
,这是不明确的:它是大小为6且尺寸为1的
样本
,还是大小为1且尺寸为6的
样本
?为了澄清这一点,我们在调用
Sample
类构造函数时指定了维度(1)

在下文中,我们定义了一个具有常数趋势函数和平方指数协方差核的高斯过程模型:

inputDimension=2
basis=ot.ConstantBasisFactory(inputDimension.build())
协方差_kernel=ot.SquaredExponential([1.]*输入维度[1.0])
阿尔戈=奥特克里吉