Python - 在scikit_learn中的Kriging(高斯过程)

时间:2015-05-27 17:45:48

标签: python 3d interpolation gaussian kriging

我正在考虑使用这种方法来插入我所拥有的一些3D点。作为输入,我在一个区域的不同高度处具有大气浓度的气体。我的数据显示为垂直高度每几英尺几十英尺的值,但水平分隔数百英尺(所以'列'紧凑的值)。

假设在任何给定时间点,垂直方向的值变化明显大于水平方向。

我想用这个假设来执行3D克里金法(作为我可以调整的参数或者统计定义的参数 - 或者/或者)。

我相信scikit学习模块可以做到这一点。如果可以,我的问题是如何创建离散单元输出?也就是说,输出到尺寸为50 x 50 x 1英尺的3D数据网格中。理想情况下,我希望[x_location,y_location,value]的输出与这些(或类似的)距离分开。

不幸的是,我没有足够的时间来玩它,所以我只是希望在深入研究它之前弄清楚这是否可以在Python中使用。谢谢!

2 个答案:

答案 0 :(得分:4)

是的,你绝对可以在scikit_learn中做到这一点。

事实上,克里金/高斯过程回归的基本特征是你可以使用各向异性协方差核。

由于它在manual(下面引用)中被精确化,您可以自己设置协方差的参数或估计它们。您可以选择使所有参数相等或全部不同。

  

theta0:double array_like,可选   具有形状(n_features,)或(1,)的数组。中的参数   自相关模型。如果还指定了thetaL和thetaU,那么theta0   被认为是最大可能性的起点   估计最佳参数集。默认假定为各向同性   自相关模型,其中θ= 1e-1。

答案 1 :(得分:0)

In the 2d case, something like this should work:

import numpy as np
from sklearn.gaussian_process import GaussianProcess

x = np.arange(1,51)
y = np.arange(1,51)
X, Y = np.meshgrid(lons, lats)

points = zip(obs_x,  obs_y)
values = obs_data    # Replace with your observed data

gp = GaussianProcess(theta0=0.1, thetaL=.001, thetaU=1., nugget=0.001)
gp.fit(points, values)
XY_pairs = np.column_stack([X.flatten(), Y.flatten()])
predicted = gp.predict(XY_pairs).reshape(X.shape)