You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:35:09