Package: selectio
Selectio: Multi-Model Feature Importance Scoring and Auto Feature Selection.This Python package provides multiple feature importance scores and automatically suggests a feature selection based on the majority vote of all models.ModelsCurrently the following models for feature importance scoring are included:Spearman rank analysis (see 'selectio.models.spearman')Correlation coefficient significance of linear/log-scaled Bayesian Linear Regression (see 'selectio.models.blr')Random Forest Permutation test (see 'selectio.models.rf')Random Decision Trees on various subsamples of data (see 'selectio.models.rdt')Mutual Information Regression (see 'selectio.models.mi')General correlation coefficients (see 'selectio.models.xicor')Feature Importance Scores and Cross-CorrelationsThe current feature importance models support numerical data only. Categorical data will need to be encoded to numerical features beforehand.All model scores are normalized to unity, i.e., $\sumi^{N{features}} score_i = 1$This package includes multiple functions for visualisation of the importance scores and automatic feature ranking.Feature-to-feature correlations are automatically clustered using hierarchical clustering of the Spearman correlation coefficients (for more details seeutils.plot_feature_correlation_spearman).Installationpipinstallselectioor for development in a conda environment:condaenvupdate--fileenvironment.yaml
condaactivateselectioRequirementsnumpypandasscikit-learnscipymatplotlibpyyamlSee file environment.yaml for more details.UsageThere are multiple options to compute feature selection scoresOption 1)with a settings yaml file (template provided) that includes all processing and plotting functionality, e.g:fromselectioimportselectio# Read in data from file, generate feature importance plots and save results as csv:selectio.main('settings_featureimportance.yaml')This will automatically save all scores and selections in csv file and create multiple score plots.Option 2)computed directly using the class selectio.Fsel, e.g.fromselectio.selectioimportFsel# Read in data X (nsample, nfeatures) and y (nsample)fsel=Fsel(X,y)# Score features and return results as dataframe:dfres=fsel.score_models()This returns a table with all scores and feature selections. See for more details and visualisation of scores "Option 2)" in the example notebookfeature_selection.ipynb.Option 3)as standalone script with a settings file:cdselectio
pythonselectio.py-s<FILENAME>.yamlUser settings such as input/output paths and all other options are set in the settings file
(Default filename: settings_featureimportance.yaml)
Alternatively, the settings file can be specified as a command line argument with:
'-s', or '--settings' followed by PATH-TO-FILE/FILENAME.yaml
(e.g. python selectio.py -s settings/settings_featureimportance.yaml).Settings YAML fileFor settings file template, seehereThe main settings are:# Input data path:inpath:...# File name with soil data and corresponding covariates:infname:...# Output results path:outpath:...# Name of target for prediction (column name in dataframe):name_target:...# Name or List of features (column names in infname):# (covariates to be considered )name_features:-...-...Simulation and TestingThe selectio package provides the option to generate simulated data (seeselectio.simdata)
and includes multiple test functions (seeselectio.tests), e.g.fromselectioimportteststests.test_select()For more examples and how to create simulated  viasimdata.py, see the provided Jupyter notebooksfeature_selection.ipynb.Adding Custom Model ExtensionsMore models for feature scoring can be added in the folder 'models' following the existing scripts as example,
which includes at least:a function with name 'factor_importance' that takes X and y as argument and one optional argument norma__name__and__fullname__attributeadding the new module name to the__init_file__.pyfile in the folder modelsOther models for feature selections have been considered, such as PCA or SVD-based methods or
univariate screening methods (t-test, correlation, etc.). However, some of these models consider either
only linear relationships, or do not take into account the potential multivariate nature of the data structure
(e.g., higher order interaction between variables). Note that not all included models are completely generalizable,
such as Bayesian regression and Spearman ranking given their dependence on monotonic functional behavior.Since most models have some limitations or rely on certain data assumptions, it is important to consider a variety
of techniques for feature selection and to apply model cross-validations.LicenseLGPL-3.0 LicenseCopyright (c) 2022 Sebastian Haan