1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#! /usr/bin/env python
import openturns as ot
import openturns.testing as ott
from math import log10
ot.TESTPREAMBLE()
# Define the model
dimension = 3
input_names = ["x1", "x2", "x3"]
formulas = ["cos(x1 + x2 + x3)"]
model = ot.SymbolicFunction(input_names, formulas)
# Sample noisy data
distribution = ot.Normal(dimension)
samplesize = 100
x = distribution.getSample(samplesize)
y = model(x) + ot.Normal(0.0, 0.1).getSample(samplesize)
# Build the surrogate model
basis = ot.ConstantBasisFactory(dimension).build()
covarianceModel = ot.SquaredExponential(dimension)
covarianceModel.activateNuggetFactor(True)
algo = ot.KrigingAlgorithm(x, y, covarianceModel, basis)
algo.run()
result = algo.getResult()
optimized_covariance_model = result.getCovarianceModel()
ott.assert_almost_equal(
optimized_covariance_model.getScale(), [1.34] * dimension, 0.2, 0.0
)
ott.assert_almost_equal(
log10(optimized_covariance_model.getNuggetFactor()), -1.9, 0.25, 0.0
)
# Product covariance kernel
# (with SquaredExponential => identical to the first)
product = ot.ProductCovarianceModel([ot.SquaredExponential()] * dimension)
product.activateNuggetFactor(True)
algo_product = ot.KrigingAlgorithm(x, y, product, basis)
algo_product.run()
result_product = algo_product.getResult()
optimized_product_model = result_product.getCovarianceModel()
ott.assert_almost_equal(
optimized_product_model.getScale(), [1.34] * dimension, 0.2, 0.0
)
ott.assert_almost_equal(
log10(optimized_product_model.getNuggetFactor()), -1.9, 0.25, 0.0
)
# Isotropic covariance kernel
isotropic = ot.IsotropicCovarianceModel(ot.SquaredExponential(), dimension)
isotropic.activateNuggetFactor(True)
algo_iso = ot.KrigingAlgorithm(x, y, isotropic, basis)
algo_iso.run()
result_iso = algo_iso.getResult()
optimized_isotropic_model = result_iso.getCovarianceModel()
ott.assert_almost_equal(optimized_isotropic_model.getScale(), [1.34], 0.2, 0.0)
ott.assert_almost_equal(
log10(optimized_isotropic_model.getNuggetFactor()), -1.9, 0.25, 0.0
)
|