## 2 Materials and Methods
### Normality Models Based on ELM  
In wind turbine prognosis, cases representing a malfunction of a particular system or subsystem are extremely rare. Furthermore, the inconsistency of labelling when dealing with extreme imbalance in class representation suggests using a normality model associated with a regression technique rather than classification-based models. The critical point is to train a normality model using collections of data recorded in different operating regimes when the turbines are operating correctly. For the model to be sufficiently accurate, the records must be rich enough to represent different wind and weather conditions. Accordingly, we propose an SLFN (see Figure 1) trained under the ELM paradigm because it performs very well and the training process is fast and effective [4]. The procedure is simple. From a set of \(L\) variables of a given subsystem at the instant \(i\), organised in the vector \(\mathbf{x}_{i}=[x_{0}\cdots x_{L-1}]^{T}\), we make the prediction of another target variable of this same subsystem and at the same instant of time, \(t_{i}\). It is important to note that we will also have the real measure of \(t_{i}\), but in our estimation of it, named \(\hat{y}_{i}\), we will only use \(\mathbf{x}_{i}\). The underlying idea is that when the system is working properly, the estimate provided by the normality model and the measurement of the target signal will be nearly the same, and its scatter plot will fit well on a 45-degree line. However, when systems deteriorate, measurements and estimates begin to diverge. If the system malfunction persists, the slope of the regression line built by integrating this new data begins to change. Given that the input variables can have a highly different dynamic range, we apply a Z-score normalisation (see Figure 1). The normalised variables are the inputs of the SLFN. If we follow the signal flow of Figure 1 we will see that, for a network with \(H\) hidden nodes, the variables are multiplied by the input weights of the network, organised as the matrix\(\mathbf{W}\) of dimensions \(L\times H\), and the biases are added, as the vector \(\mathbf{b}\) of \(H\) elements, to finally obtain the signal at each node. Then, to calculate the estimation \(\hat{y}_{i}\) we multiply the signal of each node by the output weights, arranged in the vector \(\mathbf{o}\), also of \(H\) elements. Finally, the activation function (sign function in this case) is applied to this result. Mathematically, for the time instant \(i\) we will have:  
\[\hat{y}_{i}=sig\Big{(}\mathbf{x}_{i}^{T}\mathbf{W}+\mathbf{b}^{T}\Big{)} \mathbf{o}. \tag{1}\]  
Half of the data is used to train the model. The training data, after normalisation, is organised into the matrix \(\mathbf{X}=[\mathbf{x}_{1}\cdots\mathbf{x}_{i}\cdots\mathbf{x}_{N}]\) of size \(L\times N\), together with the corresponding target for each sample, the vector \(\mathbf{t}=[t_{1}\cdots t_{i}\cdots t_{N}]^{T}\). The goal is to find the weights \(\mathbf{W}\), \(\mathbf{b}\) i \(\mathbf{o}\) that better fit the following equation:  
\[sig(\mathbf{X}^{T}\mathbf{W}+\mathbf{u}\mathbf{b}^{T})\mathbf{o}=\mathbf{t}, \tag{2}\]  
\(\mathbf{u}\) being the \(N\times 1\) all-ones vector. In order to simplify the notation let us define the \(N\times H\) matrix \(\mathbf{H}\) as:  
\[\mathbf{H}=sig(\mathbf{X}^{T}\mathbf{W}+\mathbf{u}\mathbf{b}^{T}). \tag{3}\]  
According to the ELM paradigm, once \(H\) is determined, \(\mathbf{W}\) and \(\mathbf{b}\) are randomly selected, so \(\mathbf{H}\) will be completely defined. A zero-mean, unit-variance Gaussian distribution function is used to generate these random values. Then, the output weight matrix \(\mathbf{o}\), provided that \(\big{(}\mathbf{H}^{T}\mathbf{H}\big{)}^{-1}\) is non singular, can be computed as:  
\[\mathbf{o}=\Big{(}\mathbf{H}^{T}\mathbf{H}\Big{)}^{-1}\mathbf{H}^{T}\mathbf{ t}=\mathbf{H}^{\dagger}\mathbf{t}, \tag{4}\]  
where \(\mathbf{H}^{\dagger}\) is the Moore-Penrose inverse.