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

如何在mlr3中调优surv.svm的kernel.pars及联合调参

生存SVM中degree参数调优及kernel与degree联合调优

一、单独调优多项式核的degree参数

对于生存SVM的多项式核(poly_kernel),degree参数嵌套在kernel.pars列表里,调优核心是通过交叉验证对比不同degree值的模型性能,具体操作如下:

  • 确定degree候选范围:通常选1到5(过高的degree易引发过拟合),比如c(1,2,3,4)
  • 遍历每个候选值,用交叉验证训练模型,记录生存模型核心性能指标(如C-index,用于衡量模型对生存时间排序的准确性)
  • 筛选出性能最优的degree值

代码示例(基于survivalSVM包)

library(survivalSVM)
library(survival)

# 以lung数据集为例做预处理
data(lung)
lung_clean <- na.omit(lung)
y <- Surv(lung_clean$time, lung_clean$status)
X <- lung_clean[, -c(1,2)]  # 剔除生存时间与状态列

# 定义degree候选值
degree_candidates <- c(1,2,3,4)
cv_cindex <- c()

set.seed(123)  # 固定随机种子保证结果可复现
for(d in degree_candidates){
  # 5折交叉验证训练模型
  svm_model <- surv.svm(x = X, y = y, kernel = "poly_kernel",
                        kernel.pars = list(degree = d), cross = 5)
  # 提取交叉验证的C-index
  cv_cindex <- c(cv_cindex, svm_model$cross)
}

# 查看各degree对应的性能
names(cv_cindex) <- paste0("degree_", degree_candidates)
print(cv_cindex)

# 选择最优degree
best_degree <- degree_candidates[which.max(cv_cindex)]
cat("最优degree值:", best_degree, "\n")

二、联合调优kernel与对应参数(含degree)

若要同时选择核函数(如线性、多项式、径向基)及对应参数,需构建多维度参数网格,再通过交叉验证筛选最优组合:

  • 搭建参数网格:包含不同kernel类型,以及各kernel对应的参数(比如poly的degree、rbf的sigma)
  • 遍历网格内的每一组参数,用交叉验证训练模型并评估性能
  • 保留性能最佳的kernel与参数组合

代码示例

# 构建参数网格,注意不同核的参数对应关系
param_grid <- expand.grid(
  kernel = c("linear_kernel", "poly_kernel", "rbf_kernel"),
  degree = c(NA, 1,2,3),  # linear和rbf核无需degree,设为NA
  sigma = c(NA, 0.1, 0.5, 1)  # linear和poly核无需sigma,设为NA
)

# 过滤无效参数组合
valid_grid <- param_grid[
  (param_grid$kernel == "linear_kernel" & is.na(param_grid$degree) & is.na(param_grid$sigma)) |
  (param_grid$kernel == "poly_kernel" & !is.na(param_grid$degree) & is.na(param_grid$sigma)) |
  (param_grid$kernel == "rbf_kernel" & is.na(param_grid$degree) & !is.na(param_grid$sigma)),
]

set.seed(123)
best_cindex <- -Inf
best_config <- NULL

# 遍历所有有效参数组合
for(i in 1:nrow(valid_grid)){
  kernel_type <- valid_grid$kernel[i]
  kernel_pars <- list()
  
  if(kernel_type == "poly_kernel"){
    kernel_pars$degree <- valid_grid$degree[i]
  } else if(kernel_type == "rbf_kernel"){
    kernel_pars$sigma <- valid_grid$sigma[i]
  }
  
  # 训练并做交叉验证
  svm_model <- surv.svm(x = X, y = y, kernel = kernel_type,
                        kernel.pars = kernel_pars, cross = 5)
  current_cindex <- svm_model$cross
  
  # 更新最优配置
  if(current_cindex > best_cindex){
    best_cindex <- current_cindex
    best_config <- list(kernel = kernel_type, kernel_pars = kernel_pars)
  }
}

# 输出最优结果
cat("最优核函数及参数:\n")
print(best_config)
cat("对应的交叉验证C-index:", best_cindex, "\n")

关键注意事项

  • 生存模型优先选用C-index作为性能指标,也可使用Brier评分衡量预测误差
  • 交叉验证建议采用5折或10折,避免单次结果的随机性
  • 若使用其他包的生存SVM实现(如kernlab的survSVM),参数语法可能有差异,但调优逻辑完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:12:08