## 2 Theoretical Framework
### Gaussian Processes  
Stochastic processes can be briefly defined as the generalization of random variables to functions. More precisely, they are collections of random variables indexed by the input vector \(\mathbf{x}\)[41]. Thus, if \(\mathbf{x}_{1},\mathbf{x}_{2},\ldots,\mathbf{x}_{N}\) are the d-dimensional training data points, a process is defined by the joint probability density of any finite subset \((Y(\mathbf{x}_{1}),\ldots,Y(\mathbf{x}_{k}))\) (with \(k<N\)). A Gaussian process is a stochastic process whose joint density function is Gaussian and, therefore, completely defined by its mean and co-variance [48; 49; 50; 51].  
If the training data set is made of \(n\) ordered pairs \((\mathbf{x}_{1},t_{1}),\ldots,(\mathbf{x}_{n},t_{n})\), where \(t_{i}\) is a sample from a random variable \(T(\mathbf{x}_{i})\), then a prediction \(T^{*}\) at a new input \(\mathbf{x}^{*}\) is given by the conditional distribution \(p(T^{*}|T_{1},\ldots,T_{N})\). It can be demonstrated that the predicted mean and co-variance at \(\mathbf{x}^{*}\) are given by [41]:  
\[E[T^{*}]=\mathbf{k}^{*}\mathbf{K}^{-1}\mathbf{t}, \tag{7}\]  
\[var[T^{*}]=\mathbf{k}^{*}-\mathbf{k}^{T}\mathbf{K}^{-1}\mathbf{k}, \tag{8}\]  
where \(\mathbf{k}\) denotes the co-variance vector of the training set (TS), \(k^{*}\) denotes the co-variance of the new input \(\mathbf{x}^{*}\), \(\mathbf{K}\) denotes the co-variance matrix, and \(\mathbf{t}\) denotes the vector of the samples from the random variable \(\mathbf{x}_{i}\)).  
For simplicity, it is assumed that the Gaussian process has zero mean, therefore it is necessary to define just the co-variance between two points \(\mathbf{x}\) and \(\mathbf{x}^{\prime}\); this is done with the co-variance function \(C(\mathbf{x},\mathbf{x}^{\prime})\). Such a function is a crucial element in a Gaussian process predictor, as it encodes the assumptions about the function to learn in terms of similarity between data points (close points are more likely to have similar target values, hence training points close to a test points should be informative about the prediction at that point).  
The co-variance function chosen in this work is the squared exponential. This function is infinitely differentiable, thus very smooth [40]. Even though some authors, such as [PERSON] [52], argue that such a smoothness is unrealistic, therefore recommending the Matern class of covariance functions, the squared exponential function is an excellent trade-off among code implementation, hyperparameters evaluation, and interpretation, which explains why it is probably the most used [40]. In fact, this type of covariance function basically represents the exponential of a weighted squared distance between points in \(\mathbb{R}^{d}\), so that vectors close in the input space give rise to highly correlated outputs:  
\[C(\mathbf{x}^{(i)},\mathbf{x}^{(j)})=\gamma_{0}e^{\left[-\frac{1}{2}\sum_{l= 1}^{d}a_{l}(x_{l}^{(i)}-x_{l}^{(j)})^{2}\right]}+b. \tag{9}\]  
The term \(v_{0}\) controls the amplitude of the process, and \(b\) is a bias term related to the vertical offset. The term \(a_{l}\) weighs the importance of the dimension under consideration (for example, if it is small, then the \(l\)-th input is down-weighted).  
Obviously, it is unrealistic to assume the knowledge of all the co-variance parameters _a priori_. It is, therefore, useful to start with a guess and adapt the values of these parameters to the training data set. This operation is carried out by means of scaled conjugate gradient optimization [41], which suitably modulates the co-variance parameters once a random, initial guess is provided.