如何在 mlr3proba 的嵌套交叉验证中转换“2 级 ParamUty”class?
How to transform '2 levels ParamUty' class in nested cross-validation of mlr3proba?
对于生存分析,我使用 mlr3proba
R 包。
我的数据集包含 39 个特征(包括连续特征和因子,我将它们全部转换为整数和数字)和目标(时间和状态)。
我想调整超参数:num_nodes,在 Param_set
中。
这是一个 ParamUty
class 参数,默认值是:32,32
.
所以我决定对它进行 运行 变形。
我使用 'nested cross-validation'(有 10 个内部折叠和 3 个外部折叠)为 surv.deephit
学习者的超参数优化编写了如下代码。
#task definition
task.mlr <- TaskSurv$new(id = "id", backend = main.dataset, event = 'status', time = 'time')
#learner definition
dh.learner <- lrn('surv.deephit')
#resampling method
resampling <- rsmp('cv', folds =10)
#tuner method
tuner <- tnr('random_search')
#measure method
measure <- msr('surv.harrellC')
#termination method
terminator <- trm('stagnation')
#search_space definition(for num_nodes)
search_space <- ps(num_nodes = p_fct(list(c(32,64,128,256)), trafo = function(x) c(sample(x,1), sample(x,1))))
#To check search_space
generate_design_random(search_space,10)$transpose()
当我运行最后几行代码用t运行spose时,它展示了一个num_nodes列表,每个列表包含一个成对的类别,如下:
[[1]]$num_nodes
[1] 64 128
[[2]]$num_nodes
[1] 32 256
...
然后我写了下面的代码:
#defining autotuner
at <- AutoTuner$new(dh.learner, resampling, measure, terminator, tuner, search_space)
#outer cross validation
resampling_outer <- rsmp('cv', folds = 3)
# nested resampling
nest_rsm <- resample(task.mlr, at, resampling_outer)
但在嵌套重采样的结果中,它显示 num_nodes 为 c(32,64,128,256)
而不是一对节点。像这样:
num_nodes
c(32,64,128,256)
num_nodes
c(32,64,128,256)
...
我怎样才能 运行sform 'Param_Uty' 有 2 个级别(例如 32,64
)?
老实说,我对这个话题进行了大量的搜索,终究没有找到合适的答案,所以非常感谢您的帮助。
您好,感谢您使用 mlr3proba。实际上,我刚刚写完一个教程来准确回答这个问题!它涵盖了 mlr3proba 中神经网络的训练、调整和评估。对于您的具体问题,教程的相关部分是这样的:
library(paradox)
search_space = ps(
nodes = p_int(lower = 1, upper = 32),
k = p_int(lower = 1, upper = 4)
)
search_space$trafo = function(x, param_set) {
x$num_nodes = rep(x$nodes, x$k)
x$nodes = x$k = NULL
return(x)
}
这里我调整了两个新的超参数,一个代表每层的节点数,一个代表层数,然后我创建一个转换,将它们组合成所需的超参数,num_nodes
.
您应该能够将此应用于您的示例。
对于生存分析,我使用 mlr3proba
R 包。
我的数据集包含 39 个特征(包括连续特征和因子,我将它们全部转换为整数和数字)和目标(时间和状态)。
我想调整超参数:num_nodes,在 Param_set
中。
这是一个 ParamUty
class 参数,默认值是:32,32
.
所以我决定对它进行 运行 变形。
我使用 'nested cross-validation'(有 10 个内部折叠和 3 个外部折叠)为 surv.deephit
学习者的超参数优化编写了如下代码。
#task definition
task.mlr <- TaskSurv$new(id = "id", backend = main.dataset, event = 'status', time = 'time')
#learner definition
dh.learner <- lrn('surv.deephit')
#resampling method
resampling <- rsmp('cv', folds =10)
#tuner method
tuner <- tnr('random_search')
#measure method
measure <- msr('surv.harrellC')
#termination method
terminator <- trm('stagnation')
#search_space definition(for num_nodes)
search_space <- ps(num_nodes = p_fct(list(c(32,64,128,256)), trafo = function(x) c(sample(x,1), sample(x,1))))
#To check search_space
generate_design_random(search_space,10)$transpose()
当我运行最后几行代码用t运行spose时,它展示了一个num_nodes列表,每个列表包含一个成对的类别,如下:
[[1]]$num_nodes
[1] 64 128
[[2]]$num_nodes
[1] 32 256
...
然后我写了下面的代码:
#defining autotuner
at <- AutoTuner$new(dh.learner, resampling, measure, terminator, tuner, search_space)
#outer cross validation
resampling_outer <- rsmp('cv', folds = 3)
# nested resampling
nest_rsm <- resample(task.mlr, at, resampling_outer)
但在嵌套重采样的结果中,它显示 num_nodes 为 c(32,64,128,256)
而不是一对节点。像这样:
num_nodes
c(32,64,128,256)
num_nodes
c(32,64,128,256)
...
我怎样才能 运行sform 'Param_Uty' 有 2 个级别(例如 32,64
)?
老实说,我对这个话题进行了大量的搜索,终究没有找到合适的答案,所以非常感谢您的帮助。
您好,感谢您使用 mlr3proba。实际上,我刚刚写完一个教程来准确回答这个问题!它涵盖了 mlr3proba 中神经网络的训练、调整和评估。对于您的具体问题,教程的相关部分是这样的:
library(paradox)
search_space = ps(
nodes = p_int(lower = 1, upper = 32),
k = p_int(lower = 1, upper = 4)
)
search_space$trafo = function(x, param_set) {
x$num_nodes = rep(x$nodes, x$k)
x$nodes = x$k = NULL
return(x)
}
这里我调整了两个新的超参数,一个代表每层的节点数,一个代表层数,然后我创建一个转换,将它们组合成所需的超参数,num_nodes
.
您应该能够将此应用于您的示例。