+
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ Collate:
'FilterPerformance.R'
'FilterPermutation.R'
'FilterRelief.R'
'FilterSelectedFeatures.R'
'FilterVariance.R'
'flt.R'
'helper.R'
Expand Down
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export(FilterNJMIM)
export(FilterPerformance)
export(FilterPermutation)
export(FilterRelief)
export(FilterSelectedFeatures)
export(FilterVariance)
export(as.data.table)
export(flt)
Expand Down
65 changes: 65 additions & 0 deletions R/FilterSelectedFeatures.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#' @title Filter for Embedded Feature Selection
#'
#' @name mlr_filters_selected_features
#'
#' @description
#' Filter using embedded feature selection of machine learning algorithms.
#' Takes a [mlr3::Learner] which is capable of extracting the selected features
#' (property "selected_features"), fits the model and extracts the selected
#' features.
#'
#' Note that contrary to [mlr_filters_importance], there is no ordering in
#' the selected features. Selected features get a score of 1, deselected
#' features get a score of 0. The order of selected features is random and
#' different from the order in the learner. In combination with
#' \CRANpkg{mlr3pipelines}, only the filter criterion `cutoff` makes sense.
#'
#'
#' @family Filter
#' @template seealso_filter
#' @export
#' @examples
#' task = mlr3::tsk("iris")
#' learner = mlr3::lrn("classif.rpart")
#' filter = flt("selected_features", learner = learner)
#' filter$calculate(task)
#' as.data.table(filter)
FilterSelectedFeatures = R6Class("FilterSelectedFeatures",
inherit = Filter,

public = list(

#' @field learner ([mlr3::Learner])\cr
#' Learner to extract the importance values from.
learner = NULL,

#' @description Create a FilterImportance object.
#' @param learner ([mlr3::Learner])\cr
#' Learner to extract the importance values from.
initialize = function(learner = mlr3::lrn("classif.rpart")) {
self$learner = learner = assert_learner(as_learner(learner, clone = TRUE),
properties = "selected_features")

super$initialize(
id = "selected_features",
task_type = learner$task_type,
feature_types = learner$feature_types,
packages = learner$packages,
param_set = learner$param_set,
man = "mlr3filters::mlr_filters_selected_features"
)
}
),

private = list(
.calculate = function(task, nfeat) {
learner = self$learner$clone(deep = TRUE)
learner = learner$train(task = task)
score = named_vector(task$feature_names, init = 0)
replace(score, names(score) %in% learner$selected_features(), 1)
}
)
)

#' @include mlr_filters.R
mlr_filters$add("selected_features", FilterSelectedFeatures)
3 changes: 3 additions & 0 deletions README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ output: github_document
Package website: [release](https://mlr3filters.mlr-org.com/) | [dev](https://mlr3filters.mlr-org.com/dev/)

{mlr3filters} adds feature selection filters to [mlr3](https://mlr3.mlr-org.com).
The implemented filters can be used stand-alone, or as part of a machine learning pipeline in combination with
[mlr3pipelines](https://mlr3pipelines.mlr-org.com) and the [filter operator](https://mlr3pipelines.mlr-org.com/reference/mlr_pipeops_filter.html).

Wrapper methods for feature selection are implemented in [mlr3fselect](https://mlr3fselect.mlr-org.com).
Learners which support the extraction feature importance scores can be combined with a filter from this package for embedded feature selection.

Expand Down
1 change: 1 addition & 0 deletions man/Filter.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_anova.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_auc.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_carscore.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_cmim.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_correlation.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_disr.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_find_correlation.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_importance.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_information_gain.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_jmi.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_jmim.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_kruskal_test.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_mim.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_mrmr.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_njmim.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_performance.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_permutation.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_relief.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

116 changes: 116 additions & 0 deletions man/mlr_filters_selected_features.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions man/mlr_filters_variance.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions tests/testthat/test_FilterSelectedFeatures.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
test_that("FilterSelectedFeatures", {
set.seed(42)
task = mlr3::mlr_tasks$get("wine")
learner = mlr3::mlr_learners$get("classif.rpart")
f = FilterSelectedFeatures$new(learner = learner)
f$calculate(task)
expect_filter(f, task = task)
})
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载