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

如何用which.max获取R语言随机森林最优maxnodes值?

筛选caret随机森林调优中对应最高R-squared的maxnodes值

核心步骤代码示例

假设你已经将不同maxnodes参数训练的随机森林模型存储在列表rf_models中,同时有对应参数值的向量maxnodes_candidates:

  1. 提取所有模型的R-squared值
    用sapply遍历模型列表,从每个模型的results中取出R-squared指标:
# 提取每个模型的R-squared
rsq_values <- sapply(rf_models, function(model) model$results$Rsquared)
  1. 找到最优maxnodes值
    用which.max定位最大R-squared对应的索引,再从参数向量中取出对应值:
# 获取对应最高R-squared的maxnodes
best_maxnodes <- maxnodes_candidates[which.max(rsq_values)]

完整场景示例

如果是通过循环训练不同maxnodes的模型,完整流程如下:

# 定义maxnodes候选值
maxnodes_candidates <- c(10, 20, 30, 40, 50)
rf_models <- list()

# 循环训练不同maxnodes的模型
for (i in seq_along(maxnodes_candidates)) {
  set.seed(123) # 固定随机种子保证可复现
  rf_models[[i]] <- train(y ~ ., 
                          data = train_data,
                          method = "rf",
                          trControl = trainControl(method = "cv", number = 5), # 5折交叉验证
                          tuneGrid = data.frame(mtry = 3, maxnodes = maxnodes_candidates[i], ntree = 500))
}

# 提取R-squared并筛选最优maxnodes
rsq_values <- sapply(rf_models, function(model) model$results$Rsquared)
best_maxnodes <- maxnodes_candidates[which.max(rsq_values)]

应用到ntree调优

拿到最优best_maxnodes后,固定该参数调优ntree:

# 定义ntree候选值
ntree_candidates <- c(300, 500, 700, 1000)

# 训练不同ntree的模型,固定最优maxnodes
rf_ntree_tune <- train(y ~ ., 
                        data = train_data,
                        method = "rf",
                        trControl = trainControl(method = "cv", number = 5),
                        tuneGrid = expand.grid(mtry = 3, maxnodes = best_maxnodes, ntree = ntree_candidates))

注:如果你的模型列表的名称直接是maxnodes的字符值(比如names(rf_models) = as.character(maxnodes_candidates)),可以直接用as.integer(names(rf_models)[which.max(rsq_values)])获取最优值,无需单独的参数向量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:50:38