mlr:带调优的过滤器方法

mlr:带调优的过滤器方法,r,mlr,R,Mlr,ml教程的这一部分:解释如何使用带有FilterRapper的TuneWrapper来调整过滤器的阈值。但如果我的过滤器也有需要调整的超参数,比如随机林变量重要性过滤器,该怎么办?除了阈值,我似乎无法调整任何参数 例如: library(survival) library(mlr) data(veteran) set.seed(24601) task_id = "MAS" mas.task <- makeSurvTask(id = task_id, data = veteran, tar

ml教程的这一部分:解释如何使用带有FilterRapper的TuneWrapper来调整过滤器的阈值。但如果我的过滤器也有需要调整的超参数,比如随机林变量重要性过滤器,该怎么办?除了阈值,我似乎无法调整任何参数

例如:

library(survival)
library(mlr)

data(veteran)
set.seed(24601)
task_id = "MAS"
mas.task <- makeSurvTask(id = task_id, data = veteran, target = c("time", "status"))
mas.task <- createDummyFeatures(mas.task)
tuning = makeResampleDesc("CV", iters=5, stratify=TRUE)                             # Tuning: 5-fold CV, no repeats

cox.filt.rsfrc.lrn = makeTuneWrapper(
      makeFilterWrapper(
        makeLearner(cl="surv.coxph", id = "cox.filt.rfsrc", predict.type="response"), 
        fw.method="randomForestSRC_importance",
        cache=TRUE,
        ntree=2000
      ), 
      resampling = tuning, 
      par.set = makeParamSet(
          makeIntegerParam("fw.abs", lower=2, upper=10),
          makeIntegerParam("mtry", lower = 5, upper = 15),
          makeIntegerParam("nodesize", lower=3, upper=25)
      ), 
      control = makeTuneControlRandom(maxit=20),
      show.info = TRUE)
  • 两级调整-失败

    cox.lrn =  makeLearner(cl="surv.coxph", id = "cox.filt.rfsrc", predict.type="response")
    cox.filt = makeFilterWrapper(cox.lrn,
                         fw.method="randomForestSRC_importance",
                         cache=TRUE,
                         ntree=2000)
    cox.tune = makeTuneWrapper(cox.filt, 
                       resampling = tuning, 
                       measures=list(cindex),
                       par.set = makeParamSet(
                         makeIntegerParam("fw.abs", lower=2, upper=10)
                       ),
                       control = makeTuneControlRandom(maxit=20),
                       show.info = TRUE)
    
    cox.tune2 = makeTuneWrapper(cox.tune, 
                       resampling = tuning, 
                       measures=list(cindex),
                       par.set = makeParamSet(
                         makeIntegerParam("mtry", lower = 5, upper = 15),
                         makeIntegerParam("nodesize", lower=3, upper=25)
                       ),
                       control = makeTuneControlRandom(maxit=20),
                       show.info = TRUE)
    
    Error in makeBaseWrapper(id, learner$type, learner, learner.subclass = c(learner.subclass,  : 
      Cannot wrap a tuning wrapper around another optimization wrapper!
    

  • 看起来您当前无法调整过滤器的超参数。您可以通过将某些参数传入
    makeFilterRapper()
    来手动更改它们,但不能对其进行调优。 在过滤方面,您只能调整
    fw.abs
    fw.perc
    fw.tresh
    中的一个

    我不知道使用不同的HyperPAR作为随机森林过滤器时,对排名的影响有多大。检查稳健性的一种方法是在
    getFeatureImportance()
    的帮助下,使用
    mtry
    和friends的不同设置来比较单个RF模型的匹配排名。如果这些之间存在非常高的秩相关性,您可以安全地忽略RF滤波器的调谐。(可能您想使用一个与此问题完全不同的过滤器?)

    如果您坚持使用此功能,则可能需要提高软件包的PR:)


    你试过用一个进入过滤器包装器的曲调包装器包装学习者吗?@pat-s我不能让它工作,但这确实是必要的。我编辑了这个问题,以展示我尝试过的其他东西。
    cox.lrn =  makeLearner(cl="surv.coxph", id = "cox.filt.rfsrc", predict.type="response")
    cox.filt = makeFilterWrapper(cox.lrn,
                         fw.method="randomForestSRC_importance",
                         cache=TRUE,
                         ntree=2000)
    cox.tune = makeTuneWrapper(cox.filt, 
                       resampling = tuning, 
                       measures=list(cindex),
                       par.set = makeParamSet(
                         makeIntegerParam("fw.abs", lower=2, upper=10)
                       ),
                       control = makeTuneControlRandom(maxit=20),
                       show.info = TRUE)
    
    cox.tune2 = makeTuneWrapper(cox.tune, 
                       resampling = tuning, 
                       measures=list(cindex),
                       par.set = makeParamSet(
                         makeIntegerParam("mtry", lower = 5, upper = 15),
                         makeIntegerParam("nodesize", lower=3, upper=25)
                       ),
                       control = makeTuneControlRandom(maxit=20),
                       show.info = TRUE)
    
    Error in makeBaseWrapper(id, learner$type, learner, learner.subclass = c(learner.subclass,  : 
      Cannot wrap a tuning wrapper around another optimization wrapper!
    
    lrn = makeLearner(cl = "surv.coxph", id = "cox.filt.rfsrc", predict.type = "response")
    
    filter_wrapper = makeFilterWrapper(
      lrn,
      fw.method = "randomForestSRC_importance",
      cache = TRUE,
      ntrees = 2000
    )
    
    cox.filt.rsfrc.lrn = makeTuneWrapper(
      filter_wrapper,
      resampling = tuning,
      par.set = makeParamSet(
        makeIntegerParam("fw.abs", lower = 2, upper = 10)
      ),
      control = makeTuneControlRandom(maxit = 20),
      show.info = TRUE)