克里金(Kriging)模型及Python pykrige库实现

1、克里金(Kriging)模型

1.1克里金(Kriging)模型简介

  • 克里金(Kriging)模型是代理模型的一种。代理模型现在已经发展出多项式响应面(RSM)、Kriging模型、径向基函数模型(RBFS)、神经网络(ANN)、支持向量回归(SVR)、多变量插值回归(MIR)、多项式混沌展开(PCE)等多种代理模型方法。
  • 现在的二代代理模型:根据一定准则加入新样本点,循环更新代理模型。

  • 克里金(Kriging)模型是代理模型中应用最广泛的,这是因为它不仅能够给出对于未知函数的预估值,而且可以给出预估值的误差,这是其区别于其他模型的显著特点。此外其对于非线性模型具备良好的近似能力。
  • 克里金(Kriging)模型本质上是一种插值模型。它是一种基于高斯过程的建模方法(Gaussian process based modelling method),结构紧凑,计算效率高。
  • 很多研究表明,普通克里金(Kriging)模型计算中经常出错,特别是针对于天然非线性问题。所以后来又演化出改进的克里金模型,如“盲Kriging模型”、Co Kriging模型等。

1.2克里金(Kriging)插值

克里金(kriging)插值是在有限区域内对区域化变量进行无偏最优估计的一种方法。无偏指的是估计值和实际值之差的期望等于零,最优指的是估计值和实际值的方差最小。基于这一特点使得克里金插值的效果比其他插值方法要好很多。

1.3总结

简单而言,克里金(kriging)模型就是一种插值模型,与多项式插值、线性插值、样条插值等类似,根据“采样点”上的值预测非采样点的值。只不过克里金(kriging)模型相较于其他插值方法具备一些优势(上文介绍过了)。

其对于非样本点值的预测是基于线性加权组合(linearly weighted combination)实现的。

在普通克里金(kriging)模型中,通过计算预测点附近的已知值的加权平均来获得预测值。其只有在样本值具备空间相关性时才有意义。

2、Python实现:基于pykrige模块

pykrige可以实现二维和三维的普通克里金(ordinary kriging)和通用克里金(universal kriging)模型,使用起来很方便。

但是更高维度的Kriging模型就得自己从底层原理入手了,目前网上没有找到高维克里金模型的案例。不过知乎评论区有人说“发现了在python里面kriging叫高斯过程回归,做在Python库里面找现成的高斯过程回归库就行,高斯过程回归可以在高维上面用”,后面有时间详细研究。

知乎链接:Python | Kriging算法实现 - 知乎 (zhihu.com)

关于pykrige更加详细的内容参考pykrige模块官网:pykrige.ok3d.OrdinaryKriging3D — PyKrige 1.7.1.dev10 documentation (geostat-framework.readthedocs.io)

2.1二维OrdinaryKriging

参考:克里金插值学习笔记-CSDN博客

2.1.1参数介绍:二维ordinary kriging:pykrige.ok3d.OrdinaryKriging()

pykrige.ok.OrdinaryKriging(xyzvariogram_model='linear'variogram_parameters=Nonevariogram_function=Nonenlags=6weight=Falseanisotropy_scaling=1.0anisotropy_angle=0.0verbose=Falseenable_plotting=Falseenable_statistics=Falsecoordinates_type='euclidean'exact_values=Truepseudo_inv=Falsepseudo_inv_type='pinv')

  • xyz:三个坐标值
  • variogram_model:选择需要用的方差模型,linear, power, gaussian, spherical, exponential, hole-effect,custom。默认为linear。hole-effect仅针对于一维问题。
  • variogram_parameters:方差模型参数,根据所选方差模型确定。不提供的话则采用“软”(soft)L1范式最小化方案。
  • variogram_function:方差模型为custom时需要。
  • 其它参数省略,不常用,用默认即可。

2.1.2核心方法:execute(self, style, xpoints, ypoints, mask=None, backend='vectorized', n_closest_points = None)

参数:
  • style:定义输入点参数。如果是“grid”,将xpoints, ypoints定义为矩形网格的x、y坐标值列表;如果是“points”,则将xpoints, ypoints作为坐标对处理。
  • xpoints, ypoints:坐标值
  • backend:计算方法,如果是‘vectorized’,则是向量方法,运算速度更快,但是数据点较多时占用资源大;如果是‘loop',则是遍历求解每个网格点,计算较慢但是占用资源少;如果是“C”,则会采用循环计算。默认是‘vectorized’。
输出:
  • zvalues:即为插值结果。
  • sigmasq:插值方差。

3、普通克里金(kriging)模型Python实现:底层原理

参考:有空再详细研究

python 普通克里金法程序实现kriging - CSDN文库

【Python进阶】克里金插值法的实现过程 - 知乎 (zhihu.com)其源码在基于 Python(gma) 的克里金 (Kriging) 法插值的主要过程 (qq.com)

  • 29
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 普通克里金法(Ordinary Kriging)是一种地统计学方法,用于插值未知空间点的属性值。Python中可以使用各种和软件包来实现克里金插值。 最常用的Python包是`scipy`和`sklearn`。首先,我们需要导入这两个包: ```python import numpy as np from scipy.linalg import solve from scipy.spatial.distance import cdist from sklearn.preprocessing import normalize ``` 接下来,我们需要定义一些辅助函数,如半方差函数、克里金权重函数和克里金预测函数: ```python def variogram(h, nugget, sill, range): return nugget + sill * (1 - np.exp(-(h / range) ** 2)) def kriging_weights(points, target_point, range): distances = cdist(points, target_point.reshape(1, -1)) r = np.sqrt(np.sum(distances ** 2, axis=1)) weights = variogram(r, 0, 1, range) weights /= np.sum(weights) return weights def kriging_interpolation(points, values, target_point, range): weights = kriging_weights(points, target_point, range) interpolated_value = np.sum(values * weights) return interpolated_value ``` 以上代码定义了半方差函数、克里金权重函数和克里金预测函数,使我们能够计算空间点的插值值。 最后,我们需要提供一些样本点和它们的属性值,以及目标点和范围参数,来进行克里金插值: ```python # 样本点的空间坐标 points = np.array([[0, 0], [1, 1], [2, 2], [3, 3]]) # 样本点的属性值 values = np.array([1, 2, 3, 4]) # 目标点的空间坐标 target_point = np.array([0.5, 0.5]) # 范围参数 range = 1.0 # 进行克里金插值 interpolated_value = kriging_interpolation(points, values, target_point, range) ``` 以上代码中,样本点的坐标和属性值是根据实际情况提供的。范围参数用于调整克里金插值的平滑程度,可以根据具体需求进行调整。 总结来说,实现克里金插值的程序涉及定义半方差函数、克里金权重函数和克里金预测函数,以及提供样本点和目标点的坐标和属性值,并进行插值计算。以上是一个简单的基于Python克里金插值实现示例。 ### 回答2: Python中可以使用普通克里金法来实现克里金插值。克里金法是一种空间插值方法,通过已知的点数据来估计未知点的数值。 首先,需要导入相关的,如numpy、scipy等。然后,我们需要准备好已知点的数据,包括位置和数值。 接下来,通过定义克里金插值函数来实现克里金法的计算过程。这个函数通常包括以下步骤: 1. 计算半方差函数:根据已知点的位置和数值,通过半方差函数来描述点与点之间的空间相关性。常用的半方差函数包括指数型、高斯型等。 2. 通过最小二乘法估计半方差函数的参数:使用已知点的位置和数值,以及半方差函数,通过最小二乘法来估计半方差函数的参数。 3. 进行克里金插值:对于未知点,通过半方差函数的参数和已知点的距离,来计算未知点的值。可以使用简单克里金法或普通克里金法进行插值。 最后,通过调用克里金插值函数,输入需要插值的未知点的位置,即可得到对应的估计值。 值得注意的是,克里金法的实现还有其他的细节需要处理,如数据的预处理、确定半方差函数的参数等。此外,还需要针对具体问题对插值结果进行后处理,如检验插值结果的准确性等。 ### 回答3: 普通克里金法(Ordinary Kriging)是一种地质插值方法,用于估计未知位置的属性值。Python中,我们可以使用一些实现克里金法,如GeostatsPy 和 scikit-gstat。 首先,我们需要准备用于插值的数据集。数据集应包含已知位置的样本点及其属性值。可以使用numpy来创建这些样本点的坐标数组和属性值数组。 接下来,我们可以使用GeostatsPy中的`OKModel()`函数来创建一个克里金模型对象。这个函数需要输入克里金变异函数的参数(如方差、粗糙度和变异范围)。 然后,我们可以使用`OK()`函数来进行克里金插值。这个函数需要输入样本点的坐标和属性值,以及待插值位置的坐标。插值结果将返回一个数组。 另一种实现克里金法的方法是使用scikit-gstat。首先,我们需要使用`GSTools()`函数创建一个空的克里金模型对象。然后,我们可以使用`Simple()`函数为模型对象添加变异函数和模型参数。 接下来,我们使用`Krige()`函数来进行克里金插值。这个函数需要输入样本点的坐标和属性值,以及待插值位置的坐标。插值结果将返回一个数组。 最后,我们可以使用matplotlib和numpy来对插值结果进行可视化,以便更好地理解。 总之,使用Python实现克里金法需要准备数据集、调用函数创建克里金模型对象,然后使用函数进行插值。最后,我们可以使用可视化来展示插值结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值