File: t_GaussianProcessRegression_nuggetFactor.py

package info (click to toggle)
openturns 1.26-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 67,708 kB
  • sloc: cpp: 261,605; python: 67,030; ansic: 4,378; javascript: 406; sh: 185; xml: 164; makefile: 101
file content (74 lines) | stat: -rw-r--r-- 2,374 bytes parent folder | download
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
62
63
64
65
66
67
68
69
70
71
72
73
74
#! /usr/bin/env python

import openturns as ot
import openturns.testing as ott
import openturns.experimental as otexp
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.LinearBasisFactory(dimension).build()
covarianceModel = ot.SquaredExponential(dimension)
covarianceModel.activateNuggetFactor(True)

# Gaussian process fitter
fitter_algo = otexp.GaussianProcessFitter(x, y, covarianceModel, basis)
fitter_algo.run()
fitter_result = fitter_algo.getResult()

algo = otexp.GaussianProcessRegression(fitter_result)
algo.run()
result = algo.getResult()
optimized_covariance_model = result.getCovarianceModel()
ott.assert_almost_equal(
    optimized_covariance_model.getScale(), [0.874623, 0.491866, 0.84785], 0.2, 0.0
)
ott.assert_almost_equal(
    log10(optimized_covariance_model.getNuggetFactor()), -0.782689, 0.25, 0.0
)

# Product covariance kernel
# (with SquaredExponential => identical to the first)
product = ot.ProductCovarianceModel([ot.SquaredExponential()] * dimension)
product.activateNuggetFactor(True)

fitter_algo_product = otexp.GaussianProcessFitter(x, y, product, basis)
fitter_algo_product.run()
fitter_result_product = fitter_algo_product.getResult()

algo_product = otexp.GaussianProcessRegression(fitter_result_product)
algo_product.run()
result_product = algo_product.getResult()
optimized_product_model = result_product.getCovarianceModel()
ott.assert_almost_equal(
    log10(optimized_product_model.getNuggetFactor()), -0.782689, 0.25, 0.0
)

# Isotropic covariance kernel
isotropic = ot.IsotropicCovarianceModel(ot.SquaredExponential(), dimension)
isotropic.activateNuggetFactor(True)

fitter_algo_iso = otexp.GaussianProcessFitter(x, y, isotropic, basis)
fitter_algo_iso.run()
fitter_result_iso = fitter_algo_iso.getResult()

algo_iso = otexp.GaussianProcessRegression(fitter_result_iso)
algo_iso.run()
result_iso = algo_iso.getResult()
optimized_isotropic_model = result_iso.getCovarianceModel()
ott.assert_almost_equal(
    log10(optimized_isotropic_model.getNuggetFactor()), -1.9, 0.25, 0.0
)