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

在tidymodels中调优正则化Cox比例风险模型遇模式错误求助

解决tidymodels中正则化Cox比例风险模型调优的"未知模式"错误

你的核心问题出在响应变量的定义方式以及调优时的指标适配问题,以下是具体修正方案:

问题根源

  1. 配方中你将time和status作为两个独立的响应变量,但Cox模型需要的是一个Surv()生存对象作为单一响应。
  2. tune_grid()默认的指标集不支持censored regression模式,需要显式指定生存分析专用的评估指标。

修正后的完整代码

library(glmnet)
library(survival)
library(tidymodels)
library(censored)

data("CoxExample")
# 合并数据并正确构造生存响应列
df <- as.data.frame(cbind(CoxExample[["y"]], CoxExample[["x"]]))
df$surv_obj <- with(df, Surv(time, status))

# 修正配方:使用生存对象作为响应
lasso_prep <-
  recipe(surv_obj ~ ., data = df) %>% 
  step_rm(time, status) %>%  # 移除单独的时间和状态列,避免冗余
  step_normalize(all_predictors())

# 模型定义:保持penalty调优、mixture=1(LASSO)
lasso_tune <- 
  proportional_hazards(penalty = tune(), mixture = 1) %>% 
  set_engine("glmnet") %>% 
  set_mode("censored regression")

# 工作流整合
lasso_workflow <-
  workflow() %>% 
  add_recipe(lasso_prep) %>% 
  add_model(lasso_tune)

# 交叉验证与调优网格
set.seed(123)
cv_splits <- vfold_cv(df, v = 10)  
lambda_grid <- grid_regular(penalty(), levels = 50)

# 显式指定生存分析指标,解决模式不匹配问题
lasso_grid <- tune_grid(
  lasso_workflow,
  resamples = cv_splits,
  grid = lambda_grid,
  metrics = metric_set(censored::concordance_survival)
)

关键修改说明

  • 响应变量处理:新增surv_obj列存储Surv(time, status)对象,配方中以此作为响应,同时移除单独的time和status列避免混淆。
  • 指标指定:通过metrics = metric_set(censored::concordance_survival)指定生存分析专用的C指数指标,确保check_metrics()能识别censored regression模式。
  • 模型定义部分无需修改,你原本的proportional_hazards()配置是正确的,错误并非来自模型模式的指定。

验证结果

运行修正后的代码后,tune_grid()将正常执行交叉验证调优,你可以通过collect_metrics(lasso_grid)查看不同penalty下的模型性能。

内容的提问来源于stack exchange,提问作者Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:35:13