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(x,y,z,variogram_model=’linear’,variogram_parameters=None,variogram_function=None,nlags=6,weight=False,anisotropy_scaling=1.0,anisotropy_angle=0.0,verbose=False,enable_plotting=False,enable_statistics=False,coordinates_type=’euclidean’,exact_values=True,pseudo_inv=False,pseudo_inv_type=’pinv’)
- x,y,z:三个坐标值
- 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)