RandomForestSRC回归模型多参数组合网格搜索实现方案咨询
RandomForestSRC网格搜索参数调优实现方案
报错原因
rfsrc()单次调用仅支持接收单组参数值,直接传入多值向量时函数会尝试用向量整体做条件判断,因此触发「条件长度大于1,仅使用第一个元素」的警告。
高效实现方案
无需手动遍历参数组合,通过参数网格生成+批量映射的方式即可完成全参数组合训练,同时原生支持后续的调优可视化需求,代码实现如下:
步骤1:加载依赖包、生成参数网格
# 加载依赖包 library(randomForestSRC) library(purrr) library(dplyr) library(ggplot2) # 自动生成所有参数的组合网格 param_grid <- expand.grid( mtry = c(4,8,16), nodesize = c(50,150,300), ntrees = c(500,1000,2000), nodedepth = c(5,10), stringsAsFactors = FALSE )
步骤2:定义单模型训练函数
train_rfsrc <- function(mtry, nodesize, ntrees, nodedepth) { mod <- rfsrc( mort_30 ~ variable1 + variable2 + variable3, # 替换为你的完整公式 data = data.train, mtry = mtry, nodesize = nodesize, ntrees = ntrees, nodedepth = nodedepth, blocksize = 1, importance = TRUE, seed = 40 ) # 返回参数对应模型的评估指标,可按需添加测试集误差、特征重要性等 return(tibble( mtry = mtry, nodesize = nodesize, ntrees = ntrees, nodedepth = nodedepth, oob_mse = mod$err.rate[ntrees] # 取训练完成后的OOB均方误差 )) }
步骤3:批量训练所有参数组合
# 单线程版本,适合少量参数组合 result_df <- pmap_dfr(param_grid, train_rfsrc) # 并行加速版本(推荐),可充分利用CPU核心减少耗时 # library(furrr) # plan(multisession, workers = 4) # workers参数设置为你的CPU可用核心数 # result_df <- future_pmap_dfr(param_grid, train_rfsrc, .options = furrr_options(seed = 40))
步骤4:调优过程可视化示例
生成的result_df为结构化的参数-指标对应表,可直接用ggplot2绘制任意维度的调优对比图:
ggplot(result_df, aes(x = factor(mtry), y = oob_mse, color = factor(nodesize), group = nodesize)) + geom_point(size = 2) + geom_line(linewidth = 1) + facet_grid(factor(nodedepth) ~ factor(ntrees), labeller = label_both) + labs(x = "mtry取值", y = "OOB均方误差", color = "nodesize取值") + theme_bw()
补充说明
如果需要新增参数或调整参数候选值,仅需要修改param_grid中对应参数的向量即可,无需改动其他逻辑。
内容的提问来源于stack exchange,提问作者Lærke Kjær
相关产品推荐
相关产品推荐

