MLR3中surv.aorsf的split_rule=cstat参数无法识别的解决咨询
在mlr3中使用surv.aorsf的split_rule='cstat'参数解决方法
问题背景
尝试用mlr3extralearners里的surv.aorsf学习器,设置orsf原生支持的split_rule='cstat'(用Harrel's一致性统计量做分裂规则)时遇到以下问题:
surv.aorsf的官方参数列表里没有split_rule,执行learner$param_set$ids()也看不到这个参数- 初始化带该参数的学习器会报错,即使更新mlr3extralearners和mlr3tuning后,仍提示
split_rule is unrecognized - did you mean n_split?
可行解决方案
1. 升级到mlr3extralearners的开发版
这个问题大概率是官方稳定版的参数映射遗漏,开发版可能已经修复:
# 先安装devtools(如果没装) if (!requireNamespace("devtools", quietly = TRUE)) { install.packages("devtools") } # 安装mlr3extralearners的GitHub开发版 devtools::install_github("mlr-org/mlr3extralearners")
重启R后,再检查参数集合:
learner = mlr3::lrn("surv.aorsf") learner$param_set$ids() # 此时应该能看到split_rule
如果能看到,直接正常初始化学习器即可:
ao_tuning_L = lrn("surv.aorsf", split_rule="cstat", split_min_events = to_tune(2,10), mtry = to_tune(1,9), n_retry = to_tune(0, 5), n_tree = to_tune(100, 1000))
2. 自定义扩展surv.aorsf学习器
如果开发版仍未解决,自己构建一个继承原学习器的自定义版本,手动添加split_rule参数:
library(mlr3) library(mlr3extralearners) library(orsf) # 定义自定义学习器类 LearnerSurvAORSFCstat = R6::R6Class( "LearnerSurvAORSFCstat", inherit = mlr3extralearners::LearnerSurvAORSF, public = list( initialize = function() { super$initialize() # 添加split_rule参数,对应orsf的合法取值 self$param_set$add( mlr3::ParamFct$new( id = "split_rule", levels = c("logrank", "cstat", "auc", "gini"), default = "logrank", tags = c("train", "predict") ) ) } ) ) # 把自定义学习器注册到mlr3的学习器库 mlr_learners$add("surv.aorsf.cstat", LearnerSurvAORSFCstat) # 使用自定义学习器 ao_tuning_L = lrn("surv.aorsf.cstat", split_rule="cstat", split_min_events = to_tune(2,10), mtry = to_tune(1,9), n_retry = to_tune(0, 5), n_tree = to_tune(100, 1000))
3. 临时绕过参数检查(不推荐长期使用)
如果只是临时测试,可以直接给学习器的参数集合手动赋值,绕过mlr3的参数检查:
ao_tuning_L = mlr3::lrn("surv.aorsf") # 直接添加split_rule参数值 ao_tuning_L$param_set$values$split_rule = "cstat" # 再设置其他调参参数 ao_tuning_L$param_set$values$split_min_events = to_tune(2,10) ao_tuning_L$param_set$values$mtry = to_tune(1,9) ao_tuning_L$param_set$values$n_retry = to_tune(0,5) ao_tuning_L$param_set$values$n_tree = to_tune(100,1000)
注意:这个方法可能触发参数检查警告,仅用于临时验证,长期使用建议用前两种方法。
问题原因说明
mlr3extralearners中的学习器参数是手动映射到原R包(这里是orsf)的,出现这个问题是因为官方在更新示例时,没有同步把split_rule参数添加到surv.aorsf的参数集合中,属于参数映射的遗漏。
内容的提问来源于stack exchange,提问作者gggg
相关产品推荐
相关产品推荐

