.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_probabilistic_modeling/stochastic_processes/plot_gaussian_processes_comparison.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_probabilistic_modeling_stochastic_processes_plot_gaussian_processes_comparison.py: Compare covariance models ========================= .. GENERATED FROM PYTHON SOURCE LINES 6-9 The main goal of this example is to briefly review the most important covariance models and compare them in terms of regularity. We first show how to define a covariance model, a temporal grid and a gaussian process. We first consider the squared exponential covariance model and show how the trajectories are sensitive to its parameters. We show how to define a trend. In the final section, we compare the trajectories from exponential and Matérn covariance models. .. GENERATED FROM PYTHON SOURCE LINES 11-15 References ---------- * Carl Edward Rasmussen and Christopher K. I. Williams (2006) Gaussian Processes for Machine Learning. Chapter 4: "Covariance Functions", www.GaussianProcess.org/gpml .. GENERATED FROM PYTHON SOURCE LINES 17-24 The anisotropic squared exponential model ----------------------------------------- The `SquaredExponential` class allows one to define covariance models : * :math:`\sigma\in\mathbb{R}` is the amplitude parameter, * :math:`\boldsymbol{\theta}\in\mathbb{R}^d` is the scale. .. GENERATED FROM PYTHON SOURCE LINES 26-33 .. code-block:: default import pylab as pl from openturns.viewer import View import openturns as ot import openturns.viewer as viewer from matplotlib import pylab as plt ot.Log.Show(ot.Log.NONE) .. GENERATED FROM PYTHON SOURCE LINES 34-35 Amplitude values .. GENERATED FROM PYTHON SOURCE LINES 35-41 .. code-block:: default amplitude = [3.5] # Scale values scale = [1.5] # Covariance model myModel = ot.SquaredExponential(scale, amplitude) .. GENERATED FROM PYTHON SOURCE LINES 42-56 Gaussian processes ------------------ In order to create a `GaussianProcess`, we must have * a covariance model, * a grid. Optionnally, we can define a trend (we will see that later in the example). By default, the trend is zero. We consider the domain :math:`\mathcal{D}=[0,10]`. We discretize this domain with 100 cells (which corresponds to 101 nodes), with steps equal to 0.1 starting from 0: .. math:: (x_0=x_{min}=0,\:x_1=0.1,\:\ldots,\:x_n=x_{max}=10). .. GENERATED FROM PYTHON SOURCE LINES 58-66 .. code-block:: default xmin = 0.0 step = 0.1 n = 100 myTimeGrid = ot.RegularGrid(xmin, step, n+1) graph = myTimeGrid.draw() graph.setTitle("Regular grid") view = viewer.View(graph) .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_001.png :alt: Regular grid :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 67-68 Then we create the gaussian process (by default the trend is zero). .. GENERATED FROM PYTHON SOURCE LINES 70-73 .. code-block:: default process = ot.GaussianProcess(myModel, myTimeGrid) process .. raw:: html

GaussianProcess(trend=[x0]->[0.0], covariance=SquaredExponential(scale=[1.5], amplitude=[3.5]))



.. GENERATED FROM PYTHON SOURCE LINES 74-75 Then we generate 10 trajectores with the `getSample` method. This trajectories are in a `ProcessSample`. .. GENERATED FROM PYTHON SOURCE LINES 77-81 .. code-block:: default nbTrajectories = 10 sample = process.getSample(nbTrajectories) type(sample) .. GENERATED FROM PYTHON SOURCE LINES 82-83 We can draw the trajectories with `drawMarginal`. .. GENERATED FROM PYTHON SOURCE LINES 85-90 .. code-block:: default graph = sample.drawMarginal(0) graph.setTitle("amplitude=%.3f, scale=%.3f" % (amplitude[0], scale[0])) view = viewer.View(graph) .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_002.png :alt: amplitude=3.500, scale=1.500 :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_002.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 91-92 In order to make the next examples easier, we define a function which plots a given number of trajectories from a gaussian process based on a covariance model. .. GENERATED FROM PYTHON SOURCE LINES 94-103 .. code-block:: default def plotCovarianceModel(myCovarianceModel, myTimeGrid, nbTrajectories): '''Plots the given number of trajectories with given covariance model.''' process = ot.GaussianProcess(myCovarianceModel, myTimeGrid) sample = process.getSample(nbTrajectories) graph = sample.drawMarginal(0) graph.setTitle("") return graph .. GENERATED FROM PYTHON SOURCE LINES 104-105 The amplitude parameter sets the variance of the process. A greater amplitude increases the chances of getting larger absolute values of the process. .. GENERATED FROM PYTHON SOURCE LINES 107-114 .. code-block:: default amplitude = [7.] scale = [1.5] myModel = ot.SquaredExponential(scale, amplitude) graph = plotCovarianceModel(myModel, myTimeGrid, 10) graph.setTitle("amplitude=%.3f, scale=%.3f" % (amplitude[0], scale[0])) view = viewer.View(graph) .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_003.png :alt: amplitude=7.000, scale=1.500 :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 115-116 Modifying the scale parameter is here equivalent to stretch or contract the "time" :math:`x`. .. GENERATED FROM PYTHON SOURCE LINES 118-125 .. code-block:: default amplitude = [3.5] scale = [0.5] myModel = ot.SquaredExponential(scale, amplitude) graph = plotCovarianceModel(myModel, myTimeGrid, 10) graph.setTitle("amplitude=%.3f, scale=%.3f" % (amplitude[0], scale[0])) view = viewer.View(graph) .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_004.png :alt: amplitude=3.500, scale=0.500 :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_004.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 126-130 Define the trend ---------------- The trend is a deterministic function. With the `GaussianProcess` class, the associated process is the sum of a trend and a gaussian process with zero mean. .. GENERATED FROM PYTHON SOURCE LINES 132-135 .. code-block:: default f = ot.SymbolicFunction(['x'], ['2*x']) fTrend = ot.TrendTransform(f, myTimeGrid) .. GENERATED FROM PYTHON SOURCE LINES 136-142 .. code-block:: default amplitude = [3.5] scale = [1.5] myModel = ot.SquaredExponential(scale, amplitude) process = ot.GaussianProcess(fTrend, myModel, myTimeGrid) process .. raw:: html

GaussianProcess(trend=[x]->[2*x], covariance=SquaredExponential(scale=[1.5], amplitude=[3.5]))



.. GENERATED FROM PYTHON SOURCE LINES 143-149 .. code-block:: default nbTrajectories = 10 sample = process.getSample(nbTrajectories) graph = sample.drawMarginal(0) graph.setTitle("amplitude=%.3f, scale=%.3f" % (amplitude[0], scale[0])) view = viewer.View(graph) .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_005.png :alt: amplitude=3.500, scale=1.500 :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_005.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 150-157 Other covariance models ----------------------- There are other covariance models. The models which are used more often are the following. * `SquaredExponential`. The generated processes can be derivated in mean square at all orders. * `MaternModel`. When :math:`\nu\rightarrow+\infty`, it converges to the squared exponential model. This model can be derivated :math:`k` times only if :math:`k<\nu`. In other words, when :math:`\nu` increases, then the trajectories are more and more regular. The particular case :math:`\nu=1/2` is the exponential model. The most commonly used values are :math:`\nu=3/2` and :math:`\nu=5/2`, which produce trajectories that are, in terms of regularity, in between the squared exponential and the exponential models. * `ExponentialModel`. The associated process is continus, but not differentiable. .. GENERATED FROM PYTHON SOURCE LINES 159-161 The Matérn and exponential models --------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 163-170 .. code-block:: default amplitude = [1.0] scale = [1.0] nu1, nu2, nu3 = 2.5, 1.5, 0.5 myModel1 = ot.MaternModel(scale, amplitude, nu1) myModel2 = ot.MaternModel(scale, amplitude, nu2) myModel3 = ot.MaternModel(scale, amplitude, nu3) .. GENERATED FROM PYTHON SOURCE LINES 171-176 .. code-block:: default nbTrajectories = 10 graph1 = plotCovarianceModel(myModel1, myTimeGrid, nbTrajectories) graph2 = plotCovarianceModel(myModel2, myTimeGrid, nbTrajectories) graph3 = plotCovarianceModel(myModel3, myTimeGrid, nbTrajectories) .. GENERATED FROM PYTHON SOURCE LINES 177-188 .. code-block:: default fig = pl.figure(figsize=(20, 6)) ax1 = fig.add_subplot(1, 3, 1) _ = View(graph1, figure=fig, axes=[ax1]) _ = ax1.set_title("Matern 5/2") ax2 = fig.add_subplot(1, 3, 2) _ = View(graph2, figure=fig, axes=[ax2]) _ = ax2.set_title("Matern 3/2") ax3 = fig.add_subplot(1, 3, 3) _ = View(graph3, figure=fig, axes=[ax3]) _ = ax3.set_title("Matern 1/2") .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_006.png :alt: , Matern 5/2, Matern 3/2, Matern 1/2 :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_006.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 189-190 We see than, when :math:`\nu` increases, then the trajectories are smoother and smoother. .. GENERATED FROM PYTHON SOURCE LINES 192-194 .. code-block:: default myExpModel = ot.ExponentialModel(scale, amplitude) .. GENERATED FROM PYTHON SOURCE LINES 195-199 .. code-block:: default graph = plotCovarianceModel(myExpModel, myTimeGrid, nbTrajectories) graph.setTitle("Exponential") view = viewer.View(graph) .. image-sg:: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_007.png :alt: Exponential :srcset: /auto_probabilistic_modeling/stochastic_processes/images/sphx_glr_plot_gaussian_processes_comparison_007.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 200-201 We see that the exponential model produces very irregular trajectories. .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.733 seconds) .. _sphx_glr_download_auto_probabilistic_modeling_stochastic_processes_plot_gaussian_processes_comparison.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_gaussian_processes_comparison.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_gaussian_processes_comparison.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_