Feature Selection for 'mlr3'
Overview
Feature selection package of the 'mlr3' ecosystem. It selects the optimal feature set for any 'mlr3' learner. The package works with several optimization algorithms e.g. Random Search, Recursive Feature Elimination, and Genetic Search. Moreover, it can automatically optimize learners and estimate the performance of optimized feature sets with nested resampling.
- fix: Errors raised by mlr3fselect are structured conditions with the
Mlr3Errorclass now, so they can be caught by class and are formatted with cli (#198). - fix: Loading the package repeatedly duplicated the entries that mlr3fselect adds to the reflections of bbotk and mlr3 (#199).
- fix:
ArchiveAsyncFSelectpushed results with the removedrush::Rush$push_results()method. - fix:
EnsembleFSResult$pareto_front()correctly now handles ties in the pareto front: in edge cases, it returned dominated points for minimizing measures and discarded the true front for maximizing measures (#170). - fix:
ensemble_fselect()dropped theimportancecolumn for subclasses ofFSelectorBatchRFE. The column is now added whenever the feature selection result contains importance scores (#195). - fix:
embedded_ensemble_fselect()instantiated the [mlr3::Resampling] passed toinit_resamplingby reference, so the resampling of the user was changed and reused the row ids of the first task when applied to another task (#179). - fix:
EnsembleFSResult$knee_points()silently returned a row ofNAwhen the Pareto front did not span a range in both dimensions. The first point of the Pareto front is returned with a warning now (#171). - fix:
EnsembleFSResult$stability()cached the results by stability measure only, so the same measure requested with differentstability_argsreturned the cached value of the first call (#189). - fix:
ensemble_fselect()andembedded_ensemble_fselect()failed with a cryptic error when a single [mlr3::Learner] was passed to thelearnersargument because the result ofas_learners()was discarded (#178). - fix:
extract_inner_fselect_archives()ignored theexclude_columnsargument because it was passed positionally toas.data.table()where it landed in the...argument (#180). - fix:
as.data.table()on anArchiveBatchFSelectreturned then_featurescolumn as a list column instead of an integer column, so operations such assort()failed with'x' must be atomic(#181). - fix:
fs("sequential")$optimization_path()returned the first evaluated feature set of each batch instead of the best one, so the selected feature set was usually missing from the reported path (#182).
Show all changes in 1.7.0Hide the rest of the changes in 1.7.0
- fix:
fs("rfecv")left the resampling of the objective set to an insample resampling, so subsequent evaluations on the same instance silently resampled in-sample (#187). - fix: The
mlr3fselect.backupcallback deleted the backup of the previous batch before it wrote the new one, so a crash in between lost the complete run. The benchmark result is now written to a temporary file and renamed afterwards (#188). - BREAKING CHANGE: The
mlr3fselect.backupcallback requires thepathargument now. Previously it wrote abmr.rdsfile into the working directory of the user (#188). - fix:
as.data.table()on anEnsembleFSResultaccepts the documentedbenchmark_resultargument now to omit the task, learner and resampling columns (#190). - fix: The
$print()methods ofArchiveBatchFSelect,ArchiveAsyncFSelect,ArchiveAsyncFSelectFrozen,AutoFSelectorandFSelectorerrored withunused argumentwhen arguments such asdigitswere passed (#190). - fix:
fs("rfecv")had the same label asfs("rfe"), so both were indistinguishable inas.data.table(mlr_fselectors). Its manual page also instructed to construct it withfs("rfe")(#191). - fix:
AutoFSelectorignored thepredict_typewhen the final model was fitted, so$predict()returned response predictions although e.g."prob"was set. Errors raised while setting the predict type on the final model are not swallowed anymore (#184). - fix: The
$archive,$learner,$fselect_instanceand$fselect_resultbindings ofAutoFSelectorare read-only now. Previously an assignment failed withunused argumentinstead of the usual read-only error (#186). - fix:
AutoFSelector$train()did not check the row ids of an instantiated inner resampling for cross-validation and reported a wrong set number for holdout (#197). - fix:
fs("shadow_variable_search")left the shadow variables in the task, domain and search space of the instance when the feature selection was aborted because the first selected feature was a shadow variable (#183). - fix:
ArchiveBatchFSelect$best()andArchiveAsyncFSelect$best()returned an empty table or a row of missing values when a single score in the archive wasNA. Missing scores are now skipped.ArchiveAsyncFSelect$best()also ignored theties_methodset during construction (#177). - fix: The
mlr3fselect.svm_rfecallback accepted support vector machines without atypeorkernelsetting, although onlytype = "C-classification"andkernel = "linear"are supported. The callback now also errors on multi-class tasks for which the importance scores are not defined (#173). - fix: The asynchronous feature selection ignored the
always_includedcolumn role. Columns with this role were excluded from the models instead of being added to every feature subset (#175). - fix: The
mlr3fselect.one_se_rulecallback errored on archives with a single evaluation or with missing scores, and wrote then_featurescolumn as a list column instead of an integer column (#174). - fix:
extract_inner_fselect_results()added theiterationandfselect_instancecolumns to the result of the innerFSelectInstanceby reference, which created a circular reference between the instance and its own result (#172). - fix:
fs("rfe")andfs("rfecv")failed with an internaldata.tableerror whenstore_benchmark_result = FALSEwas set because the importance scores were read from the benchmark result of the archive (#169). - fix:
fs("rfecv", recursive = FALSE)failed with an internaldata.tableerror because the importance scores of all resampling iterations were written to a single archive row (#168). - fix:
fs("rfecv")ignored the direction of the measure and selected the feature set size with the worst mean performance for minimizing measures such asmsr("classif.ce")ormsr("regr.mse"). Feature selection results obtained withfs("rfecv")and a minimizing measure are invalid and should be recomputed (#167).
From NEWS.md in the release
Install
Health
- OK13 OK2026-08-30
- ERROR10 OK, 3 ERROR2026-07-25
- OK13 OK2026-05-28
- ERROR12 OK, 1 ERROR2026-05-16
- OK14 OK2026-03-10
Documentation
- Help pages
- 55 (4 internal)includes a package overview page
- Examples that run
- 47%14 run in a plain check (1 of them under a condition) · 16 only when donttest examples are enabled (R CMD check --as-cran)
- Exported functions with examples
- 50%
- Documented parameters
- 100%
- Return-value docs
- 21%
- Help pages citing references
- 2%
Downloads
Repository
- PRs merged (all time)
- 95%
- Median days to close, 50 most recently updated closed issues
- 3
- Median days to close, 50 most recently updated closed PRs
- 0
Stars over time
Forks over time
Releases over time
Issues over time
PRs over time
Commits over time
16 development-tooling and community-health practices detected across 6 families in the upstream repository
Checks run against github.com/mlr-org/mlr3fselect on 2026-10-11.
The R CMD check workflow runs on Linux, and on R-devel
Funding links: GitHub Sponsors
The repository owner accepts GitHub Sponsors
GitHub Pages site last deployed 2026-09-23 · The repository has a site deploy workflow
pkgdown site last built 2026-08-23
Show all practicesHide 2 practices
This repository shows signs of AI coding tools.
- Claude Codefirst seen 2026-03-17Seen in the repository: .claude, CLAUDE.mdNamed in .Rbuildignore: .claude, CLAUDE.mdNamed in .gitignore: .claude, CLAUDE.mdPull request it wrote: opened by a project memberCommits: at least 15 crediting it in the message
- Cursorfirst seen 2026-03-18Named in .Rbuildignore: .cursor
- Gemini CLIfirst seen 2026-03-18Config: a file or ignore line, not recorded which
- Codexfirst seen 2026-09-23Seen in the repository: .codexNamed in .Rbuildignore: .codex
- Claude Opus 4.84 commits · Jul 2026
- Claude Opus 54 commits · Jul to Sep 2026
- Claude Opus 4.63 commits · Mar to May 2026
- Claude Fable 52 commits · Jun 2026
- Claude Opus 4.71 commit · Apr 2026
Dependencies
Installing mlr3fselect adds 30 packages (15 with compiled code, 20 MB of source tarballs). Heaviest: data.table 5.7 MB, palmerpenguins 2.9 MB, moocore 1.9 MB.
Code & Tests
People & History
Pick two releases to compare their code metrics.
- 1.7.0Latest
- 1.6.02026-05-21 · diff ↗
- RR 4.6.0 released · 2026-04-24
- 1.5.12026-03-18 · diff ↗
- 1.5.0
- 1.4.02025-07-31 · diff ↗ ·
added 16 exports
ArchiveAsyncFSelect, ArchiveAsyncFSelectFrozen, CallbackAsyncFSelect, ContextAsyncFSelect, FSelectInstanceAsyncMultiCrit, FSelectInstanceAsyncSingleCrit, FSelectorAsync, FSelectorAsyncDesignPoints, FSelectorAsyncExhaustiveSearch, FSelectorAsyncFromOptimizerAsync, FSelectorAsyncRandomSearch, ObjectiveFSelectAsync, assert_async_fselect_callback, assert_async_fselect_callbacks, callback_async_fselect, fsi_async - RR 4.5.0 released · 2025-04-11
- 1.3.0
- 1.2.12024-11-07 · diff ↗
- 1.2.02024-10-25 · diff ↗
- 1.1.12024-10-15 · diff ↗
- 1.1.02024-09-09 · diff ↗
- 1.0.02024-06-29 · diff ↗ ·
removed 14 exports
ArchiveFSelect, ContextEval, FSelectInstanceMultiCrit, FSelectInstanceSingleCrit, FSelectorDesignPoints, FSelectorExhaustiveSearch, FSelectorFromOptimizer, FSelectorGeneticSearch, FSelectorRFE, FSelectorRFECV, FSelectorRandomSearch, FSelectorSequential, FSelectorShadowVariableSearch, callback_fselectadded 24 exports
ArchiveBatchFSelect, ContextBatchFSelect, EnsembleFSResult, FSelectInstanceBatchMultiCrit, FSelectInstanceBatchSingleCrit, FSelectorBatch, FSelectorBatchDesignPoints, FSelectorBatchExhaustiveSearch, FSelectorBatchFromOptimizerBatch, FSelectorBatchGeneticSearch, FSelectorBatchRFE, FSelectorBatchRFECV, FSelectorBatchRandomSearch, FSelectorBatchSequential, FSelectorBatchShadowVariableSearch, ObjectiveFSelectBatch, assert_fselect_instance, assert_fselect_instance_async, assert_fselect_instance_batch, assert_fselector_async, assert_fselector_batch, assert_fselectors, callback_batch_fselect, ensemble_fselect - RR 4.4.0 released · 2024-04-24
- 0.12.02024-03-09 · diff ↗
- RR 4.3.0 released · 2023-04-21
Show 21 earlier eventsHide 21 earlier events
- 0.11.02023-03-02 · diff ↗
- 0.10.0
- 0.9.12023-01-26 · diff ↗
- 0.9.0
- 0.8.12022-11-27 · diff ↗
- 0.8.0
- 0.7.22022-08-25 · diff ↗
- 0.7.12022-05-03 · diff ↗
- RR 4.2.0 released · 2022-04-22
- 0.7.02022-04-08 · diff ↗
- 0.6.12022-01-20 · diff ↗
- 0.6.02021-09-13 · diff ↗ ·
added 7 exports
FSelectorShadowVariableSearch, auto_fselector, extract_inner_fselect_archives, extract_inner_fselect_results, fselect, fselect_nested, fss - RR 4.1.0 released · 2021-05-18
- 0.5.12021-03-09 · diff ↗
- 0.5.02021-01-24 · diff ↗
- 0.4.12020-10-30 · diff ↗
- 0.4.02020-10-22 · diff ↗ ·
removed 1 export
AutoFSelectadded 3 exports
AutoFSelector, FSelectorGeneticSearch, trms - 0.3.0
- 0.2.12020-09-10 · diff ↗
- 0.2.02020-08-23
- RR 4.0.0 released · 2020-04-24
Package metadata
- First published
- 2020-08-23
- Total releases
- 30 / 6 yrs
- License
- LGPL-3 OSI
- Minimum R
- ≥ 3.1.0
- Download size
- 174 KB
Cite
Cite this package
Run in R for the authors' entry:
citation("mlr3fselect")The package provides a citation file, so citation() returns the authors' own entry.
It points to 10.5281/zenodo.16673301.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-19, which the citation names so these numbers can be found later. More on citing and the projects behind them.