## 3 A New Weighted Voting Ensemble Self-Labeled Algorithm  
In this section, we present a detailed description of the proposed self-labeled algorithm, which is based on an ensemble philosophy, entitled Weighed voting Ensemble Self-Labeled (WvEnSL) algorithm. Generally, the generation of an ensemble of classifiers considers mainly two steps: _Selection_ and _Combination_. The selection of the component classifiers is considered essential for the efficiency of the ensemble and the key point for its efficacy is based on their diversity and their accuracy; while the combination of the individual classifiers' predictions takes place through several techniques with different philosophy [24; 25]. By taking these into consideration, the proposed algorithm is based on the idea of selecting a set \(C=(C_{1},C_{2},\ldots,C_{N})\) of \(N\) self-labeled classifiers by applying different algorithms (with heterogeneous model representations) to a single dataset and the combination of their individual predictions takes place through a new weighted voting methodology. It is worth noticing that weighted voting is a commonly used strategy for combining predictions in pairwise classification in which the classifiers are not treated equally. Each classifier is evaluated on a evaluation set \(D\) and associated with a coefficient (weight), usually proportional to its classification accuracy. Let us consider a dataset \(D\) with \(M\) classes, which is utilized for the evaluation of each component classifier. More specifically, the performance of each classifier \(C_{i}\), with \(i=1,2,\ldots,N\) is evaluated on \(D\) and a \(N\times M\) matrix \(W\) is defined, as follows  
\[W=\left[ \begin{array}{cccc}w_{1,1}&w_{1,2}&\ldots&w_{1,M}\\ w_{2,1}&w_{2,2}&\ldots&w_{2,M}\\ \vdots&\vdots&\ddots&\vdots\\ w_{N,1}&w_{N,2}&\ldots&w_{N,M}\end{array} \right]\]where each element \(w_{ij}\) is defined by  
\[w_{ij}=\frac{2p_{j}^{(C_{i})}}{|D_{j}|+p_{j}^{(C_{i})}+q_{j}^{(C_{i})}}, \tag{1}\]  
where \(D_{j}\) is the set of instances of the dataset belonging to the class \(j\), \(p_{j}^{(C_{i})}\) are the number of correct predictions of classifier \(C_{i}\) on \(D_{j}\) and \(q_{j}^{(C_{i})}\) are the number of incorrect predictions of \(C_{i}\) that an instance belongs to class \(j\). Clearly, each weight \(w_{ij}\) is the \(F_{1}\)-score of classifier \(C_{i}\) for \(j\) class [26]. The rationale behind (1) is to measure the efficiency of each classifier, relative to each class \(j\) of the evaluation set \(D\). Subsequently, the class \(\hat{y}\) of each unknown instance \(x\) in the test set is computed by  
\[\hat{y}=\arg\max_{j}\sum_{i=1}^{N}w_{i,j}\,\chi_{A}(C_{i}(x)=j),\]  
where function \(\arg\max\) returns the value of index corresponding to the largest value from array, \(A=\{1,2,\ldots,M\}\) is the set of unique class labels and \(\chi_{A}\) is the characteristic function which takes into account the prediction \(j\in A\) of a classifier \(C_{i}\) on an instance \(x\) and creates a vector in which the \(j\) coordinate takes a value of one and the rest take the value of zero. At this point, it is worth mentioning that in our implementation we selected to evaluate the performance of each classifier of the ensemble on the initial training labeled set \(L\). A high-level description of the proposed framework is presented in Algorithm 1 which consists of three phases: _Training_, _Evaluation_ and _Weighted-Voting Prediction_. In the Training phase, the self-labeled algorithms, which constitute the ensemble are trained utilizing the same labeled \(L\) and unlabeled dataset \(U\) (Steps 1-3). Subsequently, in the Evaluation phase, the trained classifiers are evaluated using the training set \(L\) in order to calculate the weight matrix \(W\) (Steps 4-9). Finally, in the Weighted-Voting Prediction phase, the final hypothesis on each unlabeled example \(x\) of the test set combines the individual predictions of self-labeled algorithms utilizing the proposed weighted voting methodology (Steps 10-15).