## 2 Materials and Methods
### Feature Transformation  
Two new variables were identified: \"Day of Year\" and \"Hour of Year\". These are responsible for the ordinal number of the day in the year and the ordinal number of the hour of the day, respectively. Many machine learning algorithms require class labels to be encoded as integer values. There are many different ways to encode class labels. This work used the one-hot encoding algorithm, the idea of which is to create a new pseudo-feature for each unique value in the quality attribute column. For the considered dataset, all unique values of cloud parameters (LowLevCl, Amount-LowLevCl, MidLevCl and HighLevCl) given in Table 4 were presented with unitary coding. Since the values about cloudiness in the original dataset are in the natural language format, the pre-processing algorithm should be developed carefully. It can be presented as follows:  
1. Convert all characters to lower case;
2. Replace punctuation marks and the symbols '_','+', and '_'-' with spaces;
3. Apply tokenisation;
4. Apply stemming. For stemming, we proposed to apply the Porter algorithm [PERSON] (1986). As a result, phrases such as \"cumulus clouds\", \"Cumulus cloud\", \"cumul. cloud.\", and \"cumulus-clouds\" turn into the identical \"cumul cloud\". In addition, values with negations were removed (\"not observed...\", \"absent...\", \"no...\"), since only features characterising the presence of a particular type of cloud were used. Preliminary experiments showed that using all cloud types (Table 4) separately did not improve forecasting accuracy, so many types were combined: \begin{table}
\begin{tabular}{c c c} \hline \hline
**Designation** & **Category** & **Description** \\ \hline NoCloud & Low, Middle, High & No clouds recorded \\ Sc & Low & Stratocumulus clouds \\ St & Low & Stratus clouds \\ Cb & Low & Cumulominus clouds \\ CuHum & Low & Cumulus flat clouds \\ CuFrac & Low & Cumulus fractus clouds \\ CiUnc & High & Cirrus claw clouds \\ CiSpissFromCb & High & Dense cirrus clouds emerging from cumulonimbus ones \\ CuMed & Middle & Cumulus mediocris \\ CuCong & Low & Cumulus congestus clouds \\ CbInc & Low & Cumulonimbus filament clouds (anvil cloud) \\ CbCalcv & Low & Cumulominus canvas \\ Fmb & High & Fractionimbus clouds \\ StNeb & Low & Stratus nebulosus \\ StFra & Low & Layered fractus clouds \\ As & Mid & Alto-stratus clouds \\ ScNonCu & Low & Stratocumulus clouds that did not originate from cumulus clouds \\ Ci & High & Spindrift clouds \\ Cc & High & Cirrocumulus clouds \\ Cs & High & Cirrostratus clouds \\ AcFromCu/Cb & Mid & Altocumulus clouds originating from cumulus clouds (or cumulonimbus clouds) \\ ScFromCu & Low & Stratocumulus clouds originating from cumulus clouds \\ CiSpissInt & High & Cirrus dense curled clouds \\ CiCast & High & Spindrift castellanus clouds \\ CiFl & High & Cirrus floccus \\ Cu & Low & Cumulus clouds \\ CiFibr & High & Cirrus fibratus \\ \hline \hline \end{tabular}
\end{table} 
Table 4: Types of cloud descriptions and their designations. * LowCb: Cb, CbInc, and CbCalv;
* LowCu: Cu, CuHum, CuFrac, and CuCong;
* LowSt: St, Sc, StNed, StFrac, ScNonCu, and ScFromCu;
* Mid: CuMed, As, and AcFromCu/Cb;
* HiS: CiSpissFromCb, and CiSpissInt;
* HiFmb: Frnb;
* HiCi: Ci, Cc, Cs, CiUnc, CiCast, CiFl, and CiFibr. The algorithm for converting cloud records is given below (Algorithm 1). As an input, it receives the text of record \(X\); a dictionary \(M\) that, for result of stemming each type, represented in Table 4, contains a category index from the list above (e.g., {'Altostratus cloud': 4}); stem words carrying negation, \(B\) (\"no\", \"not\", \"absent\"); and the number of categories from the list above \(n\) (equal to 7).