如何用which.max获取R语言随机森林最优maxnodes值?
筛选caret随机森林调优中对应最高R-squared的maxnodes值
核心步骤代码示例
假设你已经将不同maxnodes参数训练的随机森林模型存储在列表rf_models中,同时有对应参数值的向量maxnodes_candidates:
- 提取所有模型的R-squared值
用sapply遍历模型列表,从每个模型的results中取出R-squared指标:
# 提取每个模型的R-squared rsq_values <- sapply(rf_models, function(model) model$results$Rsquared)
- 找到最优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
相关产品推荐
相关产品推荐

