浏览网页,我发现在Python语言中使用克里金法的一些工具是pyKriging和Gaussian Process Regression。然而,我不能让它们中的任何一个工作。第一个不适用于我(甚至不能导入它):
import pyKriging
File "~/python3.6/site-packages/pyKriging/krige.py", line 142
except Exception, err:
^
SyntaxError: invalid syntax第二个我不懂怎么用。我找不到一个简单的工作示例(例如,这个 rroowwllaanndd answer很棒,但遗憾的是数据不再可供下载)
所以我的问题是,我如何使用克里格插值我的数据?我有几个站点数据保存在numpy数组中,如下所示:
2000 1 1 5.0
2000 1 2 3.4
2000 1 3 0.2列是年-月-日-降水量。我有几个这样的数据数组(st1、st2、st3),另一个数组包含每个站点的ID和每个站点所在的坐标(stid,因此站点1位于经度15.6865、纬度62.6420等等)。
import numpy as np
st1 = np.array([[2000,1,1,5.0],[2000,1,2,3.4],[2000,1,3,0.2]])
st2 = np.array([[2000,1,1,8.2],[2000,1,2,2.5],[2000,1,3,0.0]])
st3 = np.array([[2000,1,1,np.nan],[2000,1,2,4.5],[2000,1,3,1.2]])
stid = np.array([[1,15.6865,62.6420],[2,15.7325,62.1254],[3,16.1035,61.1449]])我需要的是一个每天的数组(或一个3D数组),它包含了所有站点的数据,在像这样的网格中插入每天的数据:
y = np.arange(61,63,0.125)
x = np.arange(14,17,0.125)
X,Y = np.meshgrid(x,y)任何帮助都是非常感谢的。
发布于 2017-07-28 20:40:51
很高兴能找到有趣的文档、包等,克里金法通常被称为“高斯过程回归”。
在Python语言中,一个很好的实现是著名的机器学习包scikit-learn。它是基于著名的DACE matlab实现的。
documentation for Gaussian Process Regression包括5 tutorials和list of available kernels。
有了您提供的数据,您只需执行以下操作即可将一个简单的模型与您选择的内核相匹配:
import sklearn
gp = sklearn.gaussian_process.GaussianProcessRegressor(kernel=your_chosen_kernel)
gp.fit(X, y) 发布于 2019-12-12 05:30:47
使用OpenTURNS,KrigingAlgorithm估计条件高斯过程的超参数。您需要的元模型的目的是将(经度,纬度) 2D点作为输入,将给定日期的降水量作为输出。
第一步是准备数据。在下面的脚本中,我创建了包含经度/纬度对的coordinates_train变量和包含降雨量的precipitation_train变量。我使用日期为2000/1/2的降雨量,因为站点3的2000/1/1数据缺失。
import openturns as ot
# Input points
coordinates_train = ot.Sample([[15.68,62.64],[15.73,62.12],[16.10,61.14]])
# Output points
precipitation_train = ot.Sample([[3.4],[2.5],[4.5]]) # At 2000/1/2然后我们就可以训练克里格了。为此,我使用了一个恒定的基数(模型的趋势)和一个指数协方差模型。这应该是适当的,因为相对于空间站的位置来说,降水必须是相当有规律的。
# Fit
inputDimension = 2
basis = ot.ConstantBasisFactory(inputDimension).build()
covarianceModel = ot.SquaredExponential([1.]*inputDimension, [1.0])
algo = ot.KrigingAlgorithm(coordinates_train, precipitation_train, covarianceModel, basis)
algo.run()
result = algo.getResult()
krigingMetamodel = result.getMetaModel()然后,我们可以使用元模型来预测没有记录的位置的降水量。因为krigingMetamodel是一个函数,所以我只使用"()“运算符。
# Predict
coordinates = [15.70,62.53] # A new latitude/longitude pair
precipitation = krigingMetamodel(coordinates)则precipitation是包含给定位置的降水量的一维点。这是预测的降水量。
>>> print(precipitation)
[3.46667]您也可以通过输入(经度,纬度,时间)来获得更一般的克里金法。在这种情况下,您所要做的就是向输入训练样本添加一个新的维度,其中包含相关的时间,格式为真实值。
https://stackoverflow.com/questions/45175201
复制相似问题