当我尝试使用过滤器“ ranger_permutation”并将一些参数传递给makeFilterWrapper中的过滤器时,我发现我无法使用参数“重要性”,因为该名称与另一个参数冲突,但是我不明白在哪里或为什么。当我运行下面的代码时,我收到以下错误消息:
Error in setHyperPars(learner = wl, ..., par.vals = par.vals):
Assertion on 'parameter settings' failed: Must have unique names, but element 4 is duplicated
在使用其他基础学习者时也会出现此错误。如果删除参数“重要性”,则问题会消失,但如果删除其他参数,则问题不会消失。同样,我可以使用相同的参数自行运行护林员,而不是作为过滤器。
library(survival)
#> Warning: package 'survival' was built under R version 3.5.3
library(mlr)
#> Loading required package: ParamHelpers
data(veteran)
set.seed(24601)
task_id = "VET"
vet.task <- makeSurvTask(id = task_id, data = veteran, target = c("time", "status"))
vet.task <- createDummyFeatures(vet.task)
outer = makeResampleDesc("CV", iters=2, stratify=TRUE)
set.seed(24601, "L'Ecuyer")
cox.lrn <- makeLearner(cl="surv.coxph", id = "Ranger_Cox", predict.type="response")
filt <- makeFilterWrapper(cox.lrn, fw.method="ranger_permutation", fw.abs=5, cache=TRUE, num.trees=1000, splitrule="maxstat", importance="permutation")
bmr = benchmark(filt, vet.task, outer, list(cindex), show.info = TRUE, models=TRUE, keep.extract=TRUE)
#> Task: VET, Learner: Ranger_Cox.filtered
#> Resampling: cross-validation
#> Measures: cindex
#> Error in setHyperPars(learner = wl, ..., par.vals = par.vals): Assertion on 'parameter settings' failed: Must have unique names, but element 4 is duplicated.
由reprex package(v0.3.0)于2019-09-25创建
答案 0 :(得分:1)
设置fw.method = "ranger_permutation"
时importance = "permutation"
已在内部设置。因此,当您强制importance = "permutation"
时,它定义了两次(重复),并且错误检查失败。
这可以从mlr实现中看到:https://github.com/mlr-org/mlr/blob/master/R/Filter.R makeFilter(name = "ranger_permutation"...
已经定义了importance = "permutation"
。