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

使用R中sample()生成多次6:2:2 train/val/test拆分的相关问题咨询

问题1:test集观测数波动的原因

你的数据集总共只有10行,预期test占20%即2条的前提是固定每个分组的样本量,但你当前的实现逻辑是对每一行独立按0.6/0.2/0.2的概率分配到train/val/test分组,属于独立随机抽样:

  • 10个样本中最终落入test集的数量服从参数为n=10, p=0.2的二项分布,经计算出现1条的概率约27%、出现2条的概率约30%、出现3条的概率约20%,因此观测到数量波动属于正常现象。
  • 这种抽样逻辑是按概率比例分配,仅在样本量极大时各组占比才会无限接近预设比例,小样本下必然出现波动。

问题2:sample()的replace参数作用与设置建议

replace参数的作用

replace参数控制抽样是否允许重复:

  • 设为TRUE为有放回抽样:同一个值可以被多次抽取,你当前的代码中待抽样的向量是1:3,要抽取10次(和数据行数一致),必须开有放回抽样才能实现给每一行分配分组标签的逻辑。
  • 设为FALSE为无放回抽样:每个值只能被抽一次,你当前的场景下待抽样的向量只有3个元素,抽样次数大于向量长度,直接会触发报错,因此你当前的代码不能将replace设为FALSE。

实现固定分组样本量的修改方案

如果你需要每次拆分都严格保证train 6条、val 2条、test 2条,可以改用以下实现逻辑:

library(dplyr)

tbl <- tibble(id = 1:10)

train = list()
val = list()
test = list()

for (run in 1:5)
{
  # 先打乱全量样本的索引
  shuffled_idx <- sample(nrow(tbl), size = nrow(tbl), replace = FALSE)
  # 按位置切分固定数量的样本
  train[[run]] <- tbl[shuffled_idx[1:6], ]
  val[[run]] <- tbl[shuffled_idx[7:8], ]
  test[[run]] <- tbl[shuffled_idx[9:10], ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:39:01