NEWS
mlr3fselect 1.7.0 (2026-08-23)
- fix: Errors raised by mlr3fselect are structured conditions with the
Mlr3Error class 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:
ArchiveAsyncFSelect pushed results with the removed rush::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 the importance column for subclasses of FSelectorBatchRFE. The column is now added whenever the feature selection result contains importance scores (#195).
- fix:
embedded_ensemble_fselect() instantiated the [mlr3::Resampling] passed to init_resampling by 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 of NA when 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 different stability_args returned the cached value of the first call (#189).
- fix:
ensemble_fselect() and embedded_ensemble_fselect() failed with a cryptic error when a single [mlr3::Learner] was passed to the learners argument because the result of as_learners() was discarded (#178).
- fix:
extract_inner_fselect_archives() ignored the exclude_columns argument because it was passed positionally to as.data.table() where it landed in the ... argument (#180).
- fix:
as.data.table() on an ArchiveBatchFSelect returned the n_features column as a list column instead of an integer column, so operations such as sort() 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).
- 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.backup callback 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.backup callback requires the path argument now. Previously it wrote a bmr.rds file into the working directory of the user (#188).
- fix:
as.data.table() on an EnsembleFSResult accepts the documented benchmark_result argument now to omit the task, learner and resampling columns (#190).
- fix: The
$print() methods of ArchiveBatchFSelect, ArchiveAsyncFSelect, ArchiveAsyncFSelectFrozen, AutoFSelector and FSelector errored with unused argument when arguments such as digits were passed (#190).
- fix:
fs("rfecv") had the same label as fs("rfe"), so both were indistinguishable in as.data.table(mlr_fselectors). Its manual page also instructed to construct it with fs("rfe") (#191).
- fix:
AutoFSelector ignored the predict_type when 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_instance and $fselect_result bindings of AutoFSelector are read-only now. Previously an assignment failed with unused argument instead 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() and ArchiveAsyncFSelect$best() returned an empty table or a row of missing values when a single score in the archive was NA. Missing scores are now skipped. ArchiveAsyncFSelect$best() also ignored the ties_method set during construction (#177).
- fix: The
mlr3fselect.svm_rfe callback accepted support vector machines without a type or kernel setting, although only type = "C-classification" and kernel = "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_included column role. Columns with this role were excluded from the models instead of being added to every feature subset (#175).
- fix: The
mlr3fselect.one_se_rule callback errored on archives with a single evaluation or with missing scores, and wrote the n_features column as a list column instead of an integer column (#174).
- fix:
extract_inner_fselect_results() added the iteration and fselect_instance columns to the result of the inner FSelectInstance by reference, which created a circular reference between the instance and its own result (#172).
- fix:
fs("rfe") and fs("rfecv") failed with an internal data.table error when store_benchmark_result = FALSE was set because the importance scores were read from the benchmark result of the archive (#169).
- fix:
fs("rfecv", recursive = FALSE) failed with an internal data.table error 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 as msr("classif.ce") or msr("regr.mse").
Feature selection results obtained with fs("rfecv") and a minimizing measure are invalid and should be recomputed (#167).
mlr3fselect 1.6.0 (2026-05-21)
- refactor: Remove rush backward compatibility.
- docs: Add hEFS reference.
- compatibility:
fastVoteR 0.0.3
- feat: Add
$rm_zero_features() method in EnsembleFSResult to remove result rows where no features were selected.
mlr3fselect 1.5.1 (2026-03-18)
- compatibility: rush 1.0.0
mlr3fselect 1.5.0 (2025-11-27)
- fix: Add
always_included column role to all registered tasks.
- perf: Add fast aggregation for
ResampleResult and BenchmarkResult objects to speed up objective function evaluation.
mlr3fselect 1.4.0 (2025-07-31)
- feat: Introduce asynchronous optimization with the
FSelectorAsync and FSelectInstanceAsync* classes.
- feat: Add
max_nfeatures argument in the pareto_front() and knee_points() methods of an EnsembleFSResult().
- feat: Classes are now printed with the
cli package.
mlr3fselect 1.3.0 (2025-01-16)
- refactor: Use fastVoteR for feature ranking in
EnsembleFSResult() objects
- feat: Add embedded ensemble feature selection
embedded_ensemble_fselect()
- refactor/perf:
ensemble_fselect() and EnsembleFSResult()
- feat: Add
c.EnsembleFSResult(...) and EnsembleFSResult$combine(...) methods
mlr3fselect 1.2.1 (2024-11-07)
- compatibility: mlr3 0.22.0
mlr3fselect 1.2.0 (2024-10-25)
- feat: Add internal tuning callback
mlr3fselect.internal_tuning.
- fix: Register mlr3fselect in the
mlr_reflections$loaded_packages field.
mlr3fselect 1.1.1 (2024-10-15)
- compatibility: bbotk 1.1.1
mlr3fselect 1.1.0 (2024-09-09)
- compatibility: mlr3 0.21.0
- fix: Delete intermediate
BenchmarkResult in ObjectiveFSelectBatch after optimization.
- fix: Reloading mlr3fselect does not duplicate column roles anymore.
- perf: Remove
x_domain column from archive.
mlr3fselect 1.0.0 (2024-06-29)
- feat: Add ensemble feature selection function
ensemble_fselect().
- BREAKING CHANGE: The
FSelector class is FSelectorBatch now.
- BREAKING CHANGE: THe
FSelectInstanceSingleCrit and FSelectInstanceMultiCrit classes are FSelectInstanceBatchSingleCrit and FSelectInstanceBatchMultiCrit now.
- BREAKING CHANGE: The
CallbackFSelect class is CallbackBatchFSelect now.
- BREAKING CHANGE: The
ContextEval class is ContextBatchFSelect now.
mlr3fselect 0.12.0 (2024-03-09)
- feat: Add number of features to
instance$result.
- feat: Add
ties_method options "least_features" and "random" to ArchiveBatchFSelect$best().
- refactor: Optimize runtime of
ArchiveBatchFSelect$best() method.
- feat: Add importance scores to result of
FSelectorRFE.
- feat: Add number of features to
as.data.table.ArchiveBatchFSelect().
- feat: Features can be always included with the
always_include column role.
- fix: Add
$phash() method to AutoFSelector.
- fix: Include
FSelector in hash of AutoFSelector.
- refactor: Change default batch size of
FSelectorBatchRandomSearch to 10.
- feat: Add
batch_size parameter to FSelectorBatchExhaustiveSearch to reduce memory consumption.
- compatibility: Work with new paradox version 1.0.0
mlr3fselect 0.11.0 (2023-03-02)
- BREAKING CHANGE: The
method parameter of fselect(), fselect_nested() and auto_fselector() is renamed to fselector.
Only FSelector objects are accepted now.
Arguments to the fselector cannot be passed with ... anymore.
- BREAKING CHANGE: The
fselect parameter of FSelector is moved to the first position to achieve consistency with the other functions.
- docs: Update resources sections.
- docs: Add list of default measures.
mlr3fselect 0.10.0 (2023-02-21)
- feat: Add callback
mlr3fselect.svm_rfe to run recursive feature elimination on linear support vector machines.
- refactor: The importance scores in
FSelectorRFE are now aggregated by rank instead of averaging them.
- feat: Add
FSelectorRFECV optimizer to run recursive feature elimination with cross-validation.
- refactor:
FSelectorRFE works without store_models = TRUE now.
- feat: The
as.data.table.ArchiveBatchFSelect() function additionally returns a character vector of selected features for each row.
- refactor: Add
callbacks argument to fsi() function.
mlr3fselect 0.9.1 (2023-01-26)
- refactor: Remove internal use of
mlr3pipelines.
- fix: Feature selection with measures that require the importance or oob error works now.
mlr3fselect 0.9.0 (2022-12-21)
- fix: Add
genalg to required packages of FSelectorBatchGeneticSearch.
- feat: Add new callback that backups the benchmark result to disk after each batch.
- feat: Create custom callbacks with the
callback_batch_fselect() function.
mlr3fselect 0.8.0 (2022-11-16)
- refactor:
FSelectorRFE throws an error if the learner does not support the $importance() method.
- refactor: The
AutoFSelector stores the instance and benchmark result if store_models = TRUE.
- refactor: The
AutoFSelector stores the instance if store_benchmark_result = TRUE.
- feat: Add missing parameters from
AutoFSelector to auto_fselect().
- feat: Add
fsi() function to create a FSelectInstanceBatchSingleCrit or FSelectInstanceBatchMultiCrit.
- refactor: Remove
unnest option from as.data.table.ArchiveBatchFSelect() function.
mlr3fselect 0.7.2 (2022-08-25)
- docs: Re-generate rd files with valid html.
mlr3fselect 0.7.1 (2022-05-03)
- feat:
FSelector objects have the field $id now.
mlr3fselect 0.7.0 (2022-04-08)
- feat: Allow to pass
FSelector objects as method in fselect() and auto_fselector().
- feat: Added
$label to FSelectors.
- docs: New examples with
fselect() function.
- feat:
$help() method which opens manual page of a FSelector.
- feat: Added a
as.data.table.DictionaryFSelector function.
- feat: Added
min_features parameter to FSelectorBatchSequential.
mlr3fselect 0.6.1 (2022-01-20)
- Add
store_models flag to fselect().
- Remove
store_x_domain flag.
mlr3fselect 0.6.0 (2021-09-13)
- Adds
AutoFSelector$base_learner() method to extract the base learner from
nested learner objects.
- Adds
fselect(), auto_fselector() and fselect_nested() sugar functions.
- Adds
extract_inner_fselect_results() and extract_inner_fselect_archives()
helper function to extract inner feature selection results and archives.
mlr3fselect 0.5.1 (2021-03-09)
- Remove
x_domain column from archive.
mlr3fselect 0.5.0 (2021-01-24)
FSelectorRFE stores importance values of each evaluated feature set in
archive.
ArchiveBatchFSelect$data is a public field now.
mlr3fselect 0.4.1 (2020-10-30)
- Fix bug in
AutoFSelector$predict()
mlr3fselect 0.4.0 (2020-10-22)
- Compact in-memory representation of R6 objects to save space when saving mlr3
objects via saveRDS(), serialize() etc.
FSelectorRFE supports fraction of features to retain in each iteration
(feature_fraction), number of features to remove in each iteration
(feature_number) and vector of number of features to retain in each
iteration (subset_sizes).
AutoFSelect is renamed to AutoFSelector.
- To retrieve the inner feature selection results in nested resampling,
as.data.table(rr)$learner[[1]]$fselect_result must be used now.
- Option to control
store_benchmark_result, store_models and check_values
in AutoFSelector. store_fselect_instance must be set as a parameter during
initialization.
- Adds
FSelectorBatchGeneticSearch.
- Fixes
check_values flag in FSelectInstanceBatchSingleCrit and
FSelectInstanceBatchMultiCrit.
- Removed dependency on orphaned package
bibtex.
PipeOpSelect is internally used for task subsetting.
mlr3fselect 0.3.0 (2020-09-22)
Archive is ArchiveBatchFSelect now which stores the benchmark result in
$benchmark_result. This change removed the resample results from the archive
but they can be still accessed via the benchmark result.
mlr3fselect 0.2.1 (2020-09-10)
- Warning message if external package for feature selection is not installed.
mlr3fselect 0.2.0 (2020-08-23)