Comparison of Gaussian process software

From testwiki
Revision as of 05:21, 30 January 2025 by imported>Liquider (Comparison table: Add SAMBO)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Template:Short description This is a comparison of statistical analysis software that allows doing inference with Gaussian processes often using approximations.

This article is written from the point of view of Bayesian statistics, which may use a terminology different from the one commonly used in kriging. The next section should clarify the mathematical/computational meaning of the information provided in the table independently of contextual terminology.

Description of columns

This section details the meaning of the columns in the table below.

Solvers

These columns are about the algorithms used to solve the linear system defined by the prior covariance matrix, i.e., the matrix built by evaluating the kernel.

  • Exact: whether generic exact algorithms are implemented. These algorithms are usually appropriate only up to some thousands of datapoints.
  • Specialized: whether specialized exact algorithms for specific classes of problems are implemented. Supported specialized algorithms may be indicated as:
    • Kronecker: algorithms for separable kernels on grid data.[1]
    • Toeplitz: algorithms for stationary kernels on uniformly spaced data.[2]
    • Semisep.: algorithms for semiseparable covariance matrices.[3]
    • Sparse: algorithms optimized for sparse covariance matrices.
    • Block: algorithms optimized for block diagonal covariance matrices.
    • Markov: algorithms for kernels which represent (or can be formulated as) a Markov process.[4]
  • Approximate: whether generic or specialized approximate algorithms are implemented. Supported approximate algorithms may be indicated as:
    • Sparse: algorithms based on choosing a set of "inducing points" in input space,[5] or more in general imposing a sparse structure on the inverse of the covariance matrix.
    • Hierarchical: algorithms which approximate the covariance matrix with a hierarchical matrix.[6]

Input

These columns are about the points on which the Gaussian process is evaluated, i.e. x if the process is f(x).

  • ND: whether multidimensional input is supported. If it is, multidimensional output is always possible by adding a dimension to the input, even without direct support.
  • Non-real: whether arbitrary non-real input is supported (for example, text or complex numbers).

Output

These columns are about the values yielded by the process, and how they are connected to the data used in the fit.

  • Likelihood: whether arbitrary non-Gaussian likelihoods are supported.
  • Errors: whether arbitrary non-uniform correlated errors on datapoints are supported for the Gaussian likelihood. Errors may be handled manually by adding a kernel component, this column is about the possibility of manipulating them separately. Partial error support may be indicated as:
    • iid: the datapoints must be independent and identically distributed.
    • Uncorrelated: the datapoints must be independent, but can have different distributions.
    • Stationary: the datapoints can be correlated, but the covariance matrix must be a Toeplitz matrix, in particular this implies that the variances must be uniform.

Hyperparameters

These columns are about finding values of variables which enter somehow in the definition of the specific problem but that can not be inferred by the Gaussian process fit, for example parameters in the formula of the kernel.

  • Prior: whether specifying arbitrary hyperpriors on the hyperparameters is supported.
  • Posterior: whether estimating the posterior is supported beyond point estimation, possibly in conjunction with other software.

If both the "Prior" and "Posterior" cells contain "Manually", the software provides an interface for computing the marginal likelihood and its gradient w.r.t. hyperparameters, which can be feed into an optimization/sampling algorithm, e.g., gradient descent or Markov chain Monte Carlo.

Linear transformations

These columns are about the possibility of fitting datapoints simultaneously to a process and to linear transformations of it.

  • Deriv.: whether it is possible to take an arbitrary number of derivatives up to the maximum allowed by the smoothness of the kernel, for any differentiable kernel. Example partial specifications may be the maximum derivability or implementation only for some kernels. Integrals can be obtained indirectly from derivatives.
  • Finite: whether finite arbitrary nm linear transformations are allowed on the specified datapoints.
  • Sum: whether it is possible to sum various kernels and access separately the processes corresponding to each addend. It is a particular case of finite linear transformation but it is listed separately because it is a common feature.

Comparison table

Name License Language Solvers Input Output Hyperparameters Linear transformations Name
Exact Specialized Approximate ND Template:Nowrap | Non-real Likelihood Errors Prior Posterior Deriv. Finite Sum
PyMC Template:Free Python Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:Yes Template:Yes PyMC
Stan Template:Free custom Template:Yes Template:No Template:No Template:Yes Template:No Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:Yes Template:Yes Stan
scikit-learn Template:BSD-lic Python Template:Yes Template:No Template:No Template:Yes Template:Yes Template:Partial Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No scikit-learn
fbm[7] Template:Free C Template:Yes Template:No Template:No Template:Yes Template:No Template:Partial Template:Partial Template:Partial Template:Yes Template:No Template:No Template:Yes fbm
GPML[8][7] Template:BSD-lic MATLAB Template:Yes Template:No Template:Yes Template:Yes Template:No Template:Partial Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No GPML
GPstuff[7] Template:GPL-lic MATLAB, R Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:Partial Template:Yes Template:Partial Template:Yes Template:Partial Template:No Template:Yes GPstuff
GPy[9] Template:BSD-lic Python Template:Yes Template:No Template:Yes Template:Yes Template:No Template:Partial Template:Partial Template:Yes Template:Yes Template:No Template:No Template:No GPy
GPflow[9] Template:Free Python Template:Yes Template:No Template:Yes Template:Yes Template:No Template:Partial Template:Partial Template:Yes Template:Yes Template:No Template:No Template:No GPflow
GPyTorch[10] Template:Free Python Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:Partial Template:Partial Template:Yes Template:Yes Template:Partial Template:Partial Template:Partial GPyTorch
GPvecchia[11] Template:GPL-lic R Template:Yes Template:No Template:Yes Template:Yes Template:No Template:Partial Template:Partial Template:No Template:No Template:No Template:No Template:No GPvecchia
pyGPs[12] Template:BSD-lic Python Template:Yes Template:No Template:Yes Template:Yes Template:Partial Template:Partial Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No pyGPs
gptk[13] Template:BSD-lic R Template:Yes Template:Unknown Template:Yes Template:Yes Template:No Template:No Template:No Template:Partial Template:Partial Template:No Template:No Template:No gptk
celerite[3] Template:Free Python, Julia, C++ Template:No Template:YesTemplate:Efn Template:No Template:No Template:No Template:No Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No celerite
george[6] Template:Free Python, C++ Template:Yes Template:No Template:Yes Template:Yes Template:No Template:No Template:Partial Template:Partial Template:Partial Template:No Template:No Template:Partial george
neural-tangents[14]Template:Efn Template:Free Python Template:Yes Template:Yes Template:No Template:Yes Template:No Template:No Template:No Template:No Template:No Template:No Template:No Template:No neural-tangents
DiceKriging[15] Template:GPL-lic R Template:Yes Template:No Template:No Template:Yes Template:Unknown Template:No Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No DiceKriging
OpenTURNS[16] Template:LGPL-lic Python, C++ Template:Yes Template:No Template:No Template:Yes Template:No Template:No Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No OpenTURNS
UQLab[17] Template:Proprietary MATLAB Template:Yes Template:No Template:No Template:Yes Template:No Template:No Template:Yes Template:No Template:Partial Template:No Template:No Template:No UQLab
ooDACE [18] Template:Proprietary MATLAB Template:Yes Template:No Template:No Template:Yes Template:No Template:No Template:Yes Template:No Template:Partial Template:No Template:No Template:No ooDACE
DACE Template:Proprietary MATLAB Template:Yes Template:No Template:No Template:Yes Template:No Template:No Template:No Template:No Template:Partial Template:No Template:No Template:No DACE
GpGp Template:Free R Template:No Template:No Template:Yes Template:Yes Template:No Template:No Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No GpGp
SuperGauss Template:GPL-lic R, C++ Template:No Template:YesTemplate:Efn Template:No Template:No Template:No Template:No Template:No Template:Partial Template:Partial Template:No Template:No Template:No SuperGauss
STK Template:GPL-lic MATLAB Template:Yes Template:No Template:No Template:Yes Template:No Template:No Template:Partial Template:Partial Template:Partial Template:No Template:No Template:Partial STK
GSTools Template:LGPL-lic Python Template:Yes Template:No Template:No Template:Yes Template:No Template:No Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:No GSTools
PyKrige Template:BSD-lic Python Template:Yes Template:No Template:No Template:Partial Template:No Template:No Template:Partial Template:No Template:No Template:No Template:No Template:No PyKrige
GPR Template:Free C++ Template:Yes Template:No Template:Yes Template:Yes Template:No Template:No Template:Partial Template:Partial Template:Partial Template:Partial Template:No Template:No GPR
celerite2 Template:Free Python Template:No Template:YesTemplate:Efn Template:No Template:No Template:No Template:No Template:Partial Template:PartialTemplate:Efn Template:Partial Template:No Template:No Template:Yes celerite2
SMT[19][20] Template:Free Python Template:Yes Template:YesTemplate:Efn Template:Yes Template:Yes Template:Yes Template:No Template:Partial Template:Yes Template:Yes Template:Yes Template:No Template:No SMT
GPJax Template:Free Python Template:Yes Template:No Template:Yes Template:Yes Template:Yes Template:Partial Template:No Template:Yes Template:Yes Template:No Template:No Template:No GPJax
Stheno Template:Free Python Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:No Template:Partial Template:Partial Template:Partial Template:Partial Template:No Template:Yes Stheno
CODES MATLAB Template:Yes Template:YesTemplate:Efn Template:Yes Template:Yes Template:No Template:No Template:Partial Template:Partial Template:Partial Template:No Template:No Template:No CODES
Egobox-gp[21] Template:Free Rust Template:Yes Template:No Template:Yes Template:Yes Template:Yes Template:Yes Template:Partial Template:Yes Template:Yes Template:Yes Template:No Template:No Egobox-gp
SAMBO Template:Free Python Template:Yes Template:No Template:Yes Template:Yes Template:Yes Template:Yes Template:Yes Template:Yes Template:Yes Template:No Template:No Template:No SAMBO
Name License Language Exact Specialized Approximate ND Template:Nowrap | Non-real Likelihood Errors Prior Posterior Deriv. Finite Sum Name
Solvers Input Output Hyperparameters Linear transformations


Notes

Template:Notelist

References

Template:Reflist

  • [1] The website hosting C. E. Rasmussen's book Gaussian processes for machine learning; contains a (partially outdated) list of software.
  1. Cite error: Invalid <ref> tag; no text was provided for refs named gilboa2015
  2. Cite error: Invalid <ref> tag; no text was provided for refs named zhang2005
  3. 3.0 3.1 Cite error: Invalid <ref> tag; no text was provided for refs named foreman2017
  4. Cite error: Invalid <ref> tag; no text was provided for refs named sarkka2013
  5. Cite error: Invalid <ref> tag; no text was provided for refs named candela2005
  6. 6.0 6.1 Cite error: Invalid <ref> tag; no text was provided for refs named ambikasaran2016
  7. 7.0 7.1 7.2 Cite error: Invalid <ref> tag; no text was provided for refs named vanhatalo2013
  8. Cite error: Invalid <ref> tag; no text was provided for refs named rasmussen2010
  9. 9.0 9.1 Cite error: Invalid <ref> tag; no text was provided for refs named matthews2017
  10. Cite error: Invalid <ref> tag; no text was provided for refs named gardner2018
  11. Cite error: Invalid <ref> tag; no text was provided for refs named zilber2021
  12. Cite error: Invalid <ref> tag; no text was provided for refs named neumann2015
  13. Cite error: Invalid <ref> tag; no text was provided for refs named kalaitzis2011
  14. Cite error: Invalid <ref> tag; no text was provided for refs named novak2020
  15. Cite error: Invalid <ref> tag; no text was provided for refs named roustant2012
  16. Cite error: Invalid <ref> tag; no text was provided for refs named baudin2015
  17. Cite error: Invalid <ref> tag; no text was provided for refs named marelli2014
  18. Cite error: Invalid <ref> tag; no text was provided for refs named couckuyt2014
  19. Cite error: Invalid <ref> tag; no text was provided for refs named saves2024
  20. Cite error: Invalid <ref> tag; no text was provided for refs named bouhlel2019
  21. Cite error: Invalid <ref> tag; no text was provided for refs named Lafage2022