【发布时间】: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 进行嵌套重采样,但是基准测试部分仍然没有告诉我如何获得模型结果和变量使用的模型。