Usage

libKriging may be used through:

  • direct C++ access

  • Python wrapper

  • R wrapper

  • Octave wrapper

  • Matlab wrapper

The basic usage is almost the same whatever lang.:

# input design
X = ... 
# output results
y = ... 

# load/import/... libKriging
...
# build & fit Kriging model
k = Kriging(y, X, "gauss") 
# display model
print(k)

# setup another (dense) input sample 
x = ... 

# use kriging model to predict at x
p = k.predict(x, ...) 

# and/or use kriging model to simulate at x
s = k.simulate(nsim = 10, seed = 123, x)

Basic demo

Sample the objective function

\[ f: x \rightarrow 1 - \frac 1 2 \left( {\frac {sin(12 x)} {1 + x} + 2 cos(7 x) x ^ 5 + 0.7} \right) \]

at \(X = \{0.0, 0.25, 0.5, 0.75, 1.0\}\), then predict and simulate in \([0,1]\).

This code, for Python, R or Matlab/Octave should return for both Python: Python, R: R or Matlab/Octave :

predict simulate

SciKit-Learn wrapping

Implement SciKit-Learn BaseEstimator to plot gpr noisy targets (SciKit-Learn example: plot gpr noisy targets ), using libKriging:

from sklearn.base import BaseEstimator
import pylibkriging as lk
import numpy as np

class KrigingEstimator(BaseEstimator):
  def __init__(self, kernel="matern3_2", regmodel = "constant", normalize = False, optim = "BFGS", objective = "LL", noise = None, parameters = None):
    self.kernel = kernel
    self.regmodel = regmodel
    self.normalize = normalize
    self.optim = optim
    self.objective = objective
    self.noise = noise
    self.parameters = parameters
    if self.parameters is None:
      self.parameters = {}
    if self.noise is None:
      self.kriging = lk.Kriging(self.kernel)
    elif type(self.noise) is float: # homoskedastic user-defined "noise"
      self.kriging = lk.NoiseKriging(self.kernel)
    else:
      raise Exception("noise type not supported:", type(self.noise))

  def fit(self, X, y):
    if self.noise is None:
      self.kriging.fit(y, X, self.regmodel, self.normalize, self.optim, self.objective, self.parameters)
    elif type(self.noise) is float: # homoskedastic user-defined "noise"
      self.kriging.fit(y, np.repeat(self.noise, y.size), X, self.regmodel, self.normalize, self.optim, self.objective, self.parameters)
    else:
      raise Exception("noise type not supported:", type(self.noise))

  def predict(self, X, return_std=False, return_cov=False):
    return self.kriging.predict(X, return_std, return_cov, False)

  def sample_y(self, X, n_samples = 1, random_state = 0):
    return self.kriging.simulate(nsim = n_samples, seed = random_state, x = X)

  def log_marginal_likelihood(self, theta=None, eval_gradient=False):
    if theta is None:
      return self.kriging.logLikeliHood()
    else:
      return self.kriging.logLikeliHoodFun(theta, eval_gradient)