## 3 Results and Discussions
The model was trained using the Levenberg-Marquardt algorithm (LM) [44; 45]: This is a standard iterative regression technique for solving multivariable nonlinear problems. The algorithm is composed of a slow but converging gradient descent phase, followed by a faster Gauss-Newton solver. The algorithm tries to work on the strengths of the two approaches: gradient descent [46] and Gauss-Newton [47], to take advantage of both. The back propagation algorithm bases the updating of the weights on the rules of the descending gradient [48; 49]. The mean square error is indicated with \(E\) between the output produced by the network and the desired one and with \(w_{ij}\) the generic element of the weight matrix \(W\), the descending gradient rule can be expressed as follows:  
\[\Delta w_{ij}=\ -\eta\times\frac{\partial E}{\partial w_{ij}} \tag{8}\]  
In the Equation (8) \(\eta\) is the learning rate and regulates the speed with which the adopted algorithm learns. The algorithm works as follows:  
* If the error increases with increasing weights, that is \(\partial E/\partial w_{ij}>0\), then the algorithm predicts a decrease in weights and therefore \(\Delta w_{ij}<0\)
* If the error decreases as the value of the synaptic weights increases then the opposite occurs and therefore \(\Delta w_{ij}>0\). This algorithm has some limits, including a rather slow convergence and the risk of occurring in local minima. To overcome these drawbacks some variants have been proposed. Among these we remember the variant that provides for the addition of a memory term of the past update, or the presence of a learning rate coefficient that varies with time [50]. [PERSON]'s algorithm predicts a faster convergence than the back propagation algorithm. In this case the weights are updated according to the following equation:  
\[W(t+1)=W(t)-\ H^{-1}(t)\times g(t) \tag{9}\]  
Here:  
* \(W\) is the weight matrix. * \(H\) is the Hessian matrix. The Hessian matrix of a function is the matrix containing the second derivatives of that function. * \(g\) is the error gradient. This algorithm requires a considerable computational capacity, since, during the training phase, it is necessary to calculate the Hessian matrix at each step, that is, the matrix of the second derivatives of the error with respect to the weights. To overcome this drawback, we can use a class of algorithms known as quasi-Newton algorithms which are based on [PERSON]'s algorithm, but do not require the calculation of the Hessian matrix. An example is the Levenberg-Marquardt algorithm [51]. It provides for the approximation of the Hessian matrix and the gradient of the error as follows:  
\[H=J^{T}\times J,\ \ \ g=J^{T}\times e \tag{10}\]  
Here:  
* \(J\) is the Jacobian matrix whose elements are the first derivatives of the error with respect to the weights. * \(e\) is the vector of errors. With these approximations, the update rule of the weight matrix is transformed as follows:  
\[W(t+1)=W(t)-\left[J^{T}*J+\ \mu*I\right]^{-1}*J^{T}*e \tag{11}\]  
In Equation (11), \(\mu\) is a scalar which balances the two contributions of the algorithm: Newton and gradient descent. When the scalar is zero, Equation (11) represents [PERSON]'s method with an approximation of the Hessian matrix. With \(\mu\) sufficiently large, Equation (11) represents the method of descending the gradient with a small step size. We know that [PERSON]'s method is faster and more accurate when we are close to a minimum of error. So, our aim is to use [PERSON]'s method as quickly as possible. Therefore, \(\mu\) is decreased after each successful pass and is increased only when a temporary pass would increase the performance function [52]. Thus, the performance function is always reduced with each iteration of the algorithm. Figure 7 shows how these parameters change during the training phase. To measure the performance returned by the prediction model, various metrics were adopted. A first check can be performed using a measure of the variability present between the real data and those returned by the model.