【发布时间】:2022-03-08 23:26:51
【问题描述】:
当我在建模框架中包含预处理(选择、插补、转换等)步骤时,在使用 mlr3 框架时,我是否需要在预测之前对测试集重复此操作。我不这么认为,但我想确定这一点。
下面是一个关于任务中特征选择的简单示例。我真的需要在测试集中包含相同的功能还是不需要(test2 行)?结果相同
library(tidyverse)
library(tidymodels)
#> Registered S3 method overwritten by 'tune':
#> method from
#> required_pkgs.model_spec parsnip
library(survival)
library(mlr3verse)
#> Loading required package: mlr3
#>
#> Attaching package: 'mlr3verse'
#> The following object is masked from 'package:tune':
#>
#> tune
library(mlr3proba)
data = as_tibble(actg)
set.seed(123)
split <- data %>% initial_split(prop = 0.8, strata = censor_d)
train <- split %>% training()
test <- split %>% testing()
Task = TaskSurv$new(id = "ACTG", backend = train, time = "time_d", event = "censor_d")
Task$add_strata("censor_d")
Task$select(cols = c("txgrp","sex", "raceth", "ivdrug", "cd4", "age"))
rsf = lrn("surv.rfsrc", na.action = "na.impute")
rsf$train(Task)
test2 = test %>% select(time_d, censor_d, txgrp, sex, raceth, ivdrug, cd4, age) # Is this step required for mlr3?
rsf$predict_newdata(test)$score()
#> surv.cindex
#> 0.647943
rsf$predict_newdata(test2)$score()
#> surv.cindex
#> 0.647943
由reprex package (v2.0.1) 于 2022 年 3 月 7 日创建
【问题讨论】:
-
无论您使用哪种 ml 管道,它都应该自动应用于测试数据。如果您发现情况并非如此,则很可能是错误。
-
@missuse。这是我的理解。即使使用未链接到任务的外部数据的 $predict_newdata 也是如此。具体来说,我想确保测试集中的额外变量不用于预测,只有训练中使用的变量用于预测。
-
无论您使用什么类型的模型/包,在一组变量上训练的模型实际上都不能使用其他变量。
标签: mlr3