如何将多组随机森林回归的R²值导出至CSV文件?
解决方案
要实现收集不同后缀预测变量对应的RF模型R²并导出为r2.csv,只需要在你的循环训练逻辑中添加结果收集和最终导出的步骤,具体操作如下:
步骤1:初始化结果存储容器
先创建一个空的数据框,用来存放每个后缀编号(std)和对应的R²值(r2):
# 初始化空数据框,指定列类型避免自动转换问题 results_df <- data.frame(std = character(), r2 = numeric(), stringsAsFactors = FALSE)
步骤2:在循环中计算并存储R²
在你的现有循环里,每训练完一个RF模型后,计算其R²并追加到结果数据框中。这里提供两种计算R²的方式,根据你的需求选择:
示例完整循环代码
假设你的后缀列表是c("030", "040", "050"),修改后的完整逻辑如下:
# 你的后缀编号列表,替换成实际的编号集合 suffix_list <- c("030", "040", "050") for (suffix in suffix_list) { # 1. 筛选当前后缀对应的预测变量 # 注意:正则表达式要匹配你的变量名规则,比如变量是"temp030"就用paste0(suffix, "$") pred_cols <- grep(paste0("_", suffix, "$"), colnames(your_data), value = TRUE) # 2. 构建训练数据集(包含响应变量ntl和当前预测变量) train_data <- your_data[, c("ntl", pred_cols)] # 3. 训练RF回归模型(参数可根据你的需求调整) rf_model <- randomForest(ntl ~ ., data = train_data, ntree = 500, mtry = sqrt(length(pred_cols))) # 4. 计算R² # 方式A:直接调用RF模型返回的最后一棵树的R²值 current_r2 <- rf_model$rsq[length(rf_model$rsq)] # 方式B:手动计算(如果需要用测试集验证,替换train_data为test_data即可) # pred_vals <- predict(rf_model, train_data) # current_r2 <- 1 - sum((train_data$ntl - pred_vals)^2) / sum((train_data$ntl - mean(train_data$ntl))^2) # 5. 将当前结果追加到结果数据框 results_df <- rbind(results_df, data.frame(std = suffix, r2 = current_r2)) }
步骤3:导出为r2.csv
循环结束后,将结果数据框写入CSV文件:
# 导出时去掉行号,符合常规CSV格式 write.csv(results_df, "r2.csv", row.names = FALSE)
注意事项
- 变量匹配的正则表达式要根据你的实际变量名调整:如果变量名是
var030而非var_030,把paste0("_", suffix, "$")改成paste0(suffix, "$")即可。 - 如果需要用测试集的R²评估模型,提前划分训练/测试集,在计算时用测试集的真实值和预测值计算R²,更能反映模型泛化能力。
- 若后缀数量较多,推荐使用
dplyr::bind_rows()代替rbind(),效率更高。
内容的提问来源于stack exchange,提问作者Nikos
相关产品推荐
相关产品推荐

