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

如何用R语言的sample()函数创建多个训练子集

用R语言实现无放回抽样创建指定训练子集

核心逻辑:因为要求无放回抽样,绝不能单独对每个子集调用sample(),否则会出现样本重复。正确做法是先一次性抽取所有需要的样本索引,再拆分到各个子集,确保所有子集的观测值互不重叠。

具体实现步骤与代码

假设你的原始训练数据集名为train_data(包含60000条观测),按以下步骤操作:

  1. 确认总抽取量
    总需抽取样本数 = 3×500 + 3×1000 + 3×2000 = 10500,远小于60000,完全满足无放回抽样条件。

  2. 一次性抽取所有所需索引
    先获取原始数据集的行索引,再无放回抽取10500个索引:

    # 获取原始数据集的行索引
    all_indices <- seq_len(nrow(train_data))
    # 无放回抽取所有需要的索引
    sampled_indices <- sample(all_indices, size = 10500, replace = FALSE)
    
  3. 拆分索引到对应子集
    按需求把抽取的索引分成9组:

    # 拆分3个500条的子集索引
    subset_500_1 <- sampled_indices[1:500]
    subset_500_2 <- sampled_indices[501:1000]
    subset_500_3 <- sampled_indices[1001:1500]
    
    # 拆分3个1000条的子集索引
    subset_1000_1 <- sampled_indices[1501:2500]
    subset_1000_2 <- sampled_indices[2501:3500]
    subset_1000_3 <- sampled_indices[3501:4500]
    
    # 拆分3个2000条的子集索引
    subset_2000_1 <- sampled_indices[4501:6500]
    subset_2000_2 <- sampled_indices[6501:8500]
    subset_2000_3 <- sampled_indices[8501:10500]
    
  4. 从原始数据提取子集
    用拆分好的索引提取对应子集:

    # 创建500条的子集
    train_sub500_1 <- train_data[subset_500_1, ]
    train_sub500_2 <- train_data[subset_500_2, ]
    train_sub500_3 <- train_data[subset_500_3, ]
    
    # 创建1000条的子集
    train_sub1000_1 <- train_data[subset_1000_1, ]
    train_sub1000_2 <- train_data[subset_1000_2, ]
    train_sub1000_3 <- train_data[subset_1000_3, ]
    
    # 创建2000条的子集
    train_sub2000_1 <- train_data[subset_2000_1, ]
    train_sub2000_2 <- train_data[subset_2000_2, ]
    train_sub2000_3 <- train_data[subset_2000_3, ]
    

验证抽样有效性

可以通过以下代码检查子集是否存在重复观测:

# 合并所有子集的索引,检查重复值
all_sub_indices <- c(subset_500_1, subset_500_2, subset_500_3,
                     subset_1000_1, subset_1000_2, subset_1000_3,
                     subset_2000_1, subset_2000_2, subset_2000_3)
# 检查是否有重复索引
any(duplicated(all_sub_indices))

返回FALSE则说明所有子集观测值唯一,符合无放回抽样要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:50:24