mlr:在CV循环中检索generateFilterValuesData的输出

时间:2019-08-07 07:35:49

标签: r mlr

如果我将学习者与使用makeFilterWrapper的过滤器方法融合在一起,那么我知道我可以在交叉验证循环中使用该过滤器来执行功能选择。据我了解,filterFeatures在每个模型适合之前被调用,它调用generateFilterValuesData。但是,在交叉验证的每次迭代中,是否有可能使用该过滤器来检索generateFilterValuesData生成的值?

例如:

library(survival)
library(mlr)

data(veteran)
set.seed(24601)
configureMlr(show.learner.output=TRUE, show.info=TRUE)

task_id = "MAS"
mas.task <- makeSurvTask(id = task_id, data = veteran, target = c("time", "status"))
mas.task <- createDummyFeatures(mas.task)

inner = makeResampleDesc("CV", iters=2, stratify=TRUE)  # Tuning
outer = makeResampleDesc("CV", iters=3, stratify=TRUE)  # Benchmarking

cox.lrn <- makeLearner(cl="surv.coxph", id = "coxph", predict.type="response")
cox.filt.uni.abs.lrn = 
  makeFilterWrapper(
    makeLearner(cl="surv.coxph", id = "cox.filt.uni.abs", predict.type="response"), 
    fw.method="univariate.model.score", 
    fw.abs=7,
    perf.learner=cox.lrn
  )

learners = list( cox.filt.uni.abs.lrn )  
bmr = benchmark(learners=learners, tasks=mas.task, resamplings=outer, measures=list(cindex), show.info = TRUE)

mods = getBMRModels(bmr, learner.ids = c('cox.filt.uni.abs.filtered'))
for (i in 1:length(mods[[task_id]]$cox.filt.uni.abs.filtered)) {
  mod = mods$MAS$cox.filt.uni.abs.filtered[[i]]$learner.model[[1]]
  print(str(mod, max.level=1))
  **#Retrieve output of generateFilterValuesData here?**
}

1 个答案:

答案 0 :(得分:1)

您可以将extract中的resample()插槽与getFilteredFeatures()结合使用。

library(mlr)
#> Loading required package: ParamHelpers

lrn = makeFilterWrapper(learner = "classif.ksvm", fw.method = "variance",
                        fw.abs = 5)
rdesc = makeResampleDesc("CV", iters = 2)
res = resample(lrn, spam.task, rdesc, extract = getFilteredFeatures)
#> Resampling: cross-validation
#> Measures:             mmce
#> [Resample] iter 1:    0.1808696
#> [Resample] iter 2:    0.1994785
#> 
#> Aggregated Result: mmce.test.mean=0.1901740
#> 
res$extract
#> [[1]]
#> [1] "you"          "george"       "capitalAve"   "capitalLong" 
#> [5] "capitalTotal"
#> 
#> [[2]]
#> [1] "you"          "george"       "capitalAve"   "capitalLong" 
#> [5] "capitalTotal"

reprex package(v0.3.0)于2019-08-07创建