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

如何将多组随机森林回归的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:07:01