                 Changes in version 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).

                 Changes in version 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.

                 Changes in version 1.5.1 (2026-03-18)                  

  - compatibility: rush 1.0.0

                 Changes in version 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.

                 Changes in version 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.

                 Changes in version 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

                 Changes in version 1.2.1 (2024-11-07)                  

  - compatibility: mlr3 0.22.0

                 Changes in version 1.2.0 (2024-10-25)                  

  - feat: Add internal tuning callback mlr3fselect.internal_tuning.
  - fix: Register mlr3fselect in the mlr_reflections$loaded_packages
    field.

                 Changes in version 1.1.1 (2024-10-15)                  

  - compatibility: bbotk 1.1.1

                 Changes in version 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.

                 Changes in version 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.

                 Changes in version 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

                 Changes in version 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.

                 Changes in version 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.

                 Changes in version 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.

                 Changes in version 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.

                 Changes in version 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.

                 Changes in version 0.7.2 (2022-08-25)                  

  - docs: Re-generate rd files with valid html.

                 Changes in version 0.7.1 (2022-05-03)                  

  - feat: FSelector objects have the field $id now.

                 Changes in version 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.

                 Changes in version 0.6.1 (2022-01-20)                  

  - Add store_models flag to fselect().
  - Remove store_x_domain flag.

                 Changes in version 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.

                 Changes in version 0.5.1 (2021-03-09)                  

  - Remove x_domain column from archive.

                 Changes in version 0.5.0 (2021-01-24)                  

  - FSelectorRFE stores importance values of each evaluated feature set
    in archive.
  - ArchiveBatchFSelect$data is a public field now.

                 Changes in version 0.4.1 (2020-10-30)                  

  - Fix bug in AutoFSelector$predict()

                 Changes in version 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.

                 Changes in version 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.

                 Changes in version 0.2.1 (2020-09-10)                  

  - Warning message if external package for feature selection is not
    installed.

                 Changes in version 0.2.0 (2020-08-23)                  

  - Initial CRAN release.
