随机分配给训练/测试数据集时,将R数据帧中的行分组在一起
我有一个数据帧,它由X行块组成,每个行对应一个单独的行(其中X对于每个单独的行可能不同)。我想将这些个体随机分配到训练、测试和验证样本中,但到目前为止,我还无法获得正确的语法,以确保用户的X行中的每一行始终收集到相同的子样本中 例如,数据可以简化为:随机分配给训练/测试数据集时,将R数据帧中的行分组在一起,r,sampling,cross-validation,R,Sampling,Cross Validation,我有一个数据帧,它由X行块组成,每个行对应一个单独的行(其中X对于每个单独的行可能不同)。我想将这些个体随机分配到训练、测试和验证样本中,但到目前为止,我还无法获得正确的语法,以确保用户的X行中的每一行始终收集到相同的子样本中 例如,数据可以简化为: user feature1 feature2 1 "A" "B" 1 "L" "L" 1 "Q" "B" 1
user feature1 feature2
1 "A" "B"
1 "L" "L"
1 "Q" "B"
1 "D" "M"
1 "D" "M"
1 "P" "E"
2 "A" "B"
2 "R" "P"
2 "A" "F"
3 "X" "U"
... ... ...
然后,如果我最终将用户随机分配到一个训练集、测试集或验证集,那么该用户的所有行(用户编号是唯一的)都将在同一个集中,并分组在一起,例如,如果用户1在训练集中,那么格式仍然是:
user feature1 feature2
1 "A" "B"
1 "L" "L"
1 "Q" "B"
1 "D" "M"
1 "D" "M"
1 "P" "E"
作为奖励,我很想知道这个问题的解决方案是否可以扩展到进行k-fold交叉验证,但到目前为止,我还没有想出更简单的第一步
提前感谢。我们可以先创建一个索引来指示每组数据。我选择了test:60%,train:40%,validation:10%,但是您可以使用
sample
的prob=
参数选择所需的比率。然后,我们通过用户
拆分数据帧。最后,我们根据我们创建的索引对用户进行rbind
。然后我们可以调用all_dfs[['train']]
,依此类推:
indx <- sample(1:3, length(unique(df$user)), replace=TRUE, prob=c(.6,.4,.1))
s <- split(df, df$user)
all_dfs <- lapply(1:3, function(x) do.call(rbind, s[indx==x]))
names(all_dfs) <- c('train', 'test', 'validation')
indx询问堆栈溢出。