## 2 Materials and Methods
### Hybrid Classifiers  
As it will be demonstrated in the Results Section, the classification performance of the seven simple algorithms depends on the size of the training set. In order to investigate the dependence of the performance of the classifiers on the size of the training set, it was considered appropriate to develop an optimization method to search for optimal results with respect to classification performance and training set size. Such an optimization method has two objectives as follows: (a) to optimize the training set, i.e., to search for the smallest training set that the machine learning classifier can use to maximize classification performance on the data of the test set, which remains unseen during the training procedure, and, at the same time, (b) to achieve accuracy equal to the maximum value, ideally equal to 1 (100%). In order to search for solutions that fulfill both the aforementioned objectives, multi-objective, generational Genetic Algorithms (GAs) were implemented asthe optimization method [40], given that the search space was huge. Specifically, if \(S\) is the size of the training set in number of cases (patients) and \(N\) is the total number of cases in the dataset (\(N=660\) in the present study), then there are  
\[ \begin{pmatrix}N\\ S\end{pmatrix} =\frac{N!}{(N-S)!S! }\]  
distinct ways (combinations) to select \(S\) out of total \(N\) cases in order to construct the training set. For example, according to the previous formula, there exist more than \(10^{120}\) ways to choose \(110\) out of \(660\) cases. Considering that the training set could have, at its minimum, one case, and, at its maximum, \(N-1\) cases, the total number of distinct ways to construct the training set is given by the sum  
\[\sum_{S=1}^{N-1} \begin{pmatrix}N\\ S\end{pmatrix} \]  
of possible combinations. The implemented GAs evolved populations of individuals with a genome consisting of \(660\) genes (bits), with each one of these genes corresponding to a patient (case) of the dataset. Therefore, the size of the search space was \(2^{N}\), which, for \(N=660\), results in a search space size on the order of \(10^{198}\). If the value of a gene is \(1\), this means that the corresponding case is included in the training set (so, it is excluded from the test set and it is unseen during the training procedure). Conversely, if the value of a gene equals \(0\), this means that the corresponding case is not included in the training set (therefore, it is included in the test set). To demonstrate the genome encoding, let us consider a dataset constructed of \(n=10\) cases. Considering that the cases in the dataset are numbered from \(1\) up to \(10\) and the length of the genome is defined to be \(10\), then each one gene corresponds to one particular case of the dataset. For example, if the genome of an individual of the GA is \(0101001000\), then the training set includes the cases that are numbered in the dataset as \(2\), \(4\), and \(7\), and the corresponding test set includes the cases that are numbered in the dataset as \(1\), \(3\), \(5\), \(6\), \(8\), \(9\), and \(10\). In this demonstration example, the training set is the \(30\%\) of the dataset and the test set is the \(70\%\) of the dataset and, of course, the cases of the test set are unseen to the classification algorithms during the training procedure. When the training procedure is completed, the trained algorithm is evaluated with respect to its classification performance on the cases of the test set, which were unseen until that point. Based on the above, the fitness function, with which the individuals in the GA population are evaluated, is given by:  
\[f=acc-alpha\frac{S}{N} \tag{2}\]  
where \(acc\) is the classification accuracy achieved on a specific test set defined by the genome of a specific individual, after the completion of the training procedure, where the corresponding training set of that individual was used. In addition, _alpha_ is a weight coefficient of \(S\) with respect to \(acc\).