MLR:如何为顺序MBO参数化模型计算置换特征的重要性? [英] MLR: How to compute permuted feature importance for sequential MBO parametrized models?

查看:221
本文介绍了MLR:如何为顺序MBO参数化模型计算置换特征的重要性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用mlr和mlrMBO软件包进行嵌套交叉验证.内部CV用于参数化(例如,找到最佳参数).由于我想比较不同学习者的表现,因此我使用mlr的基准函数进行了基准实验.我的问题如下:是否可以对参数化模型/学习器进行置换?当我在基准实验中使用的学习者上调用 generateFeatureImportanceData 时,会再次估算模型(忽略序列优化学习的参数化).这是虹膜数据集上的一些代码,用于说明我的问题(无需预处理,仅用于说明).

    library(dplyr)
    library(mlr)
    library(mlrMBO)
    library(e1071)

    nr_inner_cv <- 3L
    nr_outer_cv <- 2L

    inner = makeResampleDesc(
      "CV"
      , iters = nr_inner_cv  # folds used in tuning/bayesian optimization)

    learner_knn_base = makeLearner(id = "knn", "classif.knn")

    par.set = makeParamSet(
      makeIntegerParam("k", lower = 2L, upper = 10L)
    )

    ctrl = makeMBOControl()
    ctrl <- makeMBOControl(propose.points = 1L)
    ctrl <- setMBOControlTermination(ctrl, iters = 10L)
    ctrl <- setMBOControlInfill(ctrl, crit = crit.ei, filter.proposed.points = TRUE)
    set.seed(500)
    tune.ctrl <- makeTuneControlMBO(
      mbo.control = ctrl,
      mbo.design = generateDesign(n = 10L, par.set = par.set)
    )

    learner_knn = makeTuneWrapper(learner = learner_knn_base
                                           , resampling = inner
                                           , par.set = par.set
                                           , control = tune.ctrl
                                           , show.info = TRUE
                                  )

    learner_nb <- makeLearner(
      id = "naiveBayes"
      ,"classif.naiveBayes"
    )

    lrns = list(
      learner_knn
      , learner_nb
    )

    rdesc = makeResampleDesc("CV", iters = nr_outer_cv)

    set.seed(12345)
    bmr = mlr::benchmark(lrns, tasks = iris.task, show.info = FALSE,
                         resamplings = rdesc, models = TRUE, keep.extract = TRUE)

解决方案

我认为这是一个我们经常遇到的普遍问题:我可以对CV中安装的模型进行XY吗?简短的回答:是的,您可以,但是您真的想要吗?

详细答案

类似的Q:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆