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

R语言中100次随机划分数据集的最优存储方案咨询

最优存储方案:用列表(List)而非单独变量

作为R语言新手,你遇到的这个问题其实很常见——当需要多次重复数据集划分时,选对存储方式能让后续的模型训练和分析省心太多。首先明确:绝对不推荐为每组划分创建单独变量(比如H1, H2...H100),原因很简单:

  • 手动创建100个变量会让代码极度冗余,写起来麻烦
  • 后续遍历、对比这些变量时,需要写大量重复代码,维护性极差
  • 变量名过多会污染全局环境,容易出错

而列表(List)是最适合的存储方式,它能灵活收纳所有划分结果,且方便后续批量处理。下面给你两种具体实现方式,按需选择:

方式1:直接存储划分后的训练集和测试集

如果你的数据集不大,直接把每次划分好的完整数据集存在列表里,使用起来更直观:

library(rminer)

# 初始化一个长度为100的空列表
holdout_results <- vector("list", 100)

# 循环生成100次划分
for (i in 1:100) {
  # 执行划分,这里把ratio参数补全(比如设为0.7,即70%训练集)
  H <- holdout(myData$salary, ratio = 0.7)
  
  # 将当前划分的训练集、测试集存入列表
  holdout_results[[i]] <- list(
    train_set = myData[H$tr, ],
    test_set = myData[H$ts, ]
  )
}

# 调用示例:取第10次划分的训练集
holdout_results[[10]]$train_set

方式2:存储划分索引(更节省内存)

如果你的数据集很大,直接存完整数据集会占用过多内存,优先存储划分的索引(即holdout返回的tr和ts),后续需要时再从原数据集中提取:

library(rminer)

holdout_indices <- vector("list", 100)

for (i in 1:100) {
  H <- holdout(myData$salary, ratio = 0.7)
  # 只存索引,不存完整数据集
  holdout_indices[[i]] <- list(
    train_idx = H$tr,
    test_idx = H$ts
  )
}

# 调用示例:取第5次划分的测试集
test_set_5 <- myData[holdout_indices[[5]]$test_idx, ]

后续:找到最优划分的小技巧

存好所有划分后,你可以批量训练模型、评估性能,最终找到最优的那一组:

# 假设用随机森林模型,先加载包
library(randomForest)

# 初始化向量存储每次划分的模型性能(比如均方误差MSE)
mse_scores <- numeric(100)

for (i in 1:100) {
  # 提取当前划分的训练/测试集(这里用索引方式举例)
  train_data <- myData[holdout_indices[[i]]$train_idx, ]
  test_data <- myData[holdout_indices[[i]]$test_idx, ]
  
  # 训练模型(假设salary是因变量,其他为自变量)
  rf_model <- randomForest(salary ~ ., data = train_data)
  
  # 预测并计算MSE
  predictions <- predict(rf_model, test_data)
  mse_scores[i] <- mean((test_data$salary - predictions)^2)
}

# 找到MSE最小的划分(即最优划分)
best_split_idx <- which.min(mse_scores)
best_train_set <- myData[holdout_indices[[best_split_idx]]$train_idx, ]
best_test_set <- myData[holdout_indices[[best_split_idx]]$test_idx, ]

这样一套流程下来,你不仅能高效存储所有划分,还能轻松找到最优的训练/测试集组合,代码也整洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:43:16