【问题标题】:How to get the model results from the benchmarkresult in mlr3?如何从 mlr3 中的 benchmarkresult 中获取模型结果?
【发布时间】:2021-06-21 12:09:01
【问题描述】:

最近我在学习使用 mlr3 包。我在做特征选择,想比较模型结果。但是,我想知道如何从基准结果中获取模型结果,比如特征选择学习器模型中使用了哪些特征。

这是我的代码:

#setup task
task = TaskClassif$new(id = "SPI", backend = test, target = "recidivism")

#learner of non-FS
learner_ranger = lrn("classif.ranger",
                     predict_type = "prob",
                     predict_sets = c("train", "test")) %>% print()

# set up for FS
terminator = trm("evals", n_evals = 20)
fselector = fs("random_search")

# create a new learner of FS
at = AutoFSelector$new(
  learner = learner_ranger,
  resampling = rsmp("holdout"),
  measure = msr("classif.auc"),
  terminator = terminator,
  fselector = fselector
)
at


# To compare the optimized feature subset with the complete feature set, we can use benchmark() :
grid = benchmark_grid(task = task,
                      learner = list(at,learner_ranger),
                      resampling = rsmp("holdout"))


# 
set.seed(1)
bmr_Wra = benchmark(grid, store_models = TRUE)

# 
measures = list(
  msr("classif.auc", id = "auc_train", predict_sets = "train"),
  msr("classif.auc", id = "auc_test"),
  msr("classif.acc", id = "acc_test"),
  msr("classif.ce",id = "ce_test")
)

bmr_Wra$aggregate(measures)


# ce
autoplot(bmr_Wra) + theme(axis.text.x = element_text(angle = 45, hjust = 1))

# roc
autoplot(bmr_Wra, type = "roc")

# prc
autoplot(bmr_Wra, type = "prc")`

我注意到:

请注意,通过此字段访问学习模型是不可行的,因为训练任务会模棱两可。因此,返回的学习者在返回之前会被重置。反而, 从 $score() 返回的表中选择一行。

所以我使用了bmr_Wra$score(),但我仍然需要进一步分析模型并提取变量重要性等信息。任何帮助表示赞赏。非常感谢!

【问题讨论】:

  • 以防万一您错过了,mlr3book 中有专门的section on benchmarking。如果那里有什么遗漏/不清楚,欢迎您提出问题或更详细地讨论具体点。
  • 感谢您的帮助。在 mlr3book 中,它告诉我如何在 ResampleResults 中提取特定的学习者和训练集,但是学习的模型部分是空白的。我认为我不应该用$train(task) 重新训练学习者并手动分配训练集来获取模型。跟着书,我用 AutoFSelector 进行嵌套重采样,但是基准测试部分仍然没有告诉我如何获得模型结果和变量使用的模型。

标签: r mlr3


【解决方案1】:

从 gh 安装最新的 mlr3fselect 版本,它提供了新的帮助函数。

extract_inner_fselect_results(bmr_Wra)

返回内部重采样循环的最佳特征集。由于您使用的是保留验证,因此它只是一组。

extract_inner_fselect_archives(bmr_Wra)

返回内部重采样循环的所有评估特征集。如果要访问存储在ResampleResults 中的相应模型,请创建AutoTunerstore_models = TRUE

您可能想阅读nested resampling 上的书籍章节。

【讨论】:

  • 感谢您的帮助。我尝试安装最新的 mlr3fselect 版本(0.5.1)以及来自 GitHub 的开发版本。但是,我无法获得您提到的功能(extract_inner_fselect_results)。如您所见,我已经使用bmr_Wra = benchmark(grid, store_models = TRUE) 来存储结果。
  • 我没有使用 cv 进行重采样,以防我在提取基准测试结果时遇到问题。在 mlr3book 中,它告诉我如何在 ResampleResults 中获取特定的学习者和训练集,但是学习的模型部分是空白的。我认为我不应该使用$train(task) 重新培训学习者。
  • 如果store_models = TRUE 设置在AutoFSelector$new() 中,则模型槽不为空。此选项在benchmark()AutoFSelector$new() 中可用。
  • 您可能需要在安装开发版本后重新启动 R 会话。这些函数是available
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2018-01-30
  • 2019-10-20
  • 1970-01-01
相关资源
最近更新 更多