r-mlr3:如何在训练数据集上使用mlr进行过滤,并将结果应用于模型训练



在mlr3中创建筛选器时,如何仅基于训练数据创建筛选器?

一旦创建了过滤器,如何将过滤器应用于建模过程,并将训练数据子集设置为仅包括高于特定阈值的过滤器值?

library(mlr3)
library(mlr3filters)
library(mlr3learners)
library(tidyverse)

data(iris)
iris <- iris %>%
select(-Species)

tsk <- mlr3::TaskRegr$new("iris", 
backend = iris, 
target = "Sepal.Length")
#split train and test
trn_ids <- sample(tsk$row_ids, floor(0.8 * length(tsk$row_ids)), F)
tst_ids <- setdiff(tsk$row_ids, trn_ids)
#create a filter
filter = flt("correlation", method = "spearman")
# Question 1: how to calculate the filter only for the train IDs?
filter$calculate(tsk)
print(filter)
# Question 2: how to only use only variables with X correlation or greater in training?
learner <- mlr_learners$get("regr.glmnet")
learner$train(tsk, row_ids = trn_ids)
prediction <- learner$predict(tsk, row_ids = tst_ids)
prediction$response

过滤器可以使用mlr3pipelines包装到学习者中。

mlr3gallery在这里有一个示例("Feature Filtering"部分(。

基本的配方是创建一个这样的图形:

fpipe = po("filter", flt("mim"), filter.nfeat = 3) $>>$ lrn("regr.glmnet")

并将其封装在GraphLearner:中

lrnr = GraphLearner$new(fpipe)

lrnr现在可以像任何其他学习者一样使用,并且在训练学习者之前根据指定的过滤器对特征进行内部过滤。

最新更新