# QFC: A Parallel Software Tool for Feature Construction, Based on Grammatical Evolution
## 1 Introduction  
Many problems from various research areas can be considered as classification or regression problems, such as problems from physics [1; 2; 3; 4], chemistry [5; 6; 7], economics [8; 9], pollution [10; 11; 12], medicine [13; 14], etc. These problems are usually tackled by learning models such as Artificial Neural Networks [15; 16], Radial Basis Function (RBF) networks [17; 18], Support Vector Machines (SVM) [19], Parse-matrix evolution [20], Multilevel Block Building [21], Development of Mathematical Expressions [22], etc. A review of the methods used in classification can be found in the work of [PERSON] et al. [23]. Learning data are usually divided into two parts: training data and test data. Learning models adjust their parameters, taking the training data as input, and are evaluated on the test data. The number of learning model parameters directly depends on the dimension of the input problem (number of features) and this means that for large problems, large amounts of memory are required to store and manage the learning models. In addition, as the number of parameters of the computational models grows, a longer time is required to adjust the parameters. Moreover, as the dimension of the data grows, more samples (patterns) are required in order to achieve high learning rates. A discussion on how the dimensionality of the input problems affects the effectiveness of neural networks is presented in [24]. A common approach to reduce the dimension of the input data is the Principal Component Analysis (PCA) technique [25; 26; 27] or the Minimum redundancy Feature Selection (MRMR) technique [28; 29]. Furthermore, [PERSON] et al. [30] proposed an auto-encoder based dimensionality reduction method for large datasets. An overview of dimensionality reduction techniques can be found in the work of [PERSON] et al. [31]. The current article describes the method and the software associated with a feature construction method based on grammatical evolution [32], which is an evolutionary process that can create programs in any programming language. The described method constructs subsets of features from the original ones using non-linear combinations of them. The method is graphically illustrated in Figure 1. Initially, the method was described in [33], and it has been utilized in a variety of cases, such as spam identification [34], fetal heart classification [35], epileptic oscillations in clinical intracranial electroencephalograms [36], classification of EEG signals [37], etc. Feature construction methods have been thoroughly examined and analyzed in the relevant literature such as the work of [PERSON] and [PERSON] [38], where tree genetic programmingis used to construct artificial features. [PERSON] uses the Simulated Annealing method [39] to identify the features that are most important for data classification. [PERSON] et al. [40] construct artificial features using an entropy based fitness function for the associated genetic algorithm. [PERSON] and [PERSON] use another evolutionary approach for feature selection using gene expression data [41]. Furthermore, [PERSON] and [PERSON] proposed [42] a genetic programming approach that utilizes information gain ratio (IGR) to construct artificial features. The proposed software has been implemented in ANSI C++ utilizing the freely available library of QT from [[https://www.qt.io](https://www.qt.io)]([https://www.qt.io](https://www.qt.io)) (accessed on 18 August 2022). The user should supply the training and test data of the underlying problem as well as the desired number of features that will be created. The evaluation of the constructed features can be made using a variety of machine learning models, and the user can easily extend the software to add more learning models. Moreover, the software has a variety of command line options to control the parameters of the learning models or to manage the output of the method.