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

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)

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用Python pykrige库实现克里金(Kriging)模型

    发表评论